Могу ли я сделать другой запрос в Apollo-Error-Link для обновления токена пользователя sh? - PullRequest
0 голосов
/ 11 июля 2020

Как я могу сделать запрос Apollo на обновление моего токена аутентификации, когда я получаю НЕАВТОРИТЕЛЬНУЮ ошибку (до создания экземпляра Apollo-Client)?

Может быть, мне нужно использовать другую ссылку?

import { Observable } from 'apollo-link'
import { equals, forEach, isNil, unless } from 'ramda'

const promiseToObservable = promise =>
  new Observable(subscriber => {
    promise.then(
      value => {
        if (subscriber.closed) return
        subscriber.next(value)
        subscriber.complete()
      },
      err => subscriber.error(err),
    )
    return subscriber
  })

const errorLink = onError(
  ({ graphQLErrors, operation, forward }) => {
    const refreshToken = () => {
      const someQuery = `mutation {
          updateToken {
            token
            refreshToken
          }
        }`,
       /* I NEED TO MAKE REQUEST HERE TO UPDATE TOKEN WITH SAME HEADERS */
      })
    }

    const checkGraphQLErrors = unless(
      isNil,
      forEach(({ extensions: { code } }) => (
        equals('UNAUTHENTICATED', code) &&
        promiseToObservable(refreshToken()).flatMap(() => forward(operation))
      )),
    )
    checkGraphQLErrors(graphQLErrors)
    return false
  },
)
...