import type { LCConfig } from './setup' export type ResponseType = { headers?: { get: (item: string) => void } status: number _data: unknown body?: { status: number } } export const setOmyFetch = ({ interceptors, source, storageClient, }: LCConfig) => { const getHeaders = (headers?: ResponseType['headers']) => { const accessToken = headers?.get('access-token') || '' const client = headers?.get('client') || '' const uid = headers?.get('uid') || '' return { accessToken, client, uid, } } const setHeadersOnResponse = (res: { headers?: ResponseType['headers'] }) => { const { accessToken, client, uid } = getHeaders(res.headers) if (accessToken && client && uid) { storageClient?.setItem('accessToken', accessToken) storageClient?.setItem('client', client) storageClient?.setItem('uid', uid) } } return { triggerOnResponse: (response: ResponseType) => { setHeadersOnResponse(response) if (Array.isArray(interceptors?.response)) { interceptors?.response.forEach((fn) => fn(response)) } if (response.status === 200) { return { ...response } } else { return Promise.reject({ response: { data: response._data, status: response.status }, }) } }, getHeaders: async () => { const accessToken = await storageClient?.getItem('accessToken') const client = await storageClient?.getItem('client') const uid = await storageClient?.getItem('uid') let headers = { Httpsource: source } if (accessToken && client && uid) { const newHeaders = { 'access-token': accessToken, client, uid, Httpsource: headers.Httpsource, } headers = newHeaders } return headers }, } }