From aaea28bd84f4398c1b0871314a4b30f355deb36a Mon Sep 17 00:00:00 2001 From: Zak Burke Date: Wed, 3 Jan 2024 08:45:24 -0500 Subject: [PATCH] backward compat with http-header token authz --- src/createApolloClient.js | 7 ++++--- src/useOkapiKy.js | 5 ++++- src/withOkapiKy.js | 14 +++++++++----- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/createApolloClient.js b/src/createApolloClient.js index 393afb8bb..3894a1c1e 100644 --- a/src/createApolloClient.js +++ b/src/createApolloClient.js @@ -1,12 +1,13 @@ import { InMemoryCache, ApolloClient } from '@apollo/client'; -const createClient = ({ url, tenant }) => (new ApolloClient({ - uri: `${url}/graphql`, +const createClient = ({ tenant, token, url }) => (new ApolloClient({ + cache: new InMemoryCache(), credentials: 'include', headers: { 'X-Okapi-Tenant': tenant, + ...(token && { 'X-Okapi-Token': token }), }, - cache: new InMemoryCache(), + uri: `${url}/graphql`, })); export default createClient; diff --git a/src/useOkapiKy.js b/src/useOkapiKy.js index 921530cbb..98f55e548 100644 --- a/src/useOkapiKy.js +++ b/src/useOkapiKy.js @@ -2,7 +2,7 @@ import ky from 'ky'; import { useStripes } from './StripesContext'; export default ({ tenant } = {}) => { - const { locale = 'en', timeout = 30000, tenant: currentTenant, url } = useStripes().okapi; + const { locale = 'en', timeout = 30000, tenant: currentTenant, token, url } = useStripes().okapi; return ky.create({ credentials: 'include', @@ -11,6 +11,9 @@ export default ({ tenant } = {}) => { request => { request.headers.set('Accept-Language', locale); request.headers.set('X-Okapi-Tenant', tenant ?? currentTenant); + if (token) { + request.headers.set('X-Okapi-Token', token); + } } ] }, diff --git a/src/withOkapiKy.js b/src/withOkapiKy.js index 92fe93740..49094afee 100644 --- a/src/withOkapiKy.js +++ b/src/withOkapiKy.js @@ -8,29 +8,33 @@ const withOkapiKy = (WrappedComponent) => { static propTypes = { stripes: PropTypes.shape({ okapi: PropTypes.shape({ + locale: PropTypes.string, tenant: PropTypes.string.isRequired, - url: PropTypes.string.isRequired, timeout: PropTypes.number, - locale: PropTypes.string, + token: PropTypes.string, + url: PropTypes.string.isRequired, }).isRequired, }).isRequired, }; constructor(props) { super(); - const { tenant, url, timeout = 30000, locale = 'en' } = props.stripes.okapi; + const { tenant, token, url, timeout = 30000, locale = 'en' } = props.stripes.okapi; this.okapiKy = ky.create({ credentials: 'include', - prefixUrl: url, hooks: { beforeRequest: [ request => { - request.headers.set('X-Okapi-Tenant', tenant); request.headers.set('Accept-Language', locale); + request.headers.set('X-Okapi-Tenant', tenant); + if (token) { + request.headers.set('X-Okapi-Token', token); + } } ] }, mode: 'cors', + prefixUrl: url, retry: 0, timeout, });