/** * Request Context Management * * Provides request ID generation and context propagation for distributed tracing. * Request IDs enable tracking a single request across multiple services and logs. * * WARNING: This module uses Node.js-specific APIs (async_hooks, crypto). * Do NOT import in client-side code or edge runtime. */ /** * Request context data stored in AsyncLocalStorage */ export interface RequestContext { /** Unique request identifier */ requestId: string; /** Request start timestamp */ startTime: number; /** User ID (if authenticated) */ userId?: string; /** IP address */ ip?: string; /** User agent */ userAgent?: string; /** Request path */ path?: string; /** Request method */ method?: string; /** Additional metadata */ metadata?: Record; } /** * Generate a new request ID * Uses UUID v4 for guaranteed uniqueness */ export declare function generateRequestId(): string; /** * Get the current request context * Returns undefined if not in a request context */ export declare function getRequestContext(): RequestContext | undefined; /** * Get the current request ID * Returns undefined if not in a request context */ export declare function getRequestId(): string | undefined; /** * Run a function within a request context * * @param context - Request context data * @param fn - Function to run within the context * @returns Result of the function * * @example * ```typescript * await runInRequestContext( * { * requestId: generateRequestId(), * startTime: Date.now(), * userId: 'user-123', * path: '/api/users', * method: 'GET', * }, * async () => { * // All code here has access to request context * const requestId = getRequestId() * logger.info('Processing request', { requestId }) * } * ) * ``` */ export declare function runInRequestContext(context: RequestContext, fn: () => T): T; /** * Update the current request context with additional data * * @param updates - Partial context updates to merge * * @example * ```typescript * updateRequestContext({ userId: 'user-123' }) * ``` */ export declare function updateRequestContext(updates: Partial): void; /** * Extract request ID from various header formats * * Checks multiple common header names: * - x-request-id (standard) * - x-correlation-id (correlation pattern) * - x-trace-id (OpenTelemetry) * - request-id (simple) * * @param headers - Request headers (any format) * @returns Request ID or undefined */ export declare function extractRequestId(headers: Record): string | undefined; /** * Create request context from HTTP request * * @param options - Request information * @returns Request context * * @example * ```typescript * const context = createRequestContext({ * headers: request.headers, * path: request.url, * method: request.method, * ip: request.ip, * }) * ``` */ export declare function createRequestContext(options: { headers?: Record; path?: string; method?: string; ip?: string; userId?: string; }): RequestContext; /** * Get request duration in milliseconds * * @returns Duration in ms, or undefined if not in request context */ export declare function getRequestDuration(): number | undefined; /** * Request context headers for propagating across services * * Use these when making HTTP requests to other services to maintain trace continuity * * @returns Headers object with request ID * * @example * ```typescript * const response = await fetch('https://api.example.com/users', { * headers: { * ...getRequestHeaders(), * 'Authorization': 'Bearer token', * } * }) * ``` */ export declare function getRequestHeaders(): Record; //# sourceMappingURL=request-context.d.ts.map