/
inssane
/
Axios-api
Обзор
Документация
Войти
/
inssane
/
Axios-api
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/core/request-meta.ts
37 строк
2 KB
Павел Чернышев
refactor(core): общий request-meta и бережный redact
18 июн 2026, 12:03
18 июн 2026, 12:03
eb1c25f
Код
Авторство
О чём код?
import type { InternalAxiosRequestConfig } from 'axios'; /** * Общие метаданные запроса, которыми обмениваются мидлвары (логгер, sentry). * Кладутся на `config.metadata` в request-интерсепторе и читаются в response-хендлере. */ export interface RequestMeta { requestId?: string; startTime?: number; } /** `InternalAxiosRequestConfig` с прикреплёнными метаданными запроса. */ export interface ConfigWithMeta extends InternalAxiosRequestConfig { metadata?: RequestMeta; } /** Заголовок сквозного идентификатора запроса. */ export const REQUEST_ID_HEADER = 'x-request-id'; /** Генерирует requestId: `crypto.randomUUID` где доступен, иначе временная метка + случайный хвост. */ export const generateRequestId = (): string => { if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') { return crypto.randomUUID(); } return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`; }; /** Достаёт requestId из метаданных, иначе из заголовка `x-request-id` (если он строка). */ export const resolveRequestId = (config?: ConfigWithMeta): string | undefined => { if (!config) return undefined; if (config.metadata?.requestId) return config.metadata.requestId; const header = config.headers?.get(REQUEST_ID_HEADER); return typeof header === 'string' ? header : undefined; };