import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client'; import { setContext } from '@apollo/client/link/context'; const httpLink = new HttpLink({ uri: process.env.NEXT_PUBLIC_GRAPHQL_URL || 'http://localhost:3020/graphql', }); const authLink = setContext((_, { headers }) => { // Get the authentication token from localStorage if it exists const token = typeof window !== 'undefined' ? localStorage.getItem('accessToken') : null; return { headers: { ...headers, authorization: token ? `Bearer ${token}` : '', 'apollo-require-preflight': 'true', // Required for Apollo Server 4.0 CSRF protection }, }; }); const apolloClient = new ApolloClient({ link: authLink.concat(httpLink), cache: new InMemoryCache(), defaultOptions: { watchQuery: { fetchPolicy: 'cache-and-network', }, }, }); export default apolloClient;