Socket
Socket
Sign inDemoInstall

@opentelemetry/core

Package Overview
Dependencies
Maintainers
4
Versions
172
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@opentelemetry/core - npm Package Compare versions

Comparing version 0.10.2 to 0.10.3-canary.0

4

build/src/context/propagation/B3Propagator.d.ts

@@ -5,2 +5,6 @@ import { Context, GetterFunction, HttpTextPropagator, SetterFunction } from '@opentelemetry/api';

export declare const X_B3_SAMPLED = "x-b3-sampled";
export declare const X_B3_PARENT_SPAN_ID = "x-b3-parentspanid";
export declare const X_B3_FLAGS = "x-b3-flags";
export declare const PARENT_SPAN_ID_KEY: symbol;
export declare const DEBUG_FLAG_KEY: symbol;
/**

@@ -7,0 +11,0 @@ * Propagator for the B3 HTTP header format.

105

build/src/context/propagation/B3Propagator.js

@@ -18,3 +18,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.B3Propagator = exports.X_B3_SAMPLED = exports.X_B3_SPAN_ID = exports.X_B3_TRACE_ID = void 0;
exports.B3Propagator = exports.DEBUG_FLAG_KEY = exports.PARENT_SPAN_ID_KEY = exports.X_B3_FLAGS = exports.X_B3_PARENT_SPAN_ID = exports.X_B3_SAMPLED = exports.X_B3_SPAN_ID = exports.X_B3_TRACE_ID = void 0;
const api_1 = require("@opentelemetry/api");

@@ -25,5 +25,11 @@ const context_1 = require("../context");

exports.X_B3_SAMPLED = 'x-b3-sampled';
exports.X_B3_PARENT_SPAN_ID = 'x-b3-parentspanid';
exports.X_B3_FLAGS = 'x-b3-flags';
exports.PARENT_SPAN_ID_KEY = api_1.Context.createKey('OpenTelemetry Context Key B3 Parent Span Id');
exports.DEBUG_FLAG_KEY = api_1.Context.createKey('OpenTelemetry Context Key B3 Debug Flag');
const VALID_TRACEID_REGEX = /^([0-9a-f]{16}){1,2}$/i;
const VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;
const INVALID_ID_REGEX = /^0+$/i;
const VALID_SAMPLED_VALUES = new Set([true, 'true', 'True', '1', 1]);
const VALID_UNSAMPLED_VALUES = new Set([false, 'false', 'False', '0', 0]);
function isValidTraceId(traceId) {

@@ -35,2 +41,52 @@ return VALID_TRACEID_REGEX.test(traceId) && !INVALID_ID_REGEX.test(traceId);

}
function isValidParentSpanID(spanId) {
return spanId === undefined || isValidSpanId(spanId);
}
function isValidSampledValue(sampled) {
return sampled === api_1.TraceFlags.SAMPLED || sampled === api_1.TraceFlags.NONE;
}
function parseHeader(header) {
return Array.isArray(header) ? header[0] : header;
}
function getHeaderValue(carrier, getter, key) {
const header = getter(carrier, key);
return parseHeader(header);
}
function getTraceId(carrier, getter) {
const traceId = getHeaderValue(carrier, getter, exports.X_B3_TRACE_ID);
if (typeof traceId === 'string') {
return traceId.padStart(32, '0');
}
return '';
}
function getSpanId(carrier, getter) {
const spanId = getHeaderValue(carrier, getter, exports.X_B3_SPAN_ID);
if (typeof spanId === 'string') {
return spanId;
}
return '';
}
function getParentSpanId(carrier, getter) {
const spanId = getHeaderValue(carrier, getter, exports.X_B3_PARENT_SPAN_ID);
if (typeof spanId === 'string') {
return spanId;
}
return;
}
function getDebug(carrier, getter) {
const debug = getHeaderValue(carrier, getter, exports.X_B3_FLAGS);
return debug === '1' ? '1' : undefined;
}
function getTraceFlags(carrier, getter) {
const traceFlags = getHeaderValue(carrier, getter, exports.X_B3_SAMPLED);
const debug = getDebug(carrier, getter);
if (debug === '1' || VALID_SAMPLED_VALUES.has(traceFlags)) {
return api_1.TraceFlags.SAMPLED;
}
if (traceFlags === undefined || VALID_UNSAMPLED_VALUES.has(traceFlags)) {
return api_1.TraceFlags.NONE;
}
// This indicates to isValidSampledValue that this is not valid
return;
}
/**

@@ -45,9 +101,20 @@ * Propagator for the B3 HTTP header format.

return;
const parentSpanId = context.getValue(exports.PARENT_SPAN_ID_KEY);
if (isValidTraceId(spanContext.traceId) &&
isValidSpanId(spanContext.spanId)) {
isValidSpanId(spanContext.spanId) &&
isValidParentSpanID(parentSpanId)) {
const debug = context.getValue(exports.DEBUG_FLAG_KEY);
setter(carrier, exports.X_B3_TRACE_ID, spanContext.traceId);
setter(carrier, exports.X_B3_SPAN_ID, spanContext.spanId);
// We set the header only if there is an existing sampling decision.
// Otherwise we will omit it => Absent.
if (spanContext.traceFlags !== undefined) {
if (parentSpanId) {
setter(carrier, exports.X_B3_PARENT_SPAN_ID, parentSpanId);
}
// According to the B3 spec, if the debug flag is set,
// the sampled flag shouldn't be propagated as well.
if (debug === '1') {
setter(carrier, exports.X_B3_FLAGS, debug);
}
else if (spanContext.traceFlags !== undefined) {
// We set the header only if there is an existing sampling decision.
// Otherwise we will omit it => Absent.
setter(carrier, exports.X_B3_SAMPLED, (api_1.TraceFlags.SAMPLED & spanContext.traceFlags) === api_1.TraceFlags.SAMPLED

@@ -60,17 +127,13 @@ ? '1'

extract(context, carrier, getter) {
const traceIdHeader = getter(carrier, exports.X_B3_TRACE_ID);
const spanIdHeader = getter(carrier, exports.X_B3_SPAN_ID);
const sampledHeader = getter(carrier, exports.X_B3_SAMPLED);
const traceIdHeaderValue = Array.isArray(traceIdHeader)
? traceIdHeader[0]
: traceIdHeader;
const spanId = Array.isArray(spanIdHeader) ? spanIdHeader[0] : spanIdHeader;
const options = Array.isArray(sampledHeader)
? sampledHeader[0]
: sampledHeader;
if (typeof traceIdHeaderValue !== 'string' || typeof spanId !== 'string') {
return context;
}
const traceId = traceIdHeaderValue.padStart(32, '0');
if (isValidTraceId(traceId) && isValidSpanId(spanId)) {
const traceId = getTraceId(carrier, getter);
const spanId = getSpanId(carrier, getter);
const parentSpanId = getParentSpanId(carrier, getter);
const traceFlags = getTraceFlags(carrier, getter);
const debug = getDebug(carrier, getter);
if (isValidTraceId(traceId) &&
isValidSpanId(spanId) &&
isValidParentSpanID(parentSpanId) &&
isValidSampledValue(traceFlags)) {
context = context.setValue(exports.PARENT_SPAN_ID_KEY, parentSpanId);
context = context.setValue(exports.DEBUG_FLAG_KEY, debug);
return context_1.setExtractedSpanContext(context, {

@@ -80,3 +143,3 @@ traceId,

isRemote: true,
traceFlags: isNaN(Number(options)) ? api_1.TraceFlags.NONE : Number(options),
traceFlags,
});

@@ -83,0 +146,0 @@ }

@@ -1,2 +0,2 @@

export declare const VERSION = "0.10.2";
export declare const VERSION = "0.10.3-canary.0+f4f2f84";
//# sourceMappingURL=version.d.ts.map

@@ -20,3 +20,3 @@ "use strict";

// this is autogenerated file, see scripts/version-update.js
exports.VERSION = '0.10.2';
exports.VERSION = '0.10.3-canary.0+f4f2f84';
//# sourceMappingURL=version.js.map
{
"name": "@opentelemetry/core",
"version": "0.10.2",
"version": "0.10.3-canary.0+f4f2f84",
"description": "OpenTelemetry Core provides default and no-op implementations of the OpenTelemetry types for trace and metrics",

@@ -80,7 +80,7 @@ "main": "build/src/index.js",

"dependencies": {
"@opentelemetry/api": "^0.10.2",
"@opentelemetry/context-base": "^0.10.2",
"@opentelemetry/api": "^0.10.3-canary.0+f4f2f84",
"@opentelemetry/context-base": "^0.10.3-canary.0+f4f2f84",
"semver": "^7.1.3"
},
"gitHead": "b247e69034a7888a842fe75e0a5ff06f8bea44a8"
"gitHead": "f4f2f84bc087389b3206a2e17837b7b0b95fb2f2"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc