Как динамически изменить URI ссылки Apollo Web Socket Link?

В настоящее время я настроил ссылку на веб-сокет Apollo следующим образом:

const wsLink = new WebSocketLink({
  uri: `ws://example.com/graphql?token=${getToken()}`,
  options: {
    reconnect: true,
    connectionParams(): ConnectionParams {
      return {
        authToken: getToken(),
      };
    },
  },
});

Это работает нормально, пока существует соединение, но не работает, когда соединение необходимо восстановить, если срок действия токена в строке запроса истек.

Способ настройки инфраструктуры, с которой я имею дело, требует, чтобы этот токен был установлен в качестве параметра запроса в URI. Как я могу динамически изменить URI, чтобы я мог предоставить новый токен, когда соединение необходимо повторно установить?

1 ответ

Вы можете установить свойство wsLink.subscriptionClient.url вручную (или создать новый экземпляр subscriptionClient?) В функции setContext https://www.apollographql.com/docs/link/links/context/.

Например:

import { setContext } from 'apollo-link-context'
...

    const wsLink = your code...     

    const authLink = setContext(() => {
        wsLink.subscriptionClient.url = `ws://example.com/graphql?token=${getToken()}`
    })

    ...

    const config = {
        link: ApolloLink.from([
            authLink,
            wsLink
        ]),
        ...
    }
Другие вопросы по тегам