/** * The Request ID middleware generates a unique ID for each request and stores it in the Router context, this can be useful to log the request and response information and correlate them. * * ```ts * import { createRequestIDMiddleware } from "remix-utils/middleware/request-id"; * * export const [requestIDMiddleware, getRequestID] = * createRequestIDMiddleware(); * ``` * * To use it, you need to add it to the `middleware` array in your `app/root.tsx` file. * * ```ts * import { requestIDMiddleware } from "~/middleware/request-id.server"; * * export const middleware: Route.MiddlewareFunction[] = [requestIDMiddleware]; * ``` * * And you can use the `getRequestID` function in your loaders, actions, and other middleware to get the request ID. * * ```ts * import { getRequestID } from "~/middleware/request-id.server"; * * export async function loader({ request }: Route.LoaderArgs) { * let requestID = getRequestID(); * // ... * } * ``` * * By default the request ID is a UUID, but you can customize it by passing a function to the `createRequestIDMiddleware` function. * * ```ts * import { createRequestIDMiddleware } from "remix-utils/middleware/request-id"; * * export const [requestIDMiddleware, getRequestID] = * createRequestIDMiddleware({ * generator() { * return Math.random().toString(36).slice(2); * }, * }); * ``` * * The middleware also gets the request ID from the `X-Request-ID` header if it's present, this can be useful to correlate requests between services. * * If you want to use a different header you can pass the header name to the `createRequestIDMiddleware` function. * * ```ts * import { createRequestIDMiddleware } from "remix-utils/middleware/request-id"; * * export const [requestIDMiddleware, getRequestID] = * createRequestIDMiddleware({ * header: "X-Correlation-ID", * }); * ``` * @author [Sergio Xalambrí](https://sergiodxa.com) * @module Middleware/Request ID */ import type { MiddlewareFunction } from "react-router"; import type { MiddlewareGetter } from "./utils.js"; export declare function createRequestIDMiddleware({ generator, header, limitLength, }?: createRequestIDMiddleware.Options): createRequestIDMiddleware.ReturnType; export declare namespace createRequestIDMiddleware { interface Options { /** * The name of the header to read the request ID from. * * @default "X-Request-ID" */ header?: string; /** * The length of the request ID. * * @default 255 */ limitLength?: number; /** * A function to generate a request ID. * * @default () => crypto.randomUUID() */ generator?(): string; } type ReturnType = [ MiddlewareFunction, MiddlewareGetter ]; }