webapp/src/graphql/privateGraphQLClient.ts

41 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-09-09 11:53:35 +00:00
import { createClient, ClientOptions, dedupExchange, fetchExchange, Exchange } from '@urql/core'
import { devtoolsExchange } from '@urql/devtools'
import { authExchanges } from './auth'
2022-09-14 11:05:48 +00:00
import { baseUrl } from './publicGraphQLClient'
2022-09-09 11:53:35 +00:00
const isDev = true
const TOKEN_LOCAL_STORAGE_KEY = 'token'
const exchanges: Exchange[] = [dedupExchange, ...authExchanges, fetchExchange]
if (isDev) {
exchanges.unshift(devtoolsExchange)
}
export const setToken = (token: string) => {
localStorage.setItem(TOKEN_LOCAL_STORAGE_KEY, token)
}
export const resetToken = () => {
localStorage.removeItem(TOKEN_LOCAL_STORAGE_KEY)
}
const options: ClientOptions = {
url: baseUrl,
maskTypename: true,
requestPolicy: 'cache-and-network',
fetchOptions: () => {
// пока источником правды для значения токена будет локальное хранилище
// меняем через setToken, например при получении значения с сервера
// скорее всего придумаем что-нибудь получше со временем
const token = localStorage.getItem(TOKEN_LOCAL_STORAGE_KEY)
const headers = { Auth: token }
return { headers }
},
exchanges
}
export const privateGraphQLClient = createClient(options)