W3C Traceparent Header Parser
Parse and validate a W3C traceparent header into version, trace id, span id and flags, rejecting malformed values.
Code
const HEX = { trace: 32, span: 16 };
export function parseTraceparent(value) {
if (typeof value !== 'string') throw new TypeError('traceparent must be a string');
const parts = value.trim().split('-');
if (parts.length !== 4) throw new SyntaxError('traceparent must have 4 fields');
const [version, traceId, spanId, flags] = parts;
if (!/^[0-9a-f]{2}$/.test(version)) throw new SyntaxError('invalid version: ' + version);
if (version === 'ff') throw new SyntaxError('version ff is invalid');
if (!new RegExp('^[0-9a-f]{' + HEX.trace + '}$').test(traceId)) {
throw new SyntaxError('invalid trace id: ' + traceId);
}
if (traceId === '0'.repeat(HEX.trace)) throw new SyntaxError('trace id must not be all zeros');
if (!new RegExp('^[0-9a-f]{' + HEX.span + '}$').test(spanId)) {
throw new SyntaxError('invalid span id: ' + spanId);
}
if (spanId === '0'.repeat(HEX.span)) throw new SyntaxError('span id must not be all zeros');
if (!/^[0-9a-f]{2}$/.test(flags)) throw new SyntaxError('invalid flags: ' + flags);
return { version, traceId, spanId, sampled: (parseInt(flags, 16) & 1) === 1 };
}Report a problem with this exampleOpens a pre-filled issue on GitHub.