import { ApolloClient, InMemoryCache, createHttpLink } from "@apollo/client"; import { setContext } from "@apollo/client/link/context"; const httpLink = createHttpLink({ uri: process.env.NEXT_PUBLIC_SALEOR_API_URL || "http://localhost:8000/graphql/", }); const authLink = setContext((_, { headers }) => { // Add auth token for admin operations const token = process.env.SALEOR_API_TOKEN; return { headers: { ...headers, "Content-Type": "application/json", ...(token && { "Authorization": `Bearer ${token}` }), }, }; }); export const saleorClient = new ApolloClient({ link: authLink.concat(httpLink), cache: new InMemoryCache({ typePolicies: { Query: { fields: { products: { keyArgs: ["channel", "filter"], merge(_existing, incoming) { return incoming; }, }, }, }, }, }), defaultOptions: { watchQuery: { fetchPolicy: "cache-first", }, query: { fetchPolicy: "cache-first", }, }, }); export default saleorClient;