Spaces:
Paused
Paused
File size: 1,890 Bytes
3c3f089 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import { ApolloClient, InMemoryCache, ApolloLink, split } from "@apollo/client";
import { createUploadLink } from "apollo-upload-client";
import { GraphQLWsLink } from "@apollo/client/link/subscriptions";
import { createClient } from "graphql-ws";
import { getMainDefinition } from "@apollo/client/utilities";
import { offsetLimitPagination } from "./offsetLimitPagination";
const loggerLink = new ApolloLink((operation, forward) => {
return forward(operation).map((result) => {
console.info("response", result?.data);
return result;
});
});
const wsLink =
typeof window !== "undefined"
? new GraphQLWsLink(
createClient({
url: `${process.env.NEXT_PUBLIC_WS_API_URL}`,
})
)
: null;
const httpLink = (token?: string) =>
createUploadLink({
uri: process.env.NEXT_PUBLIC_API_URL,
headers: !token
? { "apollo-require-preflight": true }
: {
authorization: `Bearer ${token}`,
"apollo-require-preflight": true,
},
});
const splitLink = (token?: string) =>
typeof window !== "undefined" && wsLink != null
? split(
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === "OperationDefinition" &&
definition.operation === "subscription"
);
},
wsLink, // @ts-ignore
httpLink(token)
)
: httpLink(token);
export const createApolloClient = (token?: string) => {
return new ApolloClient({
defaultOptions: {
query: {
errorPolicy: "all",
},
mutate: {
errorPolicy: "all",
},
},
// @ts-ignore
link: splitLink(token),
cache: new InMemoryCache({
typePolicies: {
Query: {
fields: {
projects: offsetLimitPagination(),
},
},
},
}),
});
};
|