[FA-misc] Fixes refresh token usage hopefully
This commit is contained in:
@@ -1,19 +1,36 @@
|
||||
import { Client, cacheExchange, fetchExchange } from '@urql/core';
|
||||
import { authExchange } from '@urql/exchange-auth';
|
||||
import { get } from 'svelte/store';
|
||||
import { user } from '../auth/authStore';
|
||||
import { user, refreshToken } from '../auth/authStore';
|
||||
|
||||
export function createClient() {
|
||||
return new Client({
|
||||
url: import.meta.env.PUBLIC_GRAPHQL_URI,
|
||||
exchanges: [cacheExchange, fetchExchange],
|
||||
fetchOptions: () => {
|
||||
const currentUser = get(user);
|
||||
return {
|
||||
headers: currentUser?.access_token
|
||||
? { Authorization: `Bearer ${currentUser.access_token}` }
|
||||
: {},
|
||||
};
|
||||
},
|
||||
exchanges: [
|
||||
cacheExchange,
|
||||
authExchange(async (utils) => ({
|
||||
addAuthToOperation(operation) {
|
||||
const currentUser = get(user);
|
||||
if (!currentUser?.access_token) return operation;
|
||||
return utils.appendHeaders(operation, {
|
||||
Authorization: `Bearer ${currentUser.access_token}`,
|
||||
});
|
||||
},
|
||||
didAuthError(error) {
|
||||
return error.graphQLErrors?.some(
|
||||
(e) => e.extensions?.code === 'AUTH_NOT_AUTHENTICATED'
|
||||
);
|
||||
},
|
||||
async refreshAuth() {
|
||||
const newUser = await refreshToken();
|
||||
if (!newUser) {
|
||||
// Refresh failed, redirect to login
|
||||
window.location.href = '/';
|
||||
}
|
||||
},
|
||||
})),
|
||||
fetchExchange,
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user