/** * Using next-with-apollo * https://github.com/lfades/next-with-apollo * * Changes: * * Reading endpoint and prodEndpoint from a config file * * Setting request to handle credentials. */ import withApollo from 'next-with-apollo' import ApolloClient from 'apollo-client' import { InMemoryCache } from 'apollo-cache-inmemory' import { onError } from 'apollo-link-error' import { ApolloLink } from 'apollo-link' import { createUploadLink } from 'apollo-upload-client' import { endpoint, prodEndpoint } from '../config' import { resolvers, typeDefs, initialState } from './localState' const cache = new InMemoryCache() function createClient ({ ctx, headers }) { return new ApolloClient({ link: ApolloLink.from([ onError(({ graphQLErrors, networkError }) => { if (graphQLErrors) { graphQLErrors.map(({ message, locations, path }) => console.log( `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}` ) ) } if (networkError) console.log(`[Network error]: ${networkError}`) }), createUploadLink({ uri: process.env.NODE_ENV === 'development' ? endpoint : prodEndpoint, headers, credentials: 'include' }) ]), fetchOptions: { mode: 'no-cors' }, cache, resolvers, typeDefs }) } cache.writeData(initialState) export default withApollo(createClient)