5eb06254de
* feat: add deposits table to deposits tab on portfolio page * feat: refactor use-withdraw hook to not invoke eth tx * feat: rename hook for clarity * feat: fix withdrawal creation test * feat: update withdraw-manager and withrawals-table tests * chore: fix lint * feat: remove web3 input to avoid double dialog * chore: use renderHook from testing-library/react * chore: update to use non deprecated fields * chore: remove usage of all bridge contract * feat: correctly merge cache update in withdrawals table * feat: changes to support token app withdrawals * chore: add height to ag grid table wrapping element * feat: add txhash col to withdraw table * feat: provide better ui if withdrawal is not ready to be completed * feat: use separate dialogs for txs * feat: allow user to immediately complete withdrawal if delay not triggered * feat: add withdraw store to tidy up state management * chore: fix tests * chore: convert callback to promises, fix tests, delete withdraw page * chore: fix lint errors * fix: withdrawals link in nav * feat: style changes after design update * fix: proposal form test * chore: tidy error ui logic * feat: review comments * chore: lint * feat: add better typing for tables * chore: put withdrawals tab at the end * chore: update i18n * fix: dialog in positions manager due to rename * chore: increase spacing in withdrawal form * chore: update tests * chore: lint * chore: use new assetsConnection and update cy test * fix: incorrect shape of withdrawal generate function * feat: delete withdrawals page now that its shown on the portfolio page * chore: update tests to check for withdrawals page * chore: fix tests again * fix: page title test
106 lines
2.5 KiB
TypeScript
106 lines
2.5 KiB
TypeScript
import {
|
|
ApolloClient,
|
|
ApolloLink,
|
|
split,
|
|
from,
|
|
HttpLink,
|
|
InMemoryCache,
|
|
} from '@apollo/client';
|
|
import { GraphQLWsLink } from '@apollo/client/link/subscriptions';
|
|
import { getMainDefinition } from '@apollo/client/utilities';
|
|
import { onError } from '@apollo/client/link/error';
|
|
import { RetryLink } from '@apollo/client/link/retry';
|
|
import { createClient as createWSClient } from 'graphql-ws';
|
|
|
|
export function createClient(base?: string) {
|
|
if (!base) {
|
|
throw new Error('Base must be passed into createClient!');
|
|
}
|
|
const urlHTTP = new URL(base);
|
|
const urlWS = new URL(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: {
|
|
Account: {
|
|
keyFields: false,
|
|
fields: {
|
|
balanceFormatted: {},
|
|
},
|
|
},
|
|
Instrument: {
|
|
keyFields: false,
|
|
},
|
|
TradableInstrument: {
|
|
keyFields: ['instrument'],
|
|
},
|
|
Product: {
|
|
keyFields: ['settlementAsset', ['id']],
|
|
},
|
|
MarketData: {
|
|
keyFields: ['market', ['id']],
|
|
},
|
|
Node: {
|
|
keyFields: false,
|
|
},
|
|
Withdrawal: {
|
|
fields: {
|
|
pendingOnForeignChain: {
|
|
read: (isPending = false) => isPending,
|
|
},
|
|
},
|
|
},
|
|
ERC20: {
|
|
keyFields: ['contractAddress'],
|
|
},
|
|
},
|
|
});
|
|
|
|
const retryLink = new RetryLink({
|
|
delay: {
|
|
initial: 300,
|
|
max: 10000,
|
|
jitter: true,
|
|
},
|
|
});
|
|
|
|
const httpLink = new HttpLink({
|
|
uri: urlHTTP.href,
|
|
credentials: 'same-origin',
|
|
});
|
|
|
|
const wsLink = process.browser
|
|
? new GraphQLWsLink(
|
|
createWSClient({
|
|
url: urlWS.href,
|
|
})
|
|
)
|
|
: new ApolloLink((operation, forward) => forward(operation));
|
|
|
|
const splitLink = process.browser
|
|
? split(
|
|
({ query }) => {
|
|
const definition = getMainDefinition(query);
|
|
return (
|
|
definition.kind === 'OperationDefinition' &&
|
|
definition.operation === 'subscription'
|
|
);
|
|
},
|
|
wsLink,
|
|
httpLink
|
|
)
|
|
: httpLink;
|
|
|
|
const errorLink = onError(({ graphQLErrors, networkError }) => {
|
|
console.log(graphQLErrors);
|
|
console.log(networkError);
|
|
});
|
|
|
|
return new ApolloClient({
|
|
connectToDevTools: process.env['NODE_ENV'] === 'development',
|
|
link: from([errorLink, retryLink, splitLink]),
|
|
cache,
|
|
});
|
|
}
|