// Мост токена авторизации в сетевой слой. Модули 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 { 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 }) }