import { ApolloClient, InMemoryCache, createHttpLink, from } from '@apollo/client' import { setContext } from '@apollo/client/link/context' import { onError } from '@apollo/client/link/error' // HTTP Link для GraphQL запросов const httpLink = createHttpLink({ uri: '/api/graphql', }) // Auth Link для добавления JWT токена в заголовки const authLink = setContext((operation, { headers }) => { if (typeof window === 'undefined') { return { headers } } // Проверяем токены администратора и пользователя const adminToken = localStorage.getItem('adminAuthToken') const userToken = localStorage.getItem('authToken') // Приоритет у админского токена const token = adminToken || userToken const tokenType = adminToken ? 'admin' : 'user' console.log(`Apollo Client - Operation: ${operation.operationName}, Token type: ${tokenType}, Token:`, token ? `${token.substring(0, 20)}...` : 'No token') const authHeaders = { ...headers, authorization: token ? `Bearer ${token}` : '', } console.log('Apollo Client - Auth headers:', { authorization: authHeaders.authorization ? 'Bearer ***' : 'No auth' }) return { headers: authHeaders } }) // Error Link для обработки ошибок - минимальная версия const errorLink = onError(() => { // Пустой обработчик - не делаем ничего // Это предотвращает любые ошибки в error handler }) // Создаем Apollo Client export const apolloClient = new ApolloClient({ link: from([ authLink, httpLink, ]), cache: new InMemoryCache({ typePolicies: { User: { fields: { organization: { merge: true, }, }, }, Organization: { fields: { apiKeys: { merge: false, }, }, }, }, }), defaultOptions: { watchQuery: { errorPolicy: 'all', }, query: { errorPolicy: 'all', }, }, }) // Утилитарные функции для работы с токеном и пользователем export const setAuthToken = (token: string) => { if (typeof window !== 'undefined') { localStorage.setItem('authToken', token) } } export const removeAuthToken = () => { if (typeof window !== 'undefined') { localStorage.removeItem('authToken') localStorage.removeItem('userData') } } export const getAuthToken = (): string | null => { if (typeof window !== 'undefined') { return localStorage.getItem('authToken') } return null } export const setUserData = (userData: unknown) => { if (typeof window !== 'undefined') { localStorage.setItem('userData', JSON.stringify(userData)) } } export const getUserData = (): unknown | null => { if (typeof window !== 'undefined') { const data = localStorage.getItem('userData') return data ? JSON.parse(data) : null } return null }