@lokalise/fastify-extras
Version:
Opinionated set of fastify plugins, commonly used in Lokalise
38 lines • 1.25 kB
JavaScript
import { randomUUID } from 'node:crypto';
import fp from 'fastify-plugin';
export function getRequestIdFastifyAppConfig() {
return {
genReqId: () => randomUUID(),
requestIdHeader: 'x-request-id',
};
}
function plugin(fastify, _opts, done) {
fastify.addHook('onRequest', function onRequestContextProvider(req, _res, next) {
const endpointParams = {};
if (req.params && typeof req.params === 'object') {
for (const [key, value] of Object.entries(req.params)) {
endpointParams[`api-endpoint-param-${key}`] = value;
}
}
req.reqContext = {
logger: req.log.child({
'api-endpoint': req.routeOptions.url,
'api-method': req.method,
...endpointParams,
'x-request-id': req.id,
}),
reqId: req.id,
};
next();
});
fastify.addHook('onSend', (req, res, _payload, next) => {
void res.header('x-request-id', req.id);
next();
});
done();
}
export const requestContextProviderPlugin = fp(plugin, {
fastify: '5.x',
name: 'request-context-provider-plugin',
});
//# sourceMappingURL=requestContextProviderPlugin.js.map