79 lines
1.9 KiB
JavaScript
79 lines
1.9 KiB
JavaScript
import { ApolloClient, ApolloLink } from "@apollo/client";
|
|
import { loadErrorMessages, loadDevMessages } from "@apollo/client/dev";
|
|
|
|
import createErrorLink from "./errorLink";
|
|
import createAuthLink from "./authLink";
|
|
import createRetryLink from "./retryLink";
|
|
import createHttpLink from "./httpLink";
|
|
import createWsLink from "./wsLink";
|
|
import createSplitLink from "./splitLink";
|
|
import createCancelLink from "./cancelLink";
|
|
import createSentryLink from "./sentryLink";
|
|
|
|
import createCache from "./cache";
|
|
|
|
if (__DEV__ || process.env.NODE_ENV !== "production") {
|
|
// Adds messages only in a dev environment
|
|
loadDevMessages();
|
|
loadErrorMessages();
|
|
}
|
|
|
|
export default function createApolloClient(options) {
|
|
const errorLink = createErrorLink(options);
|
|
const authLink = createAuthLink(options);
|
|
const cancelLink = createCancelLink();
|
|
const retryLink = createRetryLink(options);
|
|
const sentryLink = createSentryLink(options);
|
|
|
|
const httpLink = createHttpLink(options);
|
|
const wsLink = createWsLink(options);
|
|
const wsChain = ApolloLink.from([
|
|
sentryLink,
|
|
cancelLink,
|
|
errorLink,
|
|
authLink,
|
|
wsLink,
|
|
]);
|
|
|
|
const httpChain = ApolloLink.from([
|
|
sentryLink,
|
|
cancelLink,
|
|
retryLink,
|
|
errorLink,
|
|
authLink,
|
|
httpLink,
|
|
]);
|
|
|
|
const link = createSplitLink({
|
|
...options,
|
|
wsLink: wsChain,
|
|
httpLink: httpChain,
|
|
});
|
|
|
|
const cache = createCache();
|
|
|
|
const apolloClient = new ApolloClient({
|
|
cache,
|
|
// connectToDevTools: true, // Enable dev tools for better debugging
|
|
link,
|
|
resolvers: {},
|
|
ssrMode: false,
|
|
defaultOptions: {
|
|
watchQuery: {
|
|
fetchPolicy: "cache-and-network",
|
|
nextFetchPolicy: "cache-and-network",
|
|
},
|
|
query: {
|
|
fetchPolicy: "network-only",
|
|
},
|
|
mutate: {
|
|
fetchPolicy: "no-cache",
|
|
},
|
|
},
|
|
});
|
|
|
|
// Add subscription reset helper
|
|
apolloClient.restartWS = () => wsLink.client.restart();
|
|
|
|
return apolloClient;
|
|
}
|