Новый сервис pcp-tgu-ui-service: ТГУ-фронт на headless-auth nstart + платформенный CI/деплой
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
// Мост токена авторизации в сетевой слой. Модули 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 })
|
||||
}
|
||||
Reference in New Issue
Block a user