AS
Кто-нибудь реализовывал обновление токена, если тот протух в Apollo?
Можно ли это реализовать на уровне
apollo-link-error
? Или это как-то иначе делать стоит?Size: a a a
AS
apollo-link-error
? Или это как-то иначе делать стоит?AS
const errorLink = onError(
({ graphQLErrors, networkError, operation, forward }) => {
const refreshToken = () => {
// Необходимо выполнить этот запрос в случае ошибки,
// если токен протух
const refreshTokenQuery = ({
query: gql`mutation($fingerprint: String!) {
updateToken(fingerprint: $fingerprint) {
token
refreshToken
}
}`,
variables: {
fingerprint,
},
})
}
const checkGraphQLErrors = unless(
isNil,
forEach(({ extensions: { code } }) => {
// Если получаем ошибку UNAUTHENTICATED, вызываем
// функцию выше
return (
equals('UNAUTHENTICATED', code) &&
promiseToObservable(refreshToken()).flatMap(() => forward(operation))
)
}),
)
checkGraphQLErrors(graphQLErrors)
},
)
DS
const errorLink = onError(
({ graphQLErrors, networkError, operation, forward }) => {
const refreshToken = () => {
// Необходимо выполнить этот запрос в случае ошибки,
// если токен протух
const refreshTokenQuery = ({
query: gql`mutation($fingerprint: String!) {
updateToken(fingerprint: $fingerprint) {
token
refreshToken
}
}`,
variables: {
fingerprint,
},
})
}
const checkGraphQLErrors = unless(
isNil,
forEach(({ extensions: { code } }) => {
// Если получаем ошибку UNAUTHENTICATED, вызываем
// функцию выше
return (
equals('UNAUTHENTICATED', code) &&
promiseToObservable(refreshToken()).flatMap(() => forward(operation))
)
}),
)
checkGraphQLErrors(graphQLErrors)
},
)
AS
AS
DS
DS
AS
DS
V
VS
DS
A
DS
A
DS
A
isToggled
, тогда есть смысл переписать на функциональный компонент. Но это уже частные случаи)A
DS