25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
import { nanoid } from "nanoid";
|
|
import { NextMiddleware } from "next-api-middleware";
|
|
|
|
export const addRequestId: NextMiddleware = async (_req, res, next) => {
|
|
// Apply header with unique ID to every request
|
|
res.setHeader("Calcom-Response-ID", nanoid());
|
|
// Add all headers here instead of next.config.js as it is throwing error( Cannot set headers after they are sent to the client) for OPTIONS method
|
|
// It is known to happen only in Dev Mode.
|
|
res.setHeader("Access-Control-Allow-Credentials", "true");
|
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
res.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS, PATCH, DELETE, POST, PUT");
|
|
res.setHeader(
|
|
"Access-Control-Allow-Headers",
|
|
"X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, Content-Type, api_key, Authorization"
|
|
);
|
|
|
|
// Ensure all OPTIONS request are automatically successful. Headers are already set above.
|
|
if (_req.method === "OPTIONS") {
|
|
res.status(200).end();
|
|
return;
|
|
}
|
|
// Let remaining middleware and API route execute
|
|
await next();
|
|
};
|