UNPKG

@baselime/node-opentelemetry

Version:

Instrument node.js applications with open telemetry

1,357 lines (1,320 loc) 42.9 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/lambda.ts var lambda_exports = {}; __export(lambda_exports, { withOpenTelemetry: () => withOpenTelemetry }); module.exports = __toCommonJS(lambda_exports); // node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js var _globalThis = typeof globalThis === "object" ? globalThis : global; // node_modules/@opentelemetry/api/build/esm/version.js var VERSION = "1.8.0"; // node_modules/@opentelemetry/api/build/esm/internal/semver.js var re = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/; function _makeCompatibilityCheck(ownVersion) { var acceptedVersions = /* @__PURE__ */ new Set([ownVersion]); var rejectedVersions = /* @__PURE__ */ new Set(); var myVersionMatch = ownVersion.match(re); if (!myVersionMatch) { return function() { return false; }; } var ownVersionParsed = { major: +myVersionMatch[1], minor: +myVersionMatch[2], patch: +myVersionMatch[3], prerelease: myVersionMatch[4] }; if (ownVersionParsed.prerelease != null) { return function isExactmatch(globalVersion) { return globalVersion === ownVersion; }; } function _reject(v) { rejectedVersions.add(v); return false; } function _accept(v) { acceptedVersions.add(v); return true; } return function isCompatible2(globalVersion) { if (acceptedVersions.has(globalVersion)) { return true; } if (rejectedVersions.has(globalVersion)) { return false; } var globalVersionMatch = globalVersion.match(re); if (!globalVersionMatch) { return _reject(globalVersion); } var globalVersionParsed = { major: +globalVersionMatch[1], minor: +globalVersionMatch[2], patch: +globalVersionMatch[3], prerelease: globalVersionMatch[4] }; if (globalVersionParsed.prerelease != null) { return _reject(globalVersion); } if (ownVersionParsed.major !== globalVersionParsed.major) { return _reject(globalVersion); } if (ownVersionParsed.major === 0) { if (ownVersionParsed.minor === globalVersionParsed.minor && ownVersionParsed.patch <= globalVersionParsed.patch) { return _accept(globalVersion); } return _reject(globalVersion); } if (ownVersionParsed.minor <= globalVersionParsed.minor) { return _accept(globalVersion); } return _reject(globalVersion); }; } var isCompatible = _makeCompatibilityCheck(VERSION); // node_modules/@opentelemetry/api/build/esm/internal/global-utils.js var major = VERSION.split(".")[0]; var GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for("opentelemetry.js.api." + major); var _global = _globalThis; function registerGlobal(type, instance, diag2, allowOverride) { var _a; if (allowOverride === void 0) { allowOverride = false; } var api = _global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : { version: VERSION }; if (!allowOverride && api[type]) { var err = new Error("@opentelemetry/api: Attempted duplicate registration of API: " + type); diag2.error(err.stack || err.message); return false; } if (api.version !== VERSION) { var err = new Error("@opentelemetry/api: Registration of version v" + api.version + " for " + type + " does not match previously registered API v" + VERSION); diag2.error(err.stack || err.message); return false; } api[type] = instance; diag2.debug("@opentelemetry/api: Registered a global for " + type + " v" + VERSION + "."); return true; } function getGlobal(type) { var _a, _b; var globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version; if (!globalVersion || !isCompatible(globalVersion)) { return; } return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === void 0 ? void 0 : _b[type]; } function unregisterGlobal(type, diag2) { diag2.debug("@opentelemetry/api: Unregistering a global for " + type + " v" + VERSION + "."); var api = _global[GLOBAL_OPENTELEMETRY_API_KEY]; if (api) { delete api[type]; } } // node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js var __read = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = function(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var DiagComponentLogger = ( /** @class */ function() { function DiagComponentLogger2(props) { this._namespace = props.namespace || "DiagComponentLogger"; } DiagComponentLogger2.prototype.debug = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("debug", this._namespace, args); }; DiagComponentLogger2.prototype.error = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("error", this._namespace, args); }; DiagComponentLogger2.prototype.info = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("info", this._namespace, args); }; DiagComponentLogger2.prototype.warn = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("warn", this._namespace, args); }; DiagComponentLogger2.prototype.verbose = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("verbose", this._namespace, args); }; return DiagComponentLogger2; }() ); function logProxy(funcName, namespace, args) { var logger = getGlobal("diag"); if (!logger) { return; } args.unshift(namespace); return logger[funcName].apply(logger, __spreadArray([], __read(args), false)); } // node_modules/@opentelemetry/api/build/esm/diag/types.js var DiagLogLevel; (function(DiagLogLevel2) { DiagLogLevel2[DiagLogLevel2["NONE"] = 0] = "NONE"; DiagLogLevel2[DiagLogLevel2["ERROR"] = 30] = "ERROR"; DiagLogLevel2[DiagLogLevel2["WARN"] = 50] = "WARN"; DiagLogLevel2[DiagLogLevel2["INFO"] = 60] = "INFO"; DiagLogLevel2[DiagLogLevel2["DEBUG"] = 70] = "DEBUG"; DiagLogLevel2[DiagLogLevel2["VERBOSE"] = 80] = "VERBOSE"; DiagLogLevel2[DiagLogLevel2["ALL"] = 9999] = "ALL"; })(DiagLogLevel || (DiagLogLevel = {})); // node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js function createLogLevelDiagLogger(maxLevel, logger) { if (maxLevel < DiagLogLevel.NONE) { maxLevel = DiagLogLevel.NONE; } else if (maxLevel > DiagLogLevel.ALL) { maxLevel = DiagLogLevel.ALL; } logger = logger || {}; function _filterFunc(funcName, theLevel) { var theFunc = logger[funcName]; if (typeof theFunc === "function" && maxLevel >= theLevel) { return theFunc.bind(logger); } return function() { }; } return { error: _filterFunc("error", DiagLogLevel.ERROR), warn: _filterFunc("warn", DiagLogLevel.WARN), info: _filterFunc("info", DiagLogLevel.INFO), debug: _filterFunc("debug", DiagLogLevel.DEBUG), verbose: _filterFunc("verbose", DiagLogLevel.VERBOSE) }; } // node_modules/@opentelemetry/api/build/esm/api/diag.js var __read2 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray2 = function(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var API_NAME = "diag"; var DiagAPI = ( /** @class */ function() { function DiagAPI2() { function _logProxy(funcName) { return function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var logger = getGlobal("diag"); if (!logger) return; return logger[funcName].apply(logger, __spreadArray2([], __read2(args), false)); }; } var self = this; var setLogger = function(logger, optionsOrLogLevel) { var _a, _b, _c; if (optionsOrLogLevel === void 0) { optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }; } if (logger === self) { var err = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation"); self.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message); return false; } if (typeof optionsOrLogLevel === "number") { optionsOrLogLevel = { logLevel: optionsOrLogLevel }; } var oldLogger = getGlobal("diag"); var newLogger = createLogLevelDiagLogger((_b = optionsOrLogLevel.logLevel) !== null && _b !== void 0 ? _b : DiagLogLevel.INFO, logger); if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) { var stack = (_c = new Error().stack) !== null && _c !== void 0 ? _c : "<failed to generate stacktrace>"; oldLogger.warn("Current logger will be overwritten from " + stack); newLogger.warn("Current logger will overwrite one already registered from " + stack); } return registerGlobal("diag", newLogger, self, true); }; self.setLogger = setLogger; self.disable = function() { unregisterGlobal(API_NAME, self); }; self.createComponentLogger = function(options) { return new DiagComponentLogger(options); }; self.verbose = _logProxy("verbose"); self.debug = _logProxy("debug"); self.info = _logProxy("info"); self.warn = _logProxy("warn"); self.error = _logProxy("error"); } DiagAPI2.instance = function() { if (!this._instance) { this._instance = new DiagAPI2(); } return this._instance; }; return DiagAPI2; }() ); // node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js var __read3 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __values = function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function() { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var BaggageImpl = ( /** @class */ function() { function BaggageImpl2(entries) { this._entries = entries ? new Map(entries) : /* @__PURE__ */ new Map(); } BaggageImpl2.prototype.getEntry = function(key) { var entry = this._entries.get(key); if (!entry) { return void 0; } return Object.assign({}, entry); }; BaggageImpl2.prototype.getAllEntries = function() { return Array.from(this._entries.entries()).map(function(_a) { var _b = __read3(_a, 2), k = _b[0], v = _b[1]; return [k, v]; }); }; BaggageImpl2.prototype.setEntry = function(key, entry) { var newBaggage = new BaggageImpl2(this._entries); newBaggage._entries.set(key, entry); return newBaggage; }; BaggageImpl2.prototype.removeEntry = function(key) { var newBaggage = new BaggageImpl2(this._entries); newBaggage._entries.delete(key); return newBaggage; }; BaggageImpl2.prototype.removeEntries = function() { var e_1, _a; var keys = []; for (var _i = 0; _i < arguments.length; _i++) { keys[_i] = arguments[_i]; } var newBaggage = new BaggageImpl2(this._entries); try { for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) { var key = keys_1_1.value; newBaggage._entries.delete(key); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1); } finally { if (e_1) throw e_1.error; } } return newBaggage; }; BaggageImpl2.prototype.clear = function() { return new BaggageImpl2(); }; return BaggageImpl2; }() ); // node_modules/@opentelemetry/api/build/esm/baggage/utils.js var diag = DiagAPI.instance(); function createBaggage(entries) { if (entries === void 0) { entries = {}; } return new BaggageImpl(new Map(Object.entries(entries))); } // node_modules/@opentelemetry/api/build/esm/context/context.js function createContextKey(description) { return Symbol.for(description); } var BaseContext = ( /** @class */ function() { function BaseContext2(parentContext) { var self = this; self._currentContext = parentContext ? new Map(parentContext) : /* @__PURE__ */ new Map(); self.getValue = function(key) { return self._currentContext.get(key); }; self.setValue = function(key, value) { var context2 = new BaseContext2(self._currentContext); context2._currentContext.set(key, value); return context2; }; self.deleteValue = function(key) { var context2 = new BaseContext2(self._currentContext); context2._currentContext.delete(key); return context2; }; } return BaseContext2; }() ); var ROOT_CONTEXT = new BaseContext(); // node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js var defaultTextMapGetter = { get: function(carrier, key) { if (carrier == null) { return void 0; } return carrier[key]; }, keys: function(carrier) { if (carrier == null) { return []; } return Object.keys(carrier); } }; var defaultTextMapSetter = { set: function(carrier, key, value) { if (carrier == null) { return; } carrier[key] = value; } }; // node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js var __read4 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray3 = function(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var NoopContextManager = ( /** @class */ function() { function NoopContextManager2() { } NoopContextManager2.prototype.active = function() { return ROOT_CONTEXT; }; NoopContextManager2.prototype.with = function(_context, fn, thisArg) { var args = []; for (var _i = 3; _i < arguments.length; _i++) { args[_i - 3] = arguments[_i]; } return fn.call.apply(fn, __spreadArray3([thisArg], __read4(args), false)); }; NoopContextManager2.prototype.bind = function(_context, target) { return target; }; NoopContextManager2.prototype.enable = function() { return this; }; NoopContextManager2.prototype.disable = function() { return this; }; return NoopContextManager2; }() ); // node_modules/@opentelemetry/api/build/esm/api/context.js var __read5 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray4 = function(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var API_NAME2 = "context"; var NOOP_CONTEXT_MANAGER = new NoopContextManager(); var ContextAPI = ( /** @class */ function() { function ContextAPI2() { } ContextAPI2.getInstance = function() { if (!this._instance) { this._instance = new ContextAPI2(); } return this._instance; }; ContextAPI2.prototype.setGlobalContextManager = function(contextManager) { return registerGlobal(API_NAME2, contextManager, DiagAPI.instance()); }; ContextAPI2.prototype.active = function() { return this._getContextManager().active(); }; ContextAPI2.prototype.with = function(context2, fn, thisArg) { var _a; var args = []; for (var _i = 3; _i < arguments.length; _i++) { args[_i - 3] = arguments[_i]; } return (_a = this._getContextManager()).with.apply(_a, __spreadArray4([context2, fn, thisArg], __read5(args), false)); }; ContextAPI2.prototype.bind = function(context2, target) { return this._getContextManager().bind(context2, target); }; ContextAPI2.prototype._getContextManager = function() { return getGlobal(API_NAME2) || NOOP_CONTEXT_MANAGER; }; ContextAPI2.prototype.disable = function() { this._getContextManager().disable(); unregisterGlobal(API_NAME2, DiagAPI.instance()); }; return ContextAPI2; }() ); // node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js var TraceFlags; (function(TraceFlags2) { TraceFlags2[TraceFlags2["NONE"] = 0] = "NONE"; TraceFlags2[TraceFlags2["SAMPLED"] = 1] = "SAMPLED"; })(TraceFlags || (TraceFlags = {})); // node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js var INVALID_SPANID = "0000000000000000"; var INVALID_TRACEID = "00000000000000000000000000000000"; var INVALID_SPAN_CONTEXT = { traceId: INVALID_TRACEID, spanId: INVALID_SPANID, traceFlags: TraceFlags.NONE }; // node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js var NonRecordingSpan = ( /** @class */ function() { function NonRecordingSpan2(_spanContext) { if (_spanContext === void 0) { _spanContext = INVALID_SPAN_CONTEXT; } this._spanContext = _spanContext; } NonRecordingSpan2.prototype.spanContext = function() { return this._spanContext; }; NonRecordingSpan2.prototype.setAttribute = function(_key, _value) { return this; }; NonRecordingSpan2.prototype.setAttributes = function(_attributes) { return this; }; NonRecordingSpan2.prototype.addEvent = function(_name, _attributes) { return this; }; NonRecordingSpan2.prototype.setStatus = function(_status) { return this; }; NonRecordingSpan2.prototype.updateName = function(_name) { return this; }; NonRecordingSpan2.prototype.end = function(_endTime) { }; NonRecordingSpan2.prototype.isRecording = function() { return false; }; NonRecordingSpan2.prototype.recordException = function(_exception, _time) { }; return NonRecordingSpan2; }() ); // node_modules/@opentelemetry/api/build/esm/trace/context-utils.js var SPAN_KEY = createContextKey("OpenTelemetry Context Key SPAN"); function getSpan(context2) { return context2.getValue(SPAN_KEY) || void 0; } function getActiveSpan() { return getSpan(ContextAPI.getInstance().active()); } function setSpan(context2, span) { return context2.setValue(SPAN_KEY, span); } function deleteSpan(context2) { return context2.deleteValue(SPAN_KEY); } function setSpanContext(context2, spanContext) { return setSpan(context2, new NonRecordingSpan(spanContext)); } function getSpanContext(context2) { var _a; return (_a = getSpan(context2)) === null || _a === void 0 ? void 0 : _a.spanContext(); } // node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js var VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i; var VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i; function isValidTraceId(traceId) { return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID; } function isValidSpanId(spanId) { return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID; } function isSpanContextValid(spanContext) { return isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId); } function wrapSpanContext(spanContext) { return new NonRecordingSpan(spanContext); } // node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js var contextApi = ContextAPI.getInstance(); var NoopTracer = ( /** @class */ function() { function NoopTracer2() { } NoopTracer2.prototype.startSpan = function(name, options, context2) { if (context2 === void 0) { context2 = contextApi.active(); } var root = Boolean(options === null || options === void 0 ? void 0 : options.root); if (root) { return new NonRecordingSpan(); } var parentFromContext = context2 && getSpanContext(context2); if (isSpanContext(parentFromContext) && isSpanContextValid(parentFromContext)) { return new NonRecordingSpan(parentFromContext); } else { return new NonRecordingSpan(); } }; NoopTracer2.prototype.startActiveSpan = function(name, arg2, arg3, arg4) { var opts; var ctx; var fn; if (arguments.length < 2) { return; } else if (arguments.length === 2) { fn = arg2; } else if (arguments.length === 3) { opts = arg2; fn = arg3; } else { opts = arg2; ctx = arg3; fn = arg4; } var parentContext = ctx !== null && ctx !== void 0 ? ctx : contextApi.active(); var span = this.startSpan(name, opts, parentContext); var contextWithSpanSet = setSpan(parentContext, span); return contextApi.with(contextWithSpanSet, fn, void 0, span); }; return NoopTracer2; }() ); function isSpanContext(spanContext) { return typeof spanContext === "object" && typeof spanContext["spanId"] === "string" && typeof spanContext["traceId"] === "string" && typeof spanContext["traceFlags"] === "number"; } // node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js var NOOP_TRACER = new NoopTracer(); var ProxyTracer = ( /** @class */ function() { function ProxyTracer2(_provider, name, version, options) { this._provider = _provider; this.name = name; this.version = version; this.options = options; } ProxyTracer2.prototype.startSpan = function(name, options, context2) { return this._getTracer().startSpan(name, options, context2); }; ProxyTracer2.prototype.startActiveSpan = function(_name, _options, _context, _fn) { var tracer2 = this._getTracer(); return Reflect.apply(tracer2.startActiveSpan, tracer2, arguments); }; ProxyTracer2.prototype._getTracer = function() { if (this._delegate) { return this._delegate; } var tracer2 = this._provider.getDelegateTracer(this.name, this.version, this.options); if (!tracer2) { return NOOP_TRACER; } this._delegate = tracer2; return this._delegate; }; return ProxyTracer2; }() ); // node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js var NoopTracerProvider = ( /** @class */ function() { function NoopTracerProvider2() { } NoopTracerProvider2.prototype.getTracer = function(_name, _version, _options) { return new NoopTracer(); }; return NoopTracerProvider2; }() ); // node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js var NOOP_TRACER_PROVIDER = new NoopTracerProvider(); var ProxyTracerProvider = ( /** @class */ function() { function ProxyTracerProvider2() { } ProxyTracerProvider2.prototype.getTracer = function(name, version, options) { var _a; return (_a = this.getDelegateTracer(name, version, options)) !== null && _a !== void 0 ? _a : new ProxyTracer(this, name, version, options); }; ProxyTracerProvider2.prototype.getDelegate = function() { var _a; return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_TRACER_PROVIDER; }; ProxyTracerProvider2.prototype.setDelegate = function(delegate) { this._delegate = delegate; }; ProxyTracerProvider2.prototype.getDelegateTracer = function(name, version, options) { var _a; return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version, options); }; return ProxyTracerProvider2; }() ); // node_modules/@opentelemetry/api/build/esm/context-api.js var context = ContextAPI.getInstance(); // node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js var NoopTextMapPropagator = ( /** @class */ function() { function NoopTextMapPropagator2() { } NoopTextMapPropagator2.prototype.inject = function(_context, _carrier) { }; NoopTextMapPropagator2.prototype.extract = function(context2, _carrier) { return context2; }; NoopTextMapPropagator2.prototype.fields = function() { return []; }; return NoopTextMapPropagator2; }() ); // node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js var BAGGAGE_KEY = createContextKey("OpenTelemetry Baggage Key"); function getBaggage(context2) { return context2.getValue(BAGGAGE_KEY) || void 0; } function getActiveBaggage() { return getBaggage(ContextAPI.getInstance().active()); } function setBaggage(context2, baggage) { return context2.setValue(BAGGAGE_KEY, baggage); } function deleteBaggage(context2) { return context2.deleteValue(BAGGAGE_KEY); } // node_modules/@opentelemetry/api/build/esm/api/propagation.js var API_NAME3 = "propagation"; var NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator(); var PropagationAPI = ( /** @class */ function() { function PropagationAPI2() { this.createBaggage = createBaggage; this.getBaggage = getBaggage; this.getActiveBaggage = getActiveBaggage; this.setBaggage = setBaggage; this.deleteBaggage = deleteBaggage; } PropagationAPI2.getInstance = function() { if (!this._instance) { this._instance = new PropagationAPI2(); } return this._instance; }; PropagationAPI2.prototype.setGlobalPropagator = function(propagator) { return registerGlobal(API_NAME3, propagator, DiagAPI.instance()); }; PropagationAPI2.prototype.inject = function(context2, carrier, setter) { if (setter === void 0) { setter = defaultTextMapSetter; } return this._getGlobalPropagator().inject(context2, carrier, setter); }; PropagationAPI2.prototype.extract = function(context2, carrier, getter) { if (getter === void 0) { getter = defaultTextMapGetter; } return this._getGlobalPropagator().extract(context2, carrier, getter); }; PropagationAPI2.prototype.fields = function() { return this._getGlobalPropagator().fields(); }; PropagationAPI2.prototype.disable = function() { unregisterGlobal(API_NAME3, DiagAPI.instance()); }; PropagationAPI2.prototype._getGlobalPropagator = function() { return getGlobal(API_NAME3) || NOOP_TEXT_MAP_PROPAGATOR; }; return PropagationAPI2; }() ); // node_modules/@opentelemetry/api/build/esm/propagation-api.js var propagation = PropagationAPI.getInstance(); // node_modules/@opentelemetry/api/build/esm/api/trace.js var API_NAME4 = "trace"; var TraceAPI = ( /** @class */ function() { function TraceAPI2() { this._proxyTracerProvider = new ProxyTracerProvider(); this.wrapSpanContext = wrapSpanContext; this.isSpanContextValid = isSpanContextValid; this.deleteSpan = deleteSpan; this.getSpan = getSpan; this.getActiveSpan = getActiveSpan; this.getSpanContext = getSpanContext; this.setSpan = setSpan; this.setSpanContext = setSpanContext; } TraceAPI2.getInstance = function() { if (!this._instance) { this._instance = new TraceAPI2(); } return this._instance; }; TraceAPI2.prototype.setGlobalTracerProvider = function(provider) { var success = registerGlobal(API_NAME4, this._proxyTracerProvider, DiagAPI.instance()); if (success) { this._proxyTracerProvider.setDelegate(provider); } return success; }; TraceAPI2.prototype.getTracerProvider = function() { return getGlobal(API_NAME4) || this._proxyTracerProvider; }; TraceAPI2.prototype.getTracer = function(name, version) { return this.getTracerProvider().getTracer(name, version); }; TraceAPI2.prototype.disable = function() { unregisterGlobal(API_NAME4, DiagAPI.instance()); this._proxyTracerProvider = new ProxyTracerProvider(); }; return TraceAPI2; }() ); // node_modules/@opentelemetry/api/build/esm/trace-api.js var trace = TraceAPI.getInstance(); // node_modules/flat/index.js function isBuffer(obj) { return obj && obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj); } function keyIdentity(key) { return key; } function flatten(target, opts) { opts = opts || {}; const delimiter = opts.delimiter || "."; const maxDepth = opts.maxDepth; const transformKey = opts.transformKey || keyIdentity; const output = {}; function step(object, prev, currentDepth) { currentDepth = currentDepth || 1; Object.keys(object).forEach(function(key) { const value = object[key]; const isarray = opts.safe && Array.isArray(value); const type = Object.prototype.toString.call(value); const isbuffer = isBuffer(value); const isobject = type === "[object Object]" || type === "[object Array]"; const newKey = prev ? prev + delimiter + transformKey(key) : transformKey(key); if (!isarray && !isbuffer && isobject && Object.keys(value).length && (!opts.maxDepth || currentDepth < maxDepth)) { return step(value, newKey, currentDepth + 1); } output[newKey] = value; }); } step(target); return output; } // src/lambda/utils.ts var timeoutErrorMessage = `The Baselime OpenTelemetry SDK has detected that this lambda is very close to timing out.`; function setupTimeoutDetection(span, lambda_context, timeoutThreshold = 500) { const timeRemaining = lambda_context.getRemainingTimeInMillis(); setTimeout(async () => { const error = new Error(timeoutErrorMessage); error.name = "Possible Lambda Timeout"; span.setAttributes(flatten({ error: { name: error.name, message: error.message } })); span.recordException(error); span.end(); await flushTraces(); }, timeRemaining - timeoutThreshold); } function trackColdstart() { let coldstart = true; const startTime = Date.now(); return (proactiveInitializationThreshold = 1e3) => { if (coldstart) { coldstart = false; const coldstartDuration = Date.now() - startTime; return { coldstart, coldstartDuration, proactiveInitialization: coldstartDuration > proactiveInitializationThreshold }; } return { coldstart }; }; } function captureError(span, err) { let error = typeof err === "string" ? new Error(err) : err; span.recordException(error); span.setAttributes(flatten({ error: { name: error.name, message: error.message, stack: error.stack } })); } async function flushTraces() { try { await trace.getTracerProvider().getDelegate().forceFlush(); } catch (_) { } } // src/lambda/parse-event.ts function triggerToServiceType(service) { switch (service) { case "api": case "api-gateway": case "api-gateway-v2": case "function-url": return "http"; case "sns": case "sqs": case "kinesis": case "eventbridge": return "pubsub"; case "dynamodb": case "s3": return "datasource"; default: return "other"; } } var DynamodbEventToDocumentOperations = { INSERT: "insert", MODIFY: "update", REMOVE: "delete", default: "" }; function getDynamodbStreamDocumentAttributes(event) { const unixTime = event?.Records[0]?.dynamodb?.ApproximateCreationDateTime || Date.now() / 1e3; return { // TODO we could do better for collection (infer from single table design patterns?) collection: (event?.Records[0]?.eventSourceARN || "").split("/")[1], name: (event?.Records[0]?.eventSourceARN || "").split("/")[1], operation: DynamodbEventToDocumentOperations[event?.Records[0]?.eventName || "default"], time: new Date(unixTime).toUTCString() }; } function getS3DocumentAttributes(event) { let operation = "unkown"; if (event.Records[0].eventName.startsWith("ObjectCreated")) { operation = "insert"; } if (event.Records[0].eventName.startsWith("ObjectRemoved")) { operation = "delete"; } return { collection: event.Records[0].s3.bucket.name, name: event.Records[0].s3.object.key, operation, time: event.Records[0].eventTime }; } function parseJSON(str) { try { return JSON.parse(str); } catch (error) { return str; } } function parseHttpEvent(event) { try { if (event.headers["content-type"]?.toLowerCase() === "application/json") { return { body: parseJSON(event.body || "{}"), headers: event.headers }; } return { body: event.body, headers: event.headers }; } catch (_) { return { body: event.body, headers: event.headers }; } } function detectService(event) { if (event.requestContext?.apiId) { return "api-gateway"; } if (event.requestContext?.apiId && event.version === "2.0") { return "api-gateway-v2"; } if (event.Records && event.Records[0]?.EventSource === "aws:sns") { return "sns"; } if (event.Records && event.Records[0]?.eventSource === "aws:sqs") { return "sqs"; } if (event.Records && event.Records[0]?.eventSource === "aws:kinesis") { return "kinesis"; } if (event.Records && event.Records[0]?.eventSource === "aws:dynamodb") { return "dynamodb"; } if (event.Records && event.Records[0]?.eventSource === "aws:s3") { return "s3"; } if (event.Records && event.Records[0]?.eventSource === "aws:eventbridge") { return "eventbridge"; } if (process.env.BASELIME_TRACE_STEP_FUNCTION === "true" || event.Payload?._baselime?.traceparent || event._baselime?.traceparent || Array.isArray(event) && (event[0]?.Payload?.baselime?.traceparent || event[0]?._baselime?.traceparent)) { return "step-function"; } return "unknown"; } function parseInput(event, lambda_context, coldstart, proActiveInitialization, captureEvent = false) { const service = detectService(event); const trigger = triggerToServiceType(service); let document = null; let httpEvent = void 0; if (trigger === "http" && captureEvent) { httpEvent = parseHttpEvent(event); } if (trigger === "datasource") { if (service === "dynamodb") { document = getDynamodbStreamDocumentAttributes(event); } if (service === "s3") { document = getS3DocumentAttributes(event); } } const attributes = flatten({ event: captureEvent && (httpEvent || event), context: { functionName: lambda_context.functionName, functionVersion: lambda_context.functionVersion, invokedFunctionArn: lambda_context.invokedFunctionArn, memoryLimitInMB: lambda_context.memoryLimitInMB, awsRequestId: lambda_context.awsRequestId, logGroupName: lambda_context.logGroupName, logStreamName: lambda_context.logStreamName, identity: lambda_context.identity, clientContext: lambda_context.clientContext }, faas: { execution: lambda_context.awsRequestId, runtime: "nodejs", trigger, document, invoked_by: service, id: lambda_context.invokedFunctionArn, coldstart, proActiveInitialization }, cloud: { resource_id: lambda_context.invokedFunctionArn, account_id: lambda_context.invokedFunctionArn.split(":")[4] } }); return { attributes, service }; } // src/lambda/propation.ts var headerGetter = { keys(carrier) { return Object.keys(carrier); }, get(carrier, key) { return carrier[key]; } }; var snsGetter = { keys(carrier) { return Object.keys(carrier); }, get(carrier, key) { return carrier[key]?.Value; } }; function extractContext(service, event, cb) { if (cb) { const res = cb(service, event); if (res) { return res; } } switch (service) { case "api": case "api-gateway": case "api-gateway-v2": case "function-url": const httpHeaders = event.headers || {}; return { parent: propagation.extract(context.active(), httpHeaders, headerGetter) }; case "sns": return { parent: propagation.extract(context.active(), event.Records[0].Sns.MessageAttributes, snsGetter) }; case "step-function": if (Array.isArray(event)) { return { links: event.map((parent) => { const traceparent2 = parent._baselime?.traceparent || parent.Payload?._baselime?.traceparent || parent._baselime?._baselime?.traceparent; if (!traceparent2) { return; } return { context: { traceId: traceparent2.split("-")[1], spanId: traceparent2.split("-")[2], traceFlags: Number(traceparent2.split("-")[3]) } }; }).filter((el) => el) }; } const traceparent = event._baselime?.traceparent || event.Payload?._baselime?.traceparent || event._baselime?._baselime?.traceparent; return { parent: propagation.extract(context.active(), { traceparent }, headerGetter) }; default: return { parent: ROOT_CONTEXT }; } } function injectContextToResponse(service, result, span) { const ctx = trace.setSpan(context.active(), span); switch (service) { case "step-function": propagation.inject(ctx, result, { set(carrier, key, value) { carrier["_baselime"] = { [key]: value }; } }); } } // src/lambda/index.ts var tracer = trace.getTracer("@baselime/baselime-lambda-wrapper", "1"); var isColdstart = trackColdstart(); function withOpenTelemetry(handler, opts = {}) { return async function(event, lambda_context, callback) { const { coldstart, proactiveInitialization } = isColdstart(opts.proactiveInitializationThreshold); const { attributes, service } = parseInput(event, lambda_context, coldstart, proactiveInitialization, opts.captureEvent); const { links, parent } = extractContext(service, event, opts.extractContext); return tracer.startActiveSpan(lambda_context.functionName, { links, attributes }, parent, async (span) => { setupTimeoutDetection(span, lambda_context, opts.timeoutThreshold); try { let result = await handler(event, lambda_context, async (err, res) => { if (err) { captureError(span, err); } if (res) { if (opts.captureResponse) { span.setAttributes(flatten({ result: res })); } injectContextToResponse(service, res, span); } if (callback) { span.end(); await flushTraces(); return callback(err, res); } }); if (result) { if (opts.captureResponse) { span.setAttributes(flatten({ result })); } injectContextToResponse(service, result, span); } return result; } catch (e) { captureError(span, e); throw e; } finally { span.end(); await flushTraces(); } }); }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { withOpenTelemetry });