Новый сервис pcp-tgu-ui-service: ТГУ-фронт на headless-auth nstart + платформенный CI/деплой

This commit is contained in:
Дмитрий Соловьев
2026-06-09 13:35:13 +03:00
parent 0b617594fd
commit 505bf1f31c
129 changed files with 21640 additions and 0 deletions
@@ -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 })
}