Files
projectbrain-Public/backend/src/plugins/requestId.ts
T

33 lines
943 B
TypeScript

import type { FastifyInstance, FastifyRequest } from "fastify";
import { randomUUID } from "node:crypto";
declare module "fastify" {
interface FastifyRequest {
requestId: string;
}
}
const firstHeaderValue = (
value: string | string[] | undefined,
): string | undefined => (Array.isArray(value) ? value[0] : value);
export const createRequestId = (
incomingRequestId: string | string[] | undefined,
): string => {
const requestId = firstHeaderValue(incomingRequestId);
return requestId && /^[A-Za-z0-9_-]{1,128}$/.test(requestId)
? requestId
: `req-${randomUUID()}`;
};
export const requestIdPlugin = async (app: FastifyInstance) => {
app.addHook("onRequest", async (request, reply) => {
request.requestId = request.id;
reply.header("x-request-id", request.requestId);
});
};
export const getRequestId = (request: FastifyRequest): string =>
request.requestId ?? request.id ?? `req-${randomUUID()}`;