54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
|
import { ApolloClient, from, HttpLink, InMemoryCache } from '@apollo/client';
|
||
|
import { onError } from '@apollo/client/link/error';
|
||
|
import { RetryLink } from '@apollo/client/link/retry';
|
||
|
|
||
|
export function createClient(base?: string) {
|
||
|
if (!base) {
|
||
|
throw new Error('Base must be passed into createClient!');
|
||
|
}
|
||
|
const gqlPath = 'query';
|
||
|
const urlHTTP = new URL(gqlPath, base);
|
||
|
const urlWS = new URL(gqlPath, base);
|
||
|
// Replace http with ws, preserving if its a secure connection eg. https => wss
|
||
|
urlWS.protocol = urlWS.protocol.replace('http', 'ws');
|
||
|
|
||
|
const cache = new InMemoryCache({
|
||
|
typePolicies: {
|
||
|
Query: {},
|
||
|
Account: {
|
||
|
keyFields: false,
|
||
|
fields: {
|
||
|
balanceFormatted: {},
|
||
|
},
|
||
|
},
|
||
|
Node: {
|
||
|
keyFields: false,
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const retryLink = new RetryLink({
|
||
|
delay: {
|
||
|
initial: 300,
|
||
|
max: 10000,
|
||
|
jitter: true,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const httpLink = new HttpLink({
|
||
|
uri: urlHTTP.href,
|
||
|
credentials: 'same-origin',
|
||
|
});
|
||
|
|
||
|
const errorLink = onError(({ graphQLErrors, networkError }) => {
|
||
|
console.log(graphQLErrors);
|
||
|
console.log(networkError);
|
||
|
});
|
||
|
|
||
|
return new ApolloClient({
|
||
|
connectToDevTools: process.env['NODE_ENV'] === 'development',
|
||
|
link: from([errorLink, retryLink, httpLink]),
|
||
|
cache,
|
||
|
});
|
||
|
}
|