@synanetics/session-tracing-middleware
Version:
Middleware to use in Moleculer for tracing across GCP
51 lines • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ifNoneExistsHeaderTransform = exports.sessionTracking = void 0;
exports.parseTraceContext = parseTraceContext;
const constants_1 = require("@synanetics/constants");
function parseTraceContext(req) {
const trace = {};
if (!req || !req.headers) {
return trace;
}
if (req.headers.traceparent) {
const traceparent = req.headers.traceparent.toLowerCase();
if (traceparent.match(/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/)) {
[trace.version, trace.id, trace.parentSpan, trace.flags] = traceparent.split('-');
}
}
else {
if (req.headers['x-b3-traceid']) {
trace.id = req.headers['x-b3-traceid'].toLowerCase();
}
if (req.headers['x-b3-spanid']) {
trace.span = req.headers['x-b3-spanid'].toLowerCase();
}
if (req.headers['x-b3-parentspanid']) {
trace.parentSpan = req.headers['x-b3-parentspanid'].toLowerCase();
}
}
return trace;
}
const sessionTracking = () => (req, _res, next) => {
const trace = parseTraceContext(req);
if (trace.id) {
req.$ctx.requestID = trace.id;
}
if (trace.span) {
req.$ctx.id = trace.span;
}
if (trace.parentSpan) {
req.$ctx.parentID = trace.parentSpan;
}
next();
};
exports.sessionTracking = sessionTracking;
const ifNoneExistsHeaderTransform = () => (req, _res, next) => {
if ('if-none-exists' in req.headers && !(constants_1.HL7HttpHeader.IF_NONE_EXIST in req.headers)) {
req.headers[constants_1.HL7HttpHeader.IF_NONE_EXIST] = req.headers['if-none-exists'];
}
next();
};
exports.ifNoneExistsHeaderTransform = ifNoneExistsHeaderTransform;
//# sourceMappingURL=middleware.js.map