import { createMiddleware } from "hono/factory";
export type RequestContextEnv = {
Variables: {
requestId: string;
requestStart: number;
};
};
function genId(): string {
const rand = crypto.randomUUID().replace(/-/g, '').slice(0, 8);
const ts = Date.now().toString(36);
return `${ts}-${rand}`;
}
export const requestContext = createMiddleware<RequestContextEnv>(
async (c, next) => {
const existing = c.req.header("x-request-id");
const id = existing && existing.length < 100 ? existing : genId();
c.set("requestId", id);
c.set("requestStart", Date.now());
c.header("X-Request-Id", id);
await next();
}
);
|