diff --git a/packages/graphql/apollo/client.ts b/packages/graphql/apollo/client.ts index 7ee265f..dcbf72a 100644 --- a/packages/graphql/apollo/client.ts +++ b/packages/graphql/apollo/client.ts @@ -1,18 +1,17 @@ import { env as environment } from '../config/env'; import { getToken } from '../config/token'; +import { createLink } from './link'; import { ApolloClient, InMemoryCache } from '@apollo/client/core'; -type Parameters_ = { token: null | string | undefined }; +type Parameters = { token: null | string | undefined }; -export function createApolloClient(parameters?: Parameters_) { +export function createApolloClient(parameters?: Parameters) { return new ApolloClient({ cache: new InMemoryCache(), - headers: parameters?.token - ? { - Authorization: `Bearer ${parameters.token}`, - } - : undefined, - uri: environment.URL_GRAPHQL, + link: createLink({ + token: parameters?.token, + uri: environment.URL_GRAPHQL, + }), }); } diff --git a/packages/graphql/apollo/link.ts b/packages/graphql/apollo/link.ts new file mode 100644 index 0000000..80b5607 --- /dev/null +++ b/packages/graphql/apollo/link.ts @@ -0,0 +1,16 @@ +import { ApolloLink, from, HttpLink } from '@apollo/client'; + +type Parameters = { token: null | string | undefined; uri: string }; + +export function createLink({ token, uri }: Parameters) { + const cacheLink = new ApolloLink((operation, forward) => { + return forward(operation); + }); + + const httpLink = new HttpLink({ + headers: token ? { Authorization: `Bearer ${token}` } : undefined, + uri, + }); + + return from([cacheLink, httpLink]); +}