UNPKG

@rollercoaster-dev/rd-logger

Version:

A neurodivergent-friendly logger for Rollercoaster.dev projects

45 lines 1.58 kB
import { AsyncLocalStorage } from "async_hooks"; import { randomUUID } from "crypto"; // Create an AsyncLocalStorage instance to hold the context for each request const requestContext = new AsyncLocalStorage(); /** * Runs a function within an asynchronous request context. * Creates a new context with a unique request ID and start time. * * @param fn The function to execute within the context. * @param existingRequestId Optional request ID from headers (e.g., 'x-request-id') * @returns The return value of the executed function. */ export function runWithRequestContext(fn, existingRequestId) { const store = { requestId: existingRequestId || randomUUID(), requestStartTime: Date.now(), }; return requestContext.run(store, fn); } /** * Gets the current request context store. * Returns undefined if called outside a context created by runWithRequestContext. * * @returns The current request store or undefined. */ export function getRequestStore() { return requestContext.getStore(); } /** * Gets the current request ID. * * @returns The current request ID or 'unknown' if not in a request context. */ export function getCurrentRequestId() { return getRequestStore()?.requestId || "unknown"; } /** * Gets the start time of the current request. * * @returns The request start timestamp (milliseconds since epoch) or the current time if not in a request context. */ export function getCurrentRequestStartTime() { return getRequestStore()?.requestStartTime || Date.now(); } //# sourceMappingURL=request-context.js.map