Files
dc-observatio/services/pcp-tgu-ui-service/src/api/apiFetch.ts
T

35 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Мост токена авторизации в сетевой слой. Модули src/api/* — обычные функции,
// и хук useAppAuth() в них вызвать нельзя, поэтому текущий токен держим в
// модульной переменной, которую обновляет React-слой (см. AuthTokenBridge в
// auth/appAuth). В режиме anonymous токен остаётся null → заголовок Authorization
// не добавляется и сетевое поведение не меняется.
let authToken: string | null = null
/**
* Сохранить текущий токен авторизации для последующих вызовов apiFetch.
* @param token Токен доступа либо null, чтобы не выставлять заголовок (anonymous).
*/
export function setApiAuthToken(token: string | null): void {
authToken = token
}
/**
* Обёртка над fetch: при наличии токена добавляет заголовок Authorization: Bearer.
* По сигнатуре совместима с fetch и служит drop-in заменой в модулях src/api/*.
* @param input URL или Request, как у штатного fetch.
* @param init Параметры запроса, как у штатного fetch.
*
* @returns Промис ответа сервера, идентичный результату fetch.
*/
export function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
if (!authToken) {
return fetch(input, init)
}
const headers = new Headers(init?.headers)
if (!headers.has('Authorization')) {
headers.set('Authorization', `Bearer ${authToken}`)
}
return fetch(input, { ...init, headers })
}