import { ApolloClient, ApolloProvider, InMemoryCache, NormalizedCacheObject } from '@apollo/client'; // import { WebSocketLink } from "@apollo/client/link/ws"; import { WebSocketLink } from "@apollo/client/link/ws"; import { SubscriptionClient } from 'subscriptions-transport-ws'; import React, { useEffect } from 'react'; import Auth from '/imports/ui/services/auth'; interface Props { children: React.ReactNode; } const GraphqlProvider = ({children}: Props): React.ReactNode => { const [link, setLink] = React.useState(null); const [apolloClient, setApolloClient] = React.useState | null>(null); useEffect(() => { const wsLink = new WebSocketLink( new SubscriptionClient(`wss://${window.location.hostname}/v1/graphql`, { reconnect: true, timeout: 30000, connectionParams: { headers: { 'X-Session-Token': Auth.sessionToken, } } }) ); setLink(wsLink); const client = new ApolloClient({link: wsLink, cache: new InMemoryCache()}); setApolloClient(client); }, []); return ( apolloClient && {children} ); }; export default GraphqlProvider;