@trigger.dev/core 0.0.0-v3-trigger-dirs-20240423123825 → 0.0.0-v3-update-command-20240423145551
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/v3/index.d.mts +17317 -267
- package/dist/v3/index.d.ts +17317 -267
- package/dist/v3/index.js +2569 -794
- package/dist/v3/index.js.map +1 -1
- package/dist/v3/index.mjs +2545 -796
- package/dist/v3/index.mjs.map +1 -1
- package/dist/v3/otel/index.js +38 -62
- package/dist/v3/otel/index.js.map +1 -1
- package/dist/v3/otel/index.mjs +38 -62
- package/dist/v3/otel/index.mjs.map +1 -1
- package/package.json +7 -71
- package/dist/catalog-e2OUDZEa.d.mts +0 -6645
- package/dist/catalog-ndN7py2b.d.ts +0 -6645
- package/dist/manager-M9GLDnhJ.d.mts +0 -1158
- package/dist/manager-M9GLDnhJ.d.ts +0 -1158
- package/dist/messages-AriaDDm0.d.mts +0 -8696
- package/dist/messages-AriaDDm0.d.ts +0 -8696
- package/dist/v3/dev/index.d.mts +0 -28
- package/dist/v3/dev/index.d.ts +0 -28
- package/dist/v3/dev/index.js +0 -93
- package/dist/v3/dev/index.js.map +0 -1
- package/dist/v3/dev/index.mjs +0 -91
- package/dist/v3/dev/index.mjs.map +0 -1
- package/dist/v3/prod/index.d.mts +0 -45
- package/dist/v3/prod/index.d.ts +0 -45
- package/dist/v3/prod/index.js +0 -205
- package/dist/v3/prod/index.js.map +0 -1
- package/dist/v3/prod/index.mjs +0 -203
- package/dist/v3/prod/index.mjs.map +0 -1
- package/dist/v3/utils/structuredLogger.d.mts +0 -31
- package/dist/v3/utils/structuredLogger.d.ts +0 -31
- package/dist/v3/utils/structuredLogger.js +0 -88
- package/dist/v3/utils/structuredLogger.js.map +0 -1
- package/dist/v3/utils/structuredLogger.mjs +0 -86
- package/dist/v3/utils/structuredLogger.mjs.map +0 -1
- package/dist/v3/workers/index.d.mts +0 -94
- package/dist/v3/workers/index.d.ts +0 -94
- package/dist/v3/workers/index.js +0 -2660
- package/dist/v3/workers/index.js.map +0 -1
- package/dist/v3/workers/index.mjs +0 -2644
- package/dist/v3/workers/index.mjs.map +0 -1
- package/dist/v3/zodIpc.d.mts +0 -32
- package/dist/v3/zodIpc.d.ts +0 -32
- package/dist/v3/zodIpc.js +0 -268
- package/dist/v3/zodIpc.js.map +0 -1
- package/dist/v3/zodIpc.mjs +0 -266
- package/dist/v3/zodIpc.mjs.map +0 -1
- package/dist/v3/zodMessageHandler.d.mts +0 -69
- package/dist/v3/zodMessageHandler.d.ts +0 -69
- package/dist/v3/zodMessageHandler.js +0 -168
- package/dist/v3/zodMessageHandler.js.map +0 -1
- package/dist/v3/zodMessageHandler.mjs +0 -163
- package/dist/v3/zodMessageHandler.mjs.map +0 -1
- package/dist/v3/zodNamespace.d.mts +0 -3663
- package/dist/v3/zodNamespace.d.ts +0 -3663
- package/dist/v3/zodNamespace.js +0 -356
- package/dist/v3/zodNamespace.js.map +0 -1
- package/dist/v3/zodNamespace.mjs +0 -354
- package/dist/v3/zodNamespace.mjs.map +0 -1
- package/dist/v3/zodSocket.d.mts +0 -88
- package/dist/v3/zodSocket.d.ts +0 -88
- package/dist/v3/zodSocket.js +0 -309
- package/dist/v3/zodSocket.js.map +0 -1
- package/dist/v3/zodSocket.mjs +0 -305
- package/dist/v3/zodSocket.mjs.map +0 -1
package/dist/v3/otel/index.js
CHANGED
|
@@ -9,6 +9,7 @@ var resources = require('@opentelemetry/resources');
|
|
|
9
9
|
var sdkLogs = require('@opentelemetry/sdk-logs');
|
|
10
10
|
var sdkTraceNode = require('@opentelemetry/sdk-trace-node');
|
|
11
11
|
var semanticConventions = require('@opentelemetry/semantic-conventions');
|
|
12
|
+
var async_hooks = require('async_hooks');
|
|
12
13
|
|
|
13
14
|
var __defProp = Object.defineProperty;
|
|
14
15
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -131,55 +132,37 @@ function isRecord(value) {
|
|
|
131
132
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
132
133
|
}
|
|
133
134
|
__name(isRecord, "isRecord");
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
// src/v3/utils/globals.ts
|
|
139
|
-
var GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);
|
|
140
|
-
var _global = _globalThis;
|
|
141
|
-
function registerGlobal(type, instance, allowOverride = false) {
|
|
142
|
-
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {};
|
|
143
|
-
if (!allowOverride && api[type]) {
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
api[type] = instance;
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
__name(registerGlobal, "registerGlobal");
|
|
150
|
-
function getGlobal(type) {
|
|
151
|
-
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
152
|
-
}
|
|
153
|
-
__name(getGlobal, "getGlobal");
|
|
154
|
-
function unregisterGlobal(type) {
|
|
155
|
-
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];
|
|
156
|
-
if (api) {
|
|
157
|
-
delete api[type];
|
|
135
|
+
var _SafeAsyncLocalStorage = class _SafeAsyncLocalStorage {
|
|
136
|
+
constructor() {
|
|
137
|
+
this.storage = new async_hooks.AsyncLocalStorage();
|
|
158
138
|
}
|
|
159
|
-
|
|
160
|
-
|
|
139
|
+
runWith(context, fn) {
|
|
140
|
+
return this.storage.run(context, fn);
|
|
141
|
+
}
|
|
142
|
+
getStore() {
|
|
143
|
+
return this.storage.getStore();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
__name(_SafeAsyncLocalStorage, "SafeAsyncLocalStorage");
|
|
147
|
+
var SafeAsyncLocalStorage = _SafeAsyncLocalStorage;
|
|
161
148
|
|
|
162
|
-
// src/v3/
|
|
163
|
-
var
|
|
164
|
-
var
|
|
165
|
-
var _TaskContextAPI = class _TaskContextAPI {
|
|
149
|
+
// src/v3/tasks/taskContextManager.ts
|
|
150
|
+
var _getStore, getStore_fn;
|
|
151
|
+
var _TaskContextManager = class _TaskContextManager {
|
|
166
152
|
constructor() {
|
|
167
|
-
__privateAdd(this,
|
|
168
|
-
|
|
169
|
-
static getInstance() {
|
|
170
|
-
if (!this._instance) {
|
|
171
|
-
this._instance = new _TaskContextAPI();
|
|
172
|
-
}
|
|
173
|
-
return this._instance;
|
|
153
|
+
__privateAdd(this, _getStore);
|
|
154
|
+
__publicField(this, "_storage", new SafeAsyncLocalStorage());
|
|
174
155
|
}
|
|
175
156
|
get isInsideTask() {
|
|
176
|
-
return __privateMethod(this,
|
|
157
|
+
return __privateMethod(this, _getStore, getStore_fn).call(this) !== void 0;
|
|
177
158
|
}
|
|
178
159
|
get ctx() {
|
|
179
|
-
|
|
160
|
+
const store = __privateMethod(this, _getStore, getStore_fn).call(this);
|
|
161
|
+
return store?.ctx;
|
|
180
162
|
}
|
|
181
163
|
get worker() {
|
|
182
|
-
|
|
164
|
+
const store = __privateMethod(this, _getStore, getStore_fn).call(this);
|
|
165
|
+
return store?.worker;
|
|
183
166
|
}
|
|
184
167
|
get attributes() {
|
|
185
168
|
if (this.ctx) {
|
|
@@ -225,34 +208,27 @@ var _TaskContextAPI = class _TaskContextAPI {
|
|
|
225
208
|
}
|
|
226
209
|
return {};
|
|
227
210
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
setGlobalTaskContext(taskContext2) {
|
|
232
|
-
return registerGlobal(API_NAME, taskContext2);
|
|
211
|
+
runWith(context, fn) {
|
|
212
|
+
return this._storage.runWith(context, fn);
|
|
233
213
|
}
|
|
234
214
|
};
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
return
|
|
238
|
-
}, "#
|
|
239
|
-
__name(
|
|
240
|
-
var
|
|
241
|
-
|
|
242
|
-
// src/v3/task-context-api.ts
|
|
243
|
-
var taskContext = TaskContextAPI.getInstance();
|
|
244
|
-
|
|
245
|
-
// src/v3/taskContext/otelProcessors.ts
|
|
215
|
+
_getStore = new WeakSet();
|
|
216
|
+
getStore_fn = /* @__PURE__ */ __name(function() {
|
|
217
|
+
return this._storage.getStore();
|
|
218
|
+
}, "#getStore");
|
|
219
|
+
__name(_TaskContextManager, "TaskContextManager");
|
|
220
|
+
var TaskContextManager = _TaskContextManager;
|
|
221
|
+
var taskContextManager = new TaskContextManager();
|
|
246
222
|
var _TaskContextSpanProcessor = class _TaskContextSpanProcessor {
|
|
247
223
|
constructor(innerProcessor) {
|
|
248
224
|
this._innerProcessor = innerProcessor;
|
|
249
225
|
}
|
|
250
226
|
// Called when a span starts
|
|
251
227
|
onStart(span, parentContext) {
|
|
252
|
-
if (
|
|
228
|
+
if (taskContextManager.ctx) {
|
|
253
229
|
span.setAttributes(flattenAttributes({
|
|
254
|
-
[SemanticInternalAttributes.ATTEMPT_ID]:
|
|
255
|
-
[SemanticInternalAttributes.ATTEMPT_NUMBER]:
|
|
230
|
+
[SemanticInternalAttributes.ATTEMPT_ID]: taskContextManager.ctx.attempt.id,
|
|
231
|
+
[SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContextManager.ctx.attempt.number
|
|
256
232
|
}, SemanticInternalAttributes.METADATA));
|
|
257
233
|
}
|
|
258
234
|
this._innerProcessor.onStart(span, parentContext);
|
|
@@ -278,10 +254,10 @@ var _TaskContextLogProcessor = class _TaskContextLogProcessor {
|
|
|
278
254
|
return this._innerProcessor.forceFlush();
|
|
279
255
|
}
|
|
280
256
|
onEmit(logRecord, context) {
|
|
281
|
-
if (
|
|
257
|
+
if (taskContextManager.ctx) {
|
|
282
258
|
logRecord.setAttributes(flattenAttributes({
|
|
283
|
-
[SemanticInternalAttributes.ATTEMPT_ID]:
|
|
284
|
-
[SemanticInternalAttributes.ATTEMPT_NUMBER]:
|
|
259
|
+
[SemanticInternalAttributes.ATTEMPT_ID]: taskContextManager.ctx.attempt.id,
|
|
260
|
+
[SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContextManager.ctx.attempt.number
|
|
285
261
|
}, SemanticInternalAttributes.METADATA));
|
|
286
262
|
}
|
|
287
263
|
this._innerProcessor.onEmit(logRecord, context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/v3/otel/index.ts","../../../src/v3/otel/tracingSDK.ts","../../../src/v3/limits.ts","../../../src/v3/semanticInternalAttributes.ts","../../../src/v3/utils/flattenAttributes.ts","../../../src/v3/utils/platform.ts","../../../src/v3/utils/globals.ts","../../../src/v3/taskContext/index.ts","../../../src/v3/task-context-api.ts","../../../src/v3/taskContext/otelProcessors.ts","../../../src/v3/utils/getEnv.ts"],"names":["SpanStatusCode","DiagConsoleLogger","DiagLogLevel","diag","logs","OTLPLogExporter","OTLPTraceExporter","registerInstrumentations","Resource","detectResourcesSync","processDetectorSync","BatchLogRecordProcessor","LoggerProvider","SimpleLogRecordProcessor","BatchSpanProcessor","NodeTracerProvider","SimpleSpanProcessor","SemanticResourceAttributes","OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT","OTEL_LOG_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_SPAN_EVENT_COUNT_LIMIT","OTEL_LINK_COUNT_LIMIT","OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT","OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","OFFLOAD_IO_PACKET_LENGTH_LIMIT","SemanticInternalAttributes","ENVIRONMENT_ID","ENVIRONMENT_TYPE","ORGANIZATION_ID","ORGANIZATION_SLUG","ORGANIZATION_NAME","PROJECT_ID","PROJECT_REF","PROJECT_NAME","PROJECT_DIR","ATTEMPT_ID","ATTEMPT_NUMBER","RUN_ID","RUN_IS_TEST","BATCH_ID","TASK_SLUG","TASK_PATH","TASK_EXPORT_NAME","QUEUE_NAME","QUEUE_ID","SPAN_PARTIAL","SPAN_ID","OUTPUT","OUTPUT_TYPE","STYLE","STYLE_ICON","STYLE_VARIANT","STYLE_ACCESSORY","METADATA","TRIGGER","PAYLOAD","PAYLOAD_TYPE","SHOW","SHOW_ACTIONS","WORKER_ID","WORKER_VERSION","CLI_VERSION","SDK_VERSION","SDK_LANGUAGE","RETRY_AT","RETRY_DELAY","RETRY_COUNT","LINK_TITLE","IDEMPOTENCY_KEY","flattenAttributes","obj","prefix","result","key","value","Object","entries","newPrefix","Array","isArray","i","length","assign","isRecord","_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","unregisterGlobal","API_NAME","TaskContextAPI","getInstance","_instance","isInsideTask","undefined","ctx","worker","attributes","contextAttributes","workerAttributes","id","version","attempt","number","task","filePath","exportName","queue","name","environment","organization","project","ref","run","isTest","slug","batch","idempotencyKey","disable","setGlobalTaskContext","taskContext","TaskContextSpanProcessor","constructor","innerProcessor","_innerProcessor","onStart","span","parentContext","setAttributes","onEnd","shutdown","forceFlush","TaskContextLogProcessor","onEmit","logRecord","context","getEnvVar","process","env","AsyncResourceDetector","_resolved","_promise","Promise","resolver","_resolver","detect","_config","resolveWithAttributes","TracingSDK","config","asyncResourceDetector","setLogLevel","diagLogLevel","envResourceAttributesSerialized","envResourceAttributes","JSON","parse","commonResources","detectors","merge","CLOUD_PROVIDER","resource","traceProvider","forceFlushTimeoutMillis","spanLimits","attributeCountLimit","attributeValueLengthLimit","eventCountLimit","attributePerEventCountLimit","linkCountLimit","attributePerLinkCountLimit","spanExporter","url","timeoutMillis","addSpanProcessor","maxExportBatchSize","parseInt","scheduledDelayMillis","exportTimeoutMillis","maxQueueSize","register","instrumentations","tracerProvider","logExporter","loggerProvider","logRecordLimits","addLogRecordProcessor","_logProvider","_spanExporter","_traceProvider","setGlobalLoggerProvider","getLogger","bind","getTracer","flush","level","NONE","ERROR","WARN","INFO","DEBUG","VERBOSE","ALL","setLogger","recordSpanException","error","recordException","stringify","setStatus","code"],"mappings":"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","sourcesContent":["import { Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nexport { TracingSDK, type TracingSDKConfig, type TracingDiagnosticLogLevel } from \"./tracingSDK\";\n\nexport function recordSpanException(span: Span, error: unknown) {\n if (error instanceof Error) {\n span.recordException(error);\n } else if (typeof error === \"string\") {\n span.recordException(new Error(error));\n } else {\n span.recordException(new Error(JSON.stringify(error)));\n }\n\n span.setStatus({ code: SpanStatusCode.ERROR });\n}\n","import { DiagConsoleLogger, DiagLogLevel, TracerProvider, diag } from \"@opentelemetry/api\";\nimport { logs } from \"@opentelemetry/api-logs\";\nimport { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-http\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport {\n registerInstrumentations,\n type InstrumentationOption,\n} from \"@opentelemetry/instrumentation\";\nimport {\n DetectorSync,\n IResource,\n Resource,\n ResourceAttributes,\n ResourceDetectionConfig,\n detectResourcesSync,\n processDetectorSync,\n} from \"@opentelemetry/resources\";\nimport {\n BatchLogRecordProcessor,\n LoggerProvider,\n SimpleLogRecordProcessor,\n} from \"@opentelemetry/sdk-logs\";\nimport {\n BatchSpanProcessor,\n NodeTracerProvider,\n SimpleSpanProcessor,\n SpanExporter,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\nimport {\n OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,\n OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT,\n OTEL_LINK_COUNT_LIMIT,\n OTEL_LOG_ATTRIBUTE_COUNT_LIMIT,\n OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,\n OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n OTEL_SPAN_EVENT_COUNT_LIMIT,\n} from \"../limits\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { TaskContextLogProcessor, TaskContextSpanProcessor } from \"../taskContext/otelProcessors\";\nimport { getEnvVar } from \"../utils/getEnv\";\n\nclass AsyncResourceDetector implements DetectorSync {\n private _promise: Promise<ResourceAttributes>;\n private _resolver?: (value: ResourceAttributes) => void;\n private _resolved: boolean = false;\n\n constructor() {\n this._promise = new Promise((resolver) => {\n this._resolver = resolver;\n });\n }\n\n detect(_config?: ResourceDetectionConfig): Resource {\n return new Resource({}, this._promise);\n }\n\n resolveWithAttributes(attributes: ResourceAttributes) {\n if (!this._resolver) {\n throw new Error(\"Resolver not available\");\n }\n\n if (this._resolved) {\n return;\n }\n\n this._resolved = true;\n this._resolver(attributes);\n }\n}\n\nexport type TracingDiagnosticLogLevel =\n | \"none\"\n | \"error\"\n | \"warn\"\n | \"info\"\n | \"debug\"\n | \"verbose\"\n | \"all\";\n\nexport type TracingSDKConfig = {\n url: string;\n forceFlushTimeoutMillis?: number;\n resource?: IResource;\n instrumentations?: InstrumentationOption[];\n diagLogLevel?: TracingDiagnosticLogLevel;\n};\n\nexport class TracingSDK {\n public readonly asyncResourceDetector = new AsyncResourceDetector();\n private readonly _logProvider: LoggerProvider;\n private readonly _spanExporter: SpanExporter;\n private readonly _traceProvider: NodeTracerProvider;\n\n public readonly getLogger: LoggerProvider[\"getLogger\"];\n public readonly getTracer: TracerProvider[\"getTracer\"];\n\n constructor(private readonly config: TracingSDKConfig) {\n setLogLevel(config.diagLogLevel ?? \"none\");\n\n const envResourceAttributesSerialized = getEnvVar(\"OTEL_RESOURCE_ATTRIBUTES\");\n const envResourceAttributes = envResourceAttributesSerialized\n ? JSON.parse(envResourceAttributesSerialized)\n : {};\n\n const commonResources = detectResourcesSync({\n detectors: [this.asyncResourceDetector, processDetectorSync],\n })\n .merge(\n new Resource({\n [SemanticResourceAttributes.CLOUD_PROVIDER]: \"trigger.dev\",\n [SemanticInternalAttributes.TRIGGER]: true,\n })\n )\n .merge(config.resource ?? new Resource({}))\n .merge(new Resource(envResourceAttributes));\n\n const traceProvider = new NodeTracerProvider({\n forceFlushTimeoutMillis: config.forceFlushTimeoutMillis ?? 500,\n resource: commonResources,\n spanLimits: {\n attributeCountLimit: OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,\n attributeValueLengthLimit: OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n eventCountLimit: OTEL_SPAN_EVENT_COUNT_LIMIT,\n attributePerEventCountLimit: OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,\n linkCountLimit: OTEL_LINK_COUNT_LIMIT,\n attributePerLinkCountLimit: OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT,\n },\n });\n\n const spanExporter = new OTLPTraceExporter({\n url: `${config.url}/v1/traces`,\n timeoutMillis: config.forceFlushTimeoutMillis ?? 1000,\n });\n\n traceProvider.addSpanProcessor(\n new TaskContextSpanProcessor(\n getEnvVar(\"OTEL_BATCH_PROCESSING_ENABLED\") === \"1\"\n ? new BatchSpanProcessor(spanExporter, {\n maxExportBatchSize: parseInt(getEnvVar(\"OTEL_SPAN_MAX_EXPORT_BATCH_SIZE\") ?? \"64\"),\n scheduledDelayMillis: parseInt(\n getEnvVar(\"OTEL_SPAN_SCHEDULED_DELAY_MILLIS\") ?? \"200\"\n ),\n exportTimeoutMillis: parseInt(\n getEnvVar(\"OTEL_SPAN_EXPORT_TIMEOUT_MILLIS\") ?? \"30000\"\n ),\n maxQueueSize: parseInt(getEnvVar(\"OTEL_SPAN_MAX_QUEUE_SIZE\") ?? \"512\"),\n })\n : new SimpleSpanProcessor(spanExporter)\n )\n );\n\n traceProvider.register();\n\n registerInstrumentations({\n instrumentations: config.instrumentations ?? [],\n tracerProvider: traceProvider,\n });\n\n const logExporter = new OTLPLogExporter({\n url: `${config.url}/v1/logs`,\n });\n\n // To start a logger, you first need to initialize the Logger provider.\n const loggerProvider = new LoggerProvider({\n resource: commonResources,\n logRecordLimits: {\n attributeCountLimit: OTEL_LOG_ATTRIBUTE_COUNT_LIMIT,\n attributeValueLengthLimit: OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n },\n });\n\n loggerProvider.addLogRecordProcessor(\n new TaskContextLogProcessor(\n getEnvVar(\"OTEL_BATCH_PROCESSING_ENABLED\") === \"1\"\n ? new BatchLogRecordProcessor(logExporter, {\n maxExportBatchSize: parseInt(getEnvVar(\"OTEL_LOG_MAX_EXPORT_BATCH_SIZE\") ?? \"64\"),\n scheduledDelayMillis: parseInt(getEnvVar(\"OTEL_LOG_SCHEDULED_DELAY_MILLIS\") ?? \"200\"),\n exportTimeoutMillis: parseInt(getEnvVar(\"OTEL_LOG_EXPORT_TIMEOUT_MILLIS\") ?? \"30000\"),\n maxQueueSize: parseInt(getEnvVar(\"OTEL_LOG_MAX_QUEUE_SIZE\") ?? \"512\"),\n })\n : new SimpleLogRecordProcessor(logExporter)\n )\n );\n\n this._logProvider = loggerProvider;\n this._spanExporter = spanExporter;\n this._traceProvider = traceProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\n\n this.getLogger = loggerProvider.getLogger.bind(loggerProvider);\n this.getTracer = traceProvider.getTracer.bind(traceProvider);\n }\n\n public async flush() {\n await this._traceProvider.forceFlush();\n await this._logProvider.forceFlush();\n }\n\n public async shutdown() {\n await this._traceProvider.shutdown();\n await this._logProvider.shutdown();\n }\n}\n\nfunction setLogLevel(level: TracingDiagnosticLogLevel) {\n let diagLogLevel: DiagLogLevel;\n\n switch (level) {\n case \"none\":\n diagLogLevel = DiagLogLevel.NONE;\n break;\n case \"error\":\n diagLogLevel = DiagLogLevel.ERROR;\n break;\n case \"warn\":\n diagLogLevel = DiagLogLevel.WARN;\n break;\n case \"info\":\n diagLogLevel = DiagLogLevel.INFO;\n break;\n case \"debug\":\n diagLogLevel = DiagLogLevel.DEBUG;\n break;\n case \"verbose\":\n diagLogLevel = DiagLogLevel.VERBOSE;\n break;\n case \"all\":\n diagLogLevel = DiagLogLevel.ALL;\n break;\n default:\n diagLogLevel = DiagLogLevel.NONE;\n }\n\n diag.setLogger(new DiagConsoleLogger(), diagLogLevel);\n}\n","import { AttributeValue, Attributes } from \"@opentelemetry/api\";\n\nexport const OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT = 256;\nexport const OTEL_LOG_ATTRIBUTE_COUNT_LIMIT = 256;\nexport const OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT = 1028;\nexport const OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT = 1028;\nexport const OTEL_SPAN_EVENT_COUNT_LIMIT = 10;\nexport const OTEL_LINK_COUNT_LIMIT = 2;\nexport const OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT = 10;\nexport const OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT = 10;\nexport const OFFLOAD_IO_PACKET_LENGTH_LIMIT = 128 * 1024;\n\nexport function imposeAttributeLimits(attributes: Attributes): Attributes {\n const newAttributes: Attributes = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n if (calculateAttributeValueLength(value) > OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) {\n continue;\n }\n\n if (Object.keys(newAttributes).length >= OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT) {\n break;\n }\n\n newAttributes[key] = value;\n }\n\n return newAttributes;\n}\n\nfunction calculateAttributeValueLength(value: AttributeValue | undefined | null): number {\n if (value === undefined || value === null) {\n return 0;\n }\n\n if (typeof value === \"string\") {\n return value.length;\n }\n\n if (typeof value === \"number\") {\n return 8;\n }\n\n if (typeof value === \"boolean\") {\n return 4;\n }\n\n if (Array.isArray(value)) {\n return value.reduce((acc: number, v) => acc + calculateAttributeValueLength(v), 0);\n }\n\n return 0;\n}\n","export const SemanticInternalAttributes = {\n ENVIRONMENT_ID: \"ctx.environment.id\",\n ENVIRONMENT_TYPE: \"ctx.environment.type\",\n ORGANIZATION_ID: \"ctx.organization.id\",\n ORGANIZATION_SLUG: \"ctx.organization.slug\",\n ORGANIZATION_NAME: \"ctx.organization.name\",\n PROJECT_ID: \"ctx.project.id\",\n PROJECT_REF: \"ctx.project.ref\",\n PROJECT_NAME: \"ctx.project.title\",\n PROJECT_DIR: \"project.dir\",\n ATTEMPT_ID: \"ctx.attempt.id\",\n ATTEMPT_NUMBER: \"ctx.attempt.number\",\n RUN_ID: \"ctx.run.id\",\n RUN_IS_TEST: \"ctx.run.isTest\",\n BATCH_ID: \"ctx.batch.id\",\n TASK_SLUG: \"ctx.task.id\",\n TASK_PATH: \"ctx.task.filePath\",\n TASK_EXPORT_NAME: \"ctx.task.exportName\",\n QUEUE_NAME: \"ctx.queue.name\",\n QUEUE_ID: \"ctx.queue.id\",\n SPAN_PARTIAL: \"$span.partial\",\n SPAN_ID: \"$span.span_id\",\n OUTPUT: \"$output\",\n OUTPUT_TYPE: \"$mime_type_output\",\n STYLE: \"$style\",\n STYLE_ICON: \"$style.icon\",\n STYLE_VARIANT: \"$style.variant\",\n STYLE_ACCESSORY: \"$style.accessory\",\n METADATA: \"$metadata\",\n TRIGGER: \"$trigger\",\n PAYLOAD: \"$payload\",\n PAYLOAD_TYPE: \"$mime_type_payload\",\n SHOW: \"$show\",\n SHOW_ACTIONS: \"$show.actions\",\n WORKER_ID: \"worker.id\",\n WORKER_VERSION: \"worker.version\",\n CLI_VERSION: \"cli.version\",\n SDK_VERSION: \"sdk.version\",\n SDK_LANGUAGE: \"sdk.language\",\n RETRY_AT: \"retry.at\",\n RETRY_DELAY: \"retry.delay\",\n RETRY_COUNT: \"retry.count\",\n LINK_TITLE: \"$link.title\",\n IDEMPOTENCY_KEY: \"ctx.run.idempotencyKey\",\n};\n","import { Attributes } from \"@opentelemetry/api\";\n\nexport function flattenAttributes(\n obj: Record<string, unknown> | Array<unknown> | string | boolean | number | null | undefined,\n prefix?: string\n): Attributes {\n const result: Attributes = {};\n\n // Check if obj is null or undefined\n if (!obj) {\n return result;\n }\n\n if (typeof obj === \"string\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n if (typeof obj === \"number\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n if (typeof obj === \"boolean\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const newPrefix = `${prefix ? `${prefix}.` : \"\"}${key}`;\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (typeof value[i] === \"object\" && value[i] !== null) {\n // update null check here as well\n Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`));\n } else {\n result[`${newPrefix}.[${i}]`] = value[i];\n }\n }\n } else if (isRecord(value)) {\n // update null check here\n Object.assign(result, flattenAttributes(value, newPrefix));\n } else {\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") {\n result[newPrefix] = value;\n }\n }\n }\n\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function unflattenAttributes(obj: Attributes): Record<string, unknown> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return obj;\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const parts = key.split(\".\").reduce((acc, part) => {\n // Splitting array indices as separate parts\n if (detectIsArrayIndex(part)) {\n acc.push(part);\n } else {\n acc.push(...part.split(/\\.\\[(.*?)\\]/).filter(Boolean));\n }\n return acc;\n }, [] as string[]);\n\n let current: Record<string, unknown> = result;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n const isArray = detectIsArrayIndex(part);\n const cleanPart = isArray ? part.substring(1, part.length - 1) : part;\n const nextIsArray = detectIsArrayIndex(parts[i + 1]);\n if (!current[cleanPart]) {\n current[cleanPart] = nextIsArray ? [] : {};\n }\n current = current[cleanPart] as Record<string, unknown>;\n }\n const lastPart = parts[parts.length - 1];\n const cleanLastPart = detectIsArrayIndex(lastPart)\n ? parseInt(lastPart.substring(1, lastPart.length - 1), 10)\n : lastPart;\n current[cleanLastPart] = value;\n }\n\n return result;\n}\n\nfunction detectIsArrayIndex(key: string): boolean {\n const match = key.match(/^\\[(\\d+)\\]$/);\n\n if (match) {\n return true;\n }\n\n return false;\n}\n\nexport function primitiveValueOrflattenedAttributes(\n obj: Record<string, unknown> | Array<unknown> | string | boolean | number | undefined,\n prefix: string | undefined\n): Attributes | string | number | boolean | undefined {\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null ||\n obj === undefined\n ) {\n return obj;\n }\n\n const attributes = flattenAttributes(obj, prefix);\n\n if (\n prefix !== undefined &&\n typeof attributes[prefix] !== \"undefined\" &&\n attributes[prefix] !== null\n ) {\n return attributes[prefix] as unknown as Attributes;\n }\n\n return attributes;\n}\n","export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { Clock } from \"../clock/clock\";\nimport type { RuntimeManager } from \"../runtime/manager\";\nimport { TaskCatalog } from \"../task-catalog/catalog\";\nimport { TaskContext } from \"../taskContext/types\";\nimport { _globalThis } from \"./platform\";\n\nconst GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);\n\nconst _global = _globalThis as TriggerDotDevGlobal;\n\nexport function registerGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type,\n instance: TriggerDotDevGlobalAPI[Type],\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {});\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(`trigger.dev: Attempted duplicate registration of API: ${type}`);\n return false;\n }\n\n api[type] = instance;\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type\n): TriggerDotDevGlobalAPI[Type] | undefined {\n return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof TriggerDotDevGlobalAPI) {\n const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype TriggerDotDevGlobal = {\n [GLOBAL_TRIGGER_DOT_DEV_KEY]?: TriggerDotDevGlobalAPI;\n};\n\ntype TriggerDotDevGlobalAPI = {\n runtime?: RuntimeManager;\n logger?: any;\n clock?: Clock;\n [\"task-catalog\"]?: TaskCatalog;\n [\"task-context\"]?: TaskContext;\n};\n","import { Attributes } from \"@opentelemetry/api\";\nimport { BackgroundWorkerProperties, TaskRunContext } from \"../schemas\";\nimport { getGlobal, registerGlobal, unregisterGlobal } from \"../utils/globals\";\nimport { TaskContext } from \"./types\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\n\nconst API_NAME = \"task-context\";\n\nexport class TaskContextAPI {\n private static _instance?: TaskContextAPI;\n\n private constructor() {}\n\n public static getInstance(): TaskContextAPI {\n if (!this._instance) {\n this._instance = new TaskContextAPI();\n }\n\n return this._instance;\n }\n\n get isInsideTask(): boolean {\n return this.#getTaskContext() !== undefined;\n }\n\n get ctx(): TaskRunContext | undefined {\n return this.#getTaskContext()?.ctx;\n }\n\n get worker(): BackgroundWorkerProperties | undefined {\n return this.#getTaskContext()?.worker;\n }\n\n get attributes(): Attributes {\n if (this.ctx) {\n return {\n ...this.contextAttributes,\n ...this.workerAttributes,\n };\n }\n\n return {};\n }\n\n get workerAttributes(): Attributes {\n if (this.worker) {\n return {\n [SemanticInternalAttributes.WORKER_ID]: this.worker.id,\n [SemanticInternalAttributes.WORKER_VERSION]: this.worker.version,\n };\n }\n\n return {};\n }\n\n get contextAttributes(): Attributes {\n if (this.ctx) {\n return {\n [SemanticInternalAttributes.ATTEMPT_ID]: this.ctx.attempt.id,\n [SemanticInternalAttributes.ATTEMPT_NUMBER]: this.ctx.attempt.number,\n [SemanticInternalAttributes.TASK_SLUG]: this.ctx.task.id,\n [SemanticInternalAttributes.TASK_PATH]: this.ctx.task.filePath,\n [SemanticInternalAttributes.TASK_EXPORT_NAME]: this.ctx.task.exportName,\n [SemanticInternalAttributes.QUEUE_NAME]: this.ctx.queue.name,\n [SemanticInternalAttributes.QUEUE_ID]: this.ctx.queue.id,\n [SemanticInternalAttributes.ENVIRONMENT_ID]: this.ctx.environment.id,\n [SemanticInternalAttributes.ENVIRONMENT_TYPE]: this.ctx.environment.type,\n [SemanticInternalAttributes.ORGANIZATION_ID]: this.ctx.organization.id,\n [SemanticInternalAttributes.PROJECT_ID]: this.ctx.project.id,\n [SemanticInternalAttributes.PROJECT_REF]: this.ctx.project.ref,\n [SemanticInternalAttributes.PROJECT_NAME]: this.ctx.project.name,\n [SemanticInternalAttributes.RUN_ID]: this.ctx.run.id,\n [SemanticInternalAttributes.RUN_IS_TEST]: this.ctx.run.isTest,\n [SemanticInternalAttributes.ORGANIZATION_SLUG]: this.ctx.organization.slug,\n [SemanticInternalAttributes.ORGANIZATION_NAME]: this.ctx.organization.name,\n [SemanticInternalAttributes.BATCH_ID]: this.ctx.batch?.id,\n [SemanticInternalAttributes.IDEMPOTENCY_KEY]: this.ctx.run.idempotencyKey,\n };\n }\n\n return {};\n }\n\n public disable() {\n unregisterGlobal(API_NAME);\n }\n\n public setGlobalTaskContext(taskContext: TaskContext): boolean {\n return registerGlobal(API_NAME, taskContext);\n }\n\n #getTaskContext(): TaskContext | undefined {\n return getGlobal(API_NAME);\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TaskContextAPI } from \"./taskContext\";\n/** Entrypoint for logger API */\nexport const taskContext = TaskContextAPI.getInstance();\n","import { LogRecord, LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport { Span, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { Context } from \"@opentelemetry/api\";\nimport { flattenAttributes } from \"../utils/flattenAttributes\";\nimport { taskContext } from \"../task-context-api\";\n\nexport class TaskContextSpanProcessor implements SpanProcessor {\n private _innerProcessor: SpanProcessor;\n\n constructor(innerProcessor: SpanProcessor) {\n this._innerProcessor = innerProcessor;\n }\n\n // Called when a span starts\n onStart(span: Span, parentContext: Context): void {\n if (taskContext.ctx) {\n span.setAttributes(\n flattenAttributes(\n {\n [SemanticInternalAttributes.ATTEMPT_ID]: taskContext.ctx.attempt.id,\n [SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContext.ctx.attempt.number,\n },\n SemanticInternalAttributes.METADATA\n )\n );\n }\n\n this._innerProcessor.onStart(span, parentContext);\n }\n\n // Delegate the rest of the methods to the wrapped processor\n\n onEnd(span: Span): void {\n this._innerProcessor.onEnd(span);\n }\n\n shutdown(): Promise<void> {\n return this._innerProcessor.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this._innerProcessor.forceFlush();\n }\n}\n\nexport class TaskContextLogProcessor implements LogRecordProcessor {\n private _innerProcessor: LogRecordProcessor;\n\n constructor(innerProcessor: LogRecordProcessor) {\n this._innerProcessor = innerProcessor;\n }\n forceFlush(): Promise<void> {\n return this._innerProcessor.forceFlush();\n }\n onEmit(logRecord: LogRecord, context?: Context | undefined): void {\n // Adds in the context attributes to the log record\n if (taskContext.ctx) {\n logRecord.setAttributes(\n flattenAttributes(\n {\n [SemanticInternalAttributes.ATTEMPT_ID]: taskContext.ctx.attempt.id,\n [SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContext.ctx.attempt.number,\n },\n SemanticInternalAttributes.METADATA\n )\n );\n }\n\n this._innerProcessor.onEmit(logRecord, context);\n }\n shutdown(): Promise<void> {\n return this._innerProcessor.shutdown();\n }\n}\n","export function getEnvVar(name: string): string | undefined {\n // This could run in a non-Node.js environment (Bun, Deno, CF Worker, etc.), so don't just assume process.env is a thing\n if (typeof process !== \"undefined\" && typeof process.env === \"object\" && process.env !== null) {\n return process.env[name];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/v3/otel/index.ts","../../../src/v3/otel/tracingSDK.ts","../../../src/v3/limits.ts","../../../src/v3/semanticInternalAttributes.ts","../../../src/v3/utils/flattenAttributes.ts","../../../src/v3/utils/safeAsyncLocalStorage.ts","../../../src/v3/tasks/taskContextManager.ts","../../../src/v3/utils/getEnv.ts"],"names":["SpanStatusCode","DiagConsoleLogger","DiagLogLevel","diag","logs","OTLPLogExporter","OTLPTraceExporter","registerInstrumentations","Resource","detectResourcesSync","processDetectorSync","BatchLogRecordProcessor","LoggerProvider","SimpleLogRecordProcessor","BatchSpanProcessor","NodeTracerProvider","SimpleSpanProcessor","SemanticResourceAttributes","OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT","OTEL_LOG_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_SPAN_EVENT_COUNT_LIMIT","OTEL_LINK_COUNT_LIMIT","OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT","OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","OFFLOAD_IO_PACKET_LENGTH_LIMIT","SemanticInternalAttributes","ENVIRONMENT_ID","ENVIRONMENT_TYPE","ORGANIZATION_ID","ORGANIZATION_SLUG","ORGANIZATION_NAME","PROJECT_ID","PROJECT_REF","PROJECT_NAME","PROJECT_DIR","ATTEMPT_ID","ATTEMPT_NUMBER","RUN_ID","RUN_IS_TEST","BATCH_ID","TASK_SLUG","TASK_PATH","TASK_EXPORT_NAME","QUEUE_NAME","QUEUE_ID","SPAN_PARTIAL","SPAN_ID","OUTPUT","OUTPUT_TYPE","STYLE","STYLE_ICON","STYLE_VARIANT","STYLE_ACCESSORY","METADATA","TRIGGER","PAYLOAD","PAYLOAD_TYPE","SHOW","SHOW_ACTIONS","WORKER_ID","WORKER_VERSION","CLI_VERSION","SDK_VERSION","SDK_LANGUAGE","RETRY_AT","RETRY_DELAY","RETRY_COUNT","LINK_TITLE","IDEMPOTENCY_KEY","flattenAttributes","obj","prefix","result","key","value","Object","entries","newPrefix","Array","isArray","i","length","assign","isRecord","AsyncLocalStorage","SafeAsyncLocalStorage","constructor","storage","runWith","context","fn","run","getStore","TaskContextManager","_storage","isInsideTask","undefined","ctx","store","worker","attributes","contextAttributes","workerAttributes","id","version","attempt","number","task","filePath","exportName","queue","name","environment","type","organization","project","ref","isTest","slug","batch","idempotencyKey","taskContextManager","TaskContextSpanProcessor","innerProcessor","_innerProcessor","onStart","span","parentContext","setAttributes","onEnd","shutdown","forceFlush","TaskContextLogProcessor","onEmit","logRecord","getEnvVar","process","env","AsyncResourceDetector","_resolved","_promise","Promise","resolver","_resolver","detect","_config","resolveWithAttributes","Error","TracingSDK","config","asyncResourceDetector","setLogLevel","diagLogLevel","envResourceAttributesSerialized","envResourceAttributes","JSON","parse","commonResources","detectors","merge","CLOUD_PROVIDER","resource","traceProvider","forceFlushTimeoutMillis","spanLimits","attributeCountLimit","attributeValueLengthLimit","eventCountLimit","attributePerEventCountLimit","linkCountLimit","attributePerLinkCountLimit","spanExporter","url","timeoutMillis","addSpanProcessor","maxExportBatchSize","parseInt","scheduledDelayMillis","exportTimeoutMillis","maxQueueSize","register","instrumentations","tracerProvider","logExporter","loggerProvider","logRecordLimits","addLogRecordProcessor","_logProvider","_spanExporter","_traceProvider","setGlobalLoggerProvider","getLogger","bind","getTracer","flush","level","NONE","ERROR","WARN","INFO","DEBUG","VERBOSE","ALL","setLogger","recordSpanException","error","recordException","stringify","setStatus","code"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAeA,sBAAsB;;;ACArC,SAASC,mBAAmBC,cAA8BC,YAAY;AACtE,SAASC,YAAY;AACrB,SAASC,uBAAuB;AAChC,SAASC,yBAAyB;AAClC,SACEC,gCAEK;AACP,SAGEC,UAGAC,qBACAC,2BACK;AACP,SACEC,yBACAC,gBACAC,gCACK;AACP,SACEC,oBACAC,oBACAC,2BAEK;AACP,SAASC,kCAAkC;;;AC1BpC,IAAMC,kCAAkC;AACxC,IAAMC,iCAAiC;AACvC,IAAMC,yCAAyC;AAC/C,IAAMC,wCAAwC;AAC9C,IAAMC,8BAA8B;AACpC,IAAMC,wBAAwB;AAC9B,IAAMC,sCAAsC;AAC5C,IAAMC,uCAAuC;AAC7C,IAAMC,iCAAiC,MAAM;;;ACV7C,IAAMC,6BAA6B;EACxCC,gBAAgB;EAChBC,kBAAkB;EAClBC,iBAAiB;EACjBC,mBAAmB;EACnBC,mBAAmB;EACnBC,YAAY;EACZC,aAAa;EACbC,cAAc;EACdC,aAAa;EACbC,YAAY;EACZC,gBAAgB;EAChBC,QAAQ;EACRC,aAAa;EACbC,UAAU;EACVC,WAAW;EACXC,WAAW;EACXC,kBAAkB;EAClBC,YAAY;EACZC,UAAU;EACVC,cAAc;EACdC,SAAS;EACTC,QAAQ;EACRC,aAAa;EACbC,OAAO;EACPC,YAAY;EACZC,eAAe;EACfC,iBAAiB;EACjBC,UAAU;EACVC,SAAS;EACTC,SAAS;EACTC,cAAc;EACdC,MAAM;EACNC,cAAc;EACdC,WAAW;EACXC,gBAAgB;EAChBC,aAAa;EACbC,aAAa;EACbC,cAAc;EACdC,UAAU;EACVC,aAAa;EACbC,aAAa;EACbC,YAAY;EACZC,iBAAiB;AACnB;;;AC1CO,SAASC,kBACdC,KACAC,QACY;AACZ,QAAMC,SAAqB,CAAC;AAG5B,MAAI,CAACF,KAAK;AACR,WAAOE;EACT;AAEA,MAAI,OAAOF,QAAQ,UAAU;AAC3BE,WAAOD,UAAU,EAAA,IAAMD;AACvB,WAAOE;EACT;AAEA,MAAI,OAAOF,QAAQ,UAAU;AAC3BE,WAAOD,UAAU,EAAA,IAAMD;AACvB,WAAOE;EACT;AAEA,MAAI,OAAOF,QAAQ,WAAW;AAC5BE,WAAOD,UAAU,EAAA,IAAMD;AACvB,WAAOE;EACT;AAEA,aAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQN,GAAAA,GAAM;AAC9C,UAAMO,YAAY,GAAGN,SAAS,GAAGA,MAAAA,MAAY,EAAE,GAAGE,GAAAA;AAClD,QAAIK,MAAMC,QAAQL,KAAAA,GAAQ;AACxB,eAASM,IAAI,GAAGA,IAAIN,MAAMO,QAAQD,KAAK;AACrC,YAAI,OAAON,MAAMM,CAAAA,MAAO,YAAYN,MAAMM,CAAAA,MAAO,MAAM;AAErDL,iBAAOO,OAAOV,QAAQH,kBAAkBK,MAAMM,CAAAA,GAAI,GAAGH,SAAAA,KAAcG,CAAAA,GAAI,CAAA;QACzE,OAAO;AACLR,iBAAO,GAAGK,SAAAA,KAAcG,CAAAA,GAAI,IAAIN,MAAMM,CAAAA;QACxC;MACF;IACF,WAAWG,SAAST,KAAAA,GAAQ;AAE1BC,aAAOO,OAAOV,QAAQH,kBAAkBK,OAAOG,SAAAA,CAAAA;IACjD,OAAO;AACL,UAAI,OAAOH,UAAU,YAAY,OAAOA,UAAU,YAAY,OAAOA,UAAU,WAAW;AACxFF,eAAOK,SAAAA,IAAaH;MACtB;IACF;EACF;AAEA,SAAOF;AACT;AAhDgBH;AAkDhB,SAASc,SAAST,OAAkD;AAClE,SAAOA,UAAU,QAAQ,OAAOA,UAAU,YAAY,CAACI,MAAMC,QAAQL,KAAAA;AACvE;AAFSS;;;ACpDT,SAASC,yBAAyB;AAE3B,IAAMC,yBAAN,MAAMA,uBAAAA;EAGXC,cAAc;AACZ,SAAKC,UAAU,IAAIH,kBAAAA;EACrB;EAEAI,QAAoDC,SAAYC,IAA+B;AAC7F,WAAO,KAAKH,QAAQI,IAAIF,SAASC,EAAAA;EACnC;EAEAE,WAA0B;AACxB,WAAO,KAAKL,QAAQK,SAAQ;EAC9B;AACF;AAdaP;AAAN,IAAMA,wBAAN;;;ACAP;AAQO,IAAMQ,sBAAN,MAAMA,oBAAAA;EAAN;AA0EL;AAzEQC,oCAA+C,IAAIT,sBAAAA;;EAE3D,IAAIU,eAAwB;AAC1B,WAAO,sBAAK,wBAAL,eAAqBC;EAC9B;EAEA,IAAIC,MAAkC;AACpC,UAAMC,QAAQ,sBAAK,wBAAL;AACd,WAAOA,OAAOD;EAChB;EAEA,IAAIE,SAAiD;AACnD,UAAMD,QAAQ,sBAAK,wBAAL;AACd,WAAOA,OAAOC;EAChB;EAEA,IAAIC,aAAyB;AAC3B,QAAI,KAAKH,KAAK;AACZ,aAAO;QACL,GAAG,KAAKI;QACR,GAAG,KAAKC;MACV;IACF;AAEA,WAAO,CAAC;EACV;EAEA,IAAIA,mBAA+B;AACjC,QAAI,KAAKH,QAAQ;AACf,aAAO;QACL,CAAC1E,2BAA2BkC,SAAS,GAAG,KAAKwC,OAAOI;QACpD,CAAC9E,2BAA2BmC,cAAc,GAAG,KAAKuC,OAAOK;MAC3D;IACF;AAEA,WAAO,CAAC;EACV;EAEA,IAAIH,oBAAgC;AAClC,QAAI,KAAKJ,KAAK;AACZ,aAAO;QACL,CAACxE,2BAA2BU,UAAU,GAAG,KAAK8D,IAAIQ,QAAQF;QAC1D,CAAC9E,2BAA2BW,cAAc,GAAG,KAAK6D,IAAIQ,QAAQC;QAC9D,CAACjF,2BAA2Be,SAAS,GAAG,KAAKyD,IAAIU,KAAKJ;QACtD,CAAC9E,2BAA2BgB,SAAS,GAAG,KAAKwD,IAAIU,KAAKC;QACtD,CAACnF,2BAA2BiB,gBAAgB,GAAG,KAAKuD,IAAIU,KAAKE;QAC7D,CAACpF,2BAA2BkB,UAAU,GAAG,KAAKsD,IAAIa,MAAMC;QACxD,CAACtF,2BAA2BmB,QAAQ,GAAG,KAAKqD,IAAIa,MAAMP;QACtD,CAAC9E,2BAA2BC,cAAc,GAAG,KAAKuE,IAAIe,YAAYT;QAClE,CAAC9E,2BAA2BE,gBAAgB,GAAG,KAAKsE,IAAIe,YAAYC;QACpE,CAACxF,2BAA2BG,eAAe,GAAG,KAAKqE,IAAIiB,aAAaX;QACpE,CAAC9E,2BAA2BM,UAAU,GAAG,KAAKkE,IAAIkB,QAAQZ;QAC1D,CAAC9E,2BAA2BO,WAAW,GAAG,KAAKiE,IAAIkB,QAAQC;QAC3D,CAAC3F,2BAA2BQ,YAAY,GAAG,KAAKgE,IAAIkB,QAAQJ;QAC5D,CAACtF,2BAA2BY,MAAM,GAAG,KAAK4D,IAAIN,IAAIY;QAClD,CAAC9E,2BAA2Ba,WAAW,GAAG,KAAK2D,IAAIN,IAAI0B;QACvD,CAAC5F,2BAA2BI,iBAAiB,GAAG,KAAKoE,IAAIiB,aAAaI;QACtE,CAAC7F,2BAA2BK,iBAAiB,GAAG,KAAKmE,IAAIiB,aAAaH;QACtE,CAACtF,2BAA2Bc,QAAQ,GAAG,KAAK0D,IAAIsB,OAAOhB;QACvD,CAAC9E,2BAA2B2C,eAAe,GAAG,KAAK6B,IAAIN,IAAI6B;MAC7D;IACF;AAEA,WAAO,CAAC;EACV;EAEAhC,QACEC,SACAC,IACwB;AACxB,WAAO,KAAKI,SAASN,QAAQC,SAASC,EAAAA;EACxC;AAKF;AAHE;cAAS,kCAA4B;AACnC,SAAO,KAAKI,SAASF,SAAQ;AAC/B,GAFS;AA1EEC;AAAN,IAAMA,qBAAN;AA+EA,IAAM4B,qBAAqB,IAAI5B,mBAAAA;AAM/B,IAAM6B,4BAAN,MAAMA,0BAAAA;EAGXpC,YAAYqC,gBAA+B;AACzC,SAAKC,kBAAkBD;EACzB;;EAGAE,QAAQC,MAAYC,eAA8B;AAChD,QAAIN,mBAAmBxB,KAAK;AAC1B6B,WAAKE,cACH3D,kBACE;QACE,CAAC5C,2BAA2BU,UAAU,GAAGsF,mBAAmBxB,IAAIQ,QAAQF;QACxE,CAAC9E,2BAA2BW,cAAc,GAAGqF,mBAAmBxB,IAAIQ,QAAQC;MAC9E,GACAjF,2BAA2B4B,QAAQ,CAAA;IAGzC;AAEA,SAAKuE,gBAAgBC,QAAQC,MAAMC,aAAAA;EACrC;;EAIAE,MAAMH,MAAkB;AACtB,SAAKF,gBAAgBK,MAAMH,IAAAA;EAC7B;EAEAI,WAA0B;AACxB,WAAO,KAAKN,gBAAgBM,SAAQ;EACtC;EAEAC,aAA4B;AAC1B,WAAO,KAAKP,gBAAgBO,WAAU;EACxC;AACF;AArCaT;AAAN,IAAMA,2BAAN;AAuCA,IAAMU,2BAAN,MAAMA,yBAAAA;EAGX9C,YAAYqC,gBAAoC;AAC9C,SAAKC,kBAAkBD;EACzB;EACAQ,aAA4B;AAC1B,WAAO,KAAKP,gBAAgBO,WAAU;EACxC;EACAE,OAAOC,WAAsB7C,SAAqC;AAEhE,QAAIgC,mBAAmBxB,KAAK;AAC1BqC,gBAAUN,cACR3D,kBACE;QACE,CAAC5C,2BAA2BU,UAAU,GAAGsF,mBAAmBxB,IAAIQ,QAAQF;QACxE,CAAC9E,2BAA2BW,cAAc,GAAGqF,mBAAmBxB,IAAIQ,QAAQC;MAC9E,GACAjF,2BAA2B4B,QAAQ,CAAA;IAGzC;AAEA,SAAKuE,gBAAgBS,OAAOC,WAAW7C,OAAAA;EACzC;EACAyC,WAA0B;AACxB,WAAO,KAAKN,gBAAgBM,SAAQ;EACtC;AACF;AA5BaE;AAAN,IAAMA,0BAAN;;;ACtIA,SAASG,UAAUxB,MAAkC;AAE1D,MAAI,OAAOyB,YAAY,eAAe,OAAOA,QAAQC,QAAQ,YAAYD,QAAQC,QAAQ,MAAM;AAC7F,WAAOD,QAAQC,IAAI1B,IAAAA;EACrB;AACF;AALgBwB;;;ANAhB;AA2CA,IAAMG,yBAAN,WAAMA;EAKJpD,cAAc;AAFNqD,qCAAqB;AAG3B,SAAKC,WAAW,IAAIC,QAAQ,CAACC,aAAa;AACxC,WAAKC,YAAYD;IACnB,CAAA;EACF;EAEAE,OAAOC,SAA6C;AAClD,WAAO,IAAI3I,SAAS,CAAC,GAAG,KAAKsI,QAAQ;EACvC;EAEAM,sBAAsB9C,YAAgC;AACpD,QAAI,CAAC,KAAK2C,WAAW;AACnB,YAAM,IAAII,MAAM,wBAAA;IAClB;AAEA,QAAI,KAAKR,WAAW;AAClB;IACF;AAEA,SAAKA,YAAY;AACjB,SAAKI,UAAU3C,UAAAA;EACjB;AACF,GA3BMsC,qCAAN;AA8CO,IAAMU,cAAN,MAAMA,YAAAA;EASX9D,YAA6B+D,QAA0B;kBAA1BA;SARbC,wBAAwB,IAAIZ,sBAAAA;AAS1Ca,gBAAYF,OAAOG,gBAAgB,MAAA;AAEnC,UAAMC,kCAAkClB,UAAU,0BAAA;AAClD,UAAMmB,wBAAwBD,kCAC1BE,KAAKC,MAAMH,+BAAAA,IACX,CAAC;AAEL,UAAMI,kBAAkBtJ,oBAAoB;MAC1CuJ,WAAW;QAAC,KAAKR;QAAuB9I;;IAC1C,CAAA,EACGuJ,MACC,IAAIzJ,SAAS;MACX,CAACS,2BAA2BiJ,cAAc,GAAG;MAC7C,CAACvI,2BAA2B6B,OAAO,GAAG;IACxC,CAAA,CAAA,EAEDyG,MAAMV,OAAOY,YAAY,IAAI3J,SAAS,CAAC,CAAA,CAAA,EACvCyJ,MAAM,IAAIzJ,SAASoJ,qBAAAA,CAAAA;AAEtB,UAAMQ,gBAAgB,IAAIrJ,mBAAmB;MAC3CsJ,yBAAyBd,OAAOc,2BAA2B;MAC3DF,UAAUJ;MACVO,YAAY;QACVC,qBAAqBrJ;QACrBsJ,2BAA2BpJ;QAC3BqJ,iBAAiBnJ;QACjBoJ,6BAA6BjJ;QAC7BkJ,gBAAgBpJ;QAChBqJ,4BAA4BpJ;MAC9B;IACF,CAAA;AAEA,UAAMqJ,eAAe,IAAIvK,kBAAkB;MACzCwK,KAAK,GAAGvB,OAAOuB,GAAG;MAClBC,eAAexB,OAAOc,2BAA2B;IACnD,CAAA;AAEAD,kBAAcY,iBACZ,IAAIpD,yBACFa,UAAU,+BAAA,MAAqC,MAC3C,IAAI3H,mBAAmB+J,cAAc;MACnCI,oBAAoBC,SAASzC,UAAU,iCAAA,KAAsC,IAAA;MAC7E0C,sBAAsBD,SACpBzC,UAAU,kCAAA,KAAuC,KAAA;MAEnD2C,qBAAqBF,SACnBzC,UAAU,iCAAA,KAAsC,OAAA;MAElD4C,cAAcH,SAASzC,UAAU,0BAAA,KAA+B,KAAA;IAClE,CAAA,IACA,IAAIzH,oBAAoB6J,YAAAA,CAAa,CAAA;AAI7CT,kBAAckB,SAAQ;AAEtB/K,6BAAyB;MACvBgL,kBAAkBhC,OAAOgC,oBAAoB,CAAA;MAC7CC,gBAAgBpB;IAClB,CAAA;AAEA,UAAMqB,cAAc,IAAIpL,gBAAgB;MACtCyK,KAAK,GAAGvB,OAAOuB,GAAG;IACpB,CAAA;AAGA,UAAMY,iBAAiB,IAAI9K,eAAe;MACxCuJ,UAAUJ;MACV4B,iBAAiB;QACfpB,qBAAqBpJ;QACrBqJ,2BAA2BnJ;MAC7B;IACF,CAAA;AAEAqK,mBAAeE,sBACb,IAAItD,wBACFG,UAAU,+BAAA,MAAqC,MAC3C,IAAI9H,wBAAwB8K,aAAa;MACvCR,oBAAoBC,SAASzC,UAAU,gCAAA,KAAqC,IAAA;MAC5E0C,sBAAsBD,SAASzC,UAAU,iCAAA,KAAsC,KAAA;MAC/E2C,qBAAqBF,SAASzC,UAAU,gCAAA,KAAqC,OAAA;MAC7E4C,cAAcH,SAASzC,UAAU,yBAAA,KAA8B,KAAA;IACjE,CAAA,IACA,IAAI5H,yBAAyB4K,WAAAA,CAAY,CAAA;AAIjD,SAAKI,eAAeH;AACpB,SAAKI,gBAAgBjB;AACrB,SAAKkB,iBAAiB3B;AAEtBhK,SAAK4L,wBAAwBN,cAAAA;AAE7B,SAAKO,YAAYP,eAAeO,UAAUC,KAAKR,cAAAA;AAC/C,SAAKS,YAAY/B,cAAc+B,UAAUD,KAAK9B,aAAAA;EAChD;EAEA,MAAagC,QAAQ;AACnB,UAAM,KAAKL,eAAe1D,WAAU;AACpC,UAAM,KAAKwD,aAAaxD,WAAU;EACpC;EAEA,MAAaD,WAAW;AACtB,UAAM,KAAK2D,eAAe3D,SAAQ;AAClC,UAAM,KAAKyD,aAAazD,SAAQ;EAClC;AACF;AApHakB;AAAN,IAAMA,aAAN;AAsHP,SAASG,YAAY4C,OAAkC;AACrD,MAAI3C;AAEJ,UAAQ2C,OAAAA;IACN,KAAK;AACH3C,qBAAexJ,aAAaoM;AAC5B;IACF,KAAK;AACH5C,qBAAexJ,aAAaqM;AAC5B;IACF,KAAK;AACH7C,qBAAexJ,aAAasM;AAC5B;IACF,KAAK;AACH9C,qBAAexJ,aAAauM;AAC5B;IACF,KAAK;AACH/C,qBAAexJ,aAAawM;AAC5B;IACF,KAAK;AACHhD,qBAAexJ,aAAayM;AAC5B;IACF,KAAK;AACHjD,qBAAexJ,aAAa0M;AAC5B;IACF;AACElD,qBAAexJ,aAAaoM;EAChC;AAEAnM,OAAK0M,UAAU,IAAI5M,kBAAAA,GAAqByJ,YAAAA;AAC1C;AA9BSD;;;AD3MF,SAASqD,oBAAoB9E,MAAY+E,OAAgB;AAC9D,MAAIA,iBAAiB1D,OAAO;AAC1BrB,SAAKgF,gBAAgBD,KAAAA;EACvB,WAAW,OAAOA,UAAU,UAAU;AACpC/E,SAAKgF,gBAAgB,IAAI3D,MAAM0D,KAAAA,CAAAA;EACjC,OAAO;AACL/E,SAAKgF,gBAAgB,IAAI3D,MAAMQ,KAAKoD,UAAUF,KAAAA,CAAAA,CAAAA;EAChD;AAEA/E,OAAKkF,UAAU;IAAEC,MAAMnN,eAAeuM;EAAM,CAAA;AAC9C;AAVgBO","sourcesContent":["import { Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nexport { TracingSDK, type TracingSDKConfig, type TracingDiagnosticLogLevel } from \"./tracingSDK\";\n\nexport function recordSpanException(span: Span, error: unknown) {\n if (error instanceof Error) {\n span.recordException(error);\n } else if (typeof error === \"string\") {\n span.recordException(new Error(error));\n } else {\n span.recordException(new Error(JSON.stringify(error)));\n }\n\n span.setStatus({ code: SpanStatusCode.ERROR });\n}\n","import { DiagConsoleLogger, DiagLogLevel, TracerProvider, diag } from \"@opentelemetry/api\";\nimport { logs } from \"@opentelemetry/api-logs\";\nimport { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-http\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport {\n registerInstrumentations,\n type InstrumentationOption,\n} from \"@opentelemetry/instrumentation\";\nimport {\n DetectorSync,\n IResource,\n Resource,\n ResourceAttributes,\n ResourceDetectionConfig,\n detectResourcesSync,\n processDetectorSync,\n} from \"@opentelemetry/resources\";\nimport {\n BatchLogRecordProcessor,\n LoggerProvider,\n SimpleLogRecordProcessor,\n} from \"@opentelemetry/sdk-logs\";\nimport {\n BatchSpanProcessor,\n NodeTracerProvider,\n SimpleSpanProcessor,\n SpanExporter,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\nimport {\n OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,\n OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT,\n OTEL_LINK_COUNT_LIMIT,\n OTEL_LOG_ATTRIBUTE_COUNT_LIMIT,\n OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,\n OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n OTEL_SPAN_EVENT_COUNT_LIMIT,\n} from \"../limits\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { TaskContextLogProcessor, TaskContextSpanProcessor } from \"../tasks/taskContextManager\";\nimport { getEnvVar } from \"../utils/getEnv\";\n\nclass AsyncResourceDetector implements DetectorSync {\n private _promise: Promise<ResourceAttributes>;\n private _resolver?: (value: ResourceAttributes) => void;\n private _resolved: boolean = false;\n\n constructor() {\n this._promise = new Promise((resolver) => {\n this._resolver = resolver;\n });\n }\n\n detect(_config?: ResourceDetectionConfig): Resource {\n return new Resource({}, this._promise);\n }\n\n resolveWithAttributes(attributes: ResourceAttributes) {\n if (!this._resolver) {\n throw new Error(\"Resolver not available\");\n }\n\n if (this._resolved) {\n return;\n }\n\n this._resolved = true;\n this._resolver(attributes);\n }\n}\n\nexport type TracingDiagnosticLogLevel =\n | \"none\"\n | \"error\"\n | \"warn\"\n | \"info\"\n | \"debug\"\n | \"verbose\"\n | \"all\";\n\nexport type TracingSDKConfig = {\n url: string;\n forceFlushTimeoutMillis?: number;\n resource?: IResource;\n instrumentations?: InstrumentationOption[];\n diagLogLevel?: TracingDiagnosticLogLevel;\n};\n\nexport class TracingSDK {\n public readonly asyncResourceDetector = new AsyncResourceDetector();\n private readonly _logProvider: LoggerProvider;\n private readonly _spanExporter: SpanExporter;\n private readonly _traceProvider: NodeTracerProvider;\n\n public readonly getLogger: LoggerProvider[\"getLogger\"];\n public readonly getTracer: TracerProvider[\"getTracer\"];\n\n constructor(private readonly config: TracingSDKConfig) {\n setLogLevel(config.diagLogLevel ?? \"none\");\n\n const envResourceAttributesSerialized = getEnvVar(\"OTEL_RESOURCE_ATTRIBUTES\");\n const envResourceAttributes = envResourceAttributesSerialized\n ? JSON.parse(envResourceAttributesSerialized)\n : {};\n\n const commonResources = detectResourcesSync({\n detectors: [this.asyncResourceDetector, processDetectorSync],\n })\n .merge(\n new Resource({\n [SemanticResourceAttributes.CLOUD_PROVIDER]: \"trigger.dev\",\n [SemanticInternalAttributes.TRIGGER]: true,\n })\n )\n .merge(config.resource ?? new Resource({}))\n .merge(new Resource(envResourceAttributes));\n\n const traceProvider = new NodeTracerProvider({\n forceFlushTimeoutMillis: config.forceFlushTimeoutMillis ?? 500,\n resource: commonResources,\n spanLimits: {\n attributeCountLimit: OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,\n attributeValueLengthLimit: OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n eventCountLimit: OTEL_SPAN_EVENT_COUNT_LIMIT,\n attributePerEventCountLimit: OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,\n linkCountLimit: OTEL_LINK_COUNT_LIMIT,\n attributePerLinkCountLimit: OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT,\n },\n });\n\n const spanExporter = new OTLPTraceExporter({\n url: `${config.url}/v1/traces`,\n timeoutMillis: config.forceFlushTimeoutMillis ?? 1000,\n });\n\n traceProvider.addSpanProcessor(\n new TaskContextSpanProcessor(\n getEnvVar(\"OTEL_BATCH_PROCESSING_ENABLED\") === \"1\"\n ? new BatchSpanProcessor(spanExporter, {\n maxExportBatchSize: parseInt(getEnvVar(\"OTEL_SPAN_MAX_EXPORT_BATCH_SIZE\") ?? \"64\"),\n scheduledDelayMillis: parseInt(\n getEnvVar(\"OTEL_SPAN_SCHEDULED_DELAY_MILLIS\") ?? \"200\"\n ),\n exportTimeoutMillis: parseInt(\n getEnvVar(\"OTEL_SPAN_EXPORT_TIMEOUT_MILLIS\") ?? \"30000\"\n ),\n maxQueueSize: parseInt(getEnvVar(\"OTEL_SPAN_MAX_QUEUE_SIZE\") ?? \"512\"),\n })\n : new SimpleSpanProcessor(spanExporter)\n )\n );\n\n traceProvider.register();\n\n registerInstrumentations({\n instrumentations: config.instrumentations ?? [],\n tracerProvider: traceProvider,\n });\n\n const logExporter = new OTLPLogExporter({\n url: `${config.url}/v1/logs`,\n });\n\n // To start a logger, you first need to initialize the Logger provider.\n const loggerProvider = new LoggerProvider({\n resource: commonResources,\n logRecordLimits: {\n attributeCountLimit: OTEL_LOG_ATTRIBUTE_COUNT_LIMIT,\n attributeValueLengthLimit: OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT,\n },\n });\n\n loggerProvider.addLogRecordProcessor(\n new TaskContextLogProcessor(\n getEnvVar(\"OTEL_BATCH_PROCESSING_ENABLED\") === \"1\"\n ? new BatchLogRecordProcessor(logExporter, {\n maxExportBatchSize: parseInt(getEnvVar(\"OTEL_LOG_MAX_EXPORT_BATCH_SIZE\") ?? \"64\"),\n scheduledDelayMillis: parseInt(getEnvVar(\"OTEL_LOG_SCHEDULED_DELAY_MILLIS\") ?? \"200\"),\n exportTimeoutMillis: parseInt(getEnvVar(\"OTEL_LOG_EXPORT_TIMEOUT_MILLIS\") ?? \"30000\"),\n maxQueueSize: parseInt(getEnvVar(\"OTEL_LOG_MAX_QUEUE_SIZE\") ?? \"512\"),\n })\n : new SimpleLogRecordProcessor(logExporter)\n )\n );\n\n this._logProvider = loggerProvider;\n this._spanExporter = spanExporter;\n this._traceProvider = traceProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\n\n this.getLogger = loggerProvider.getLogger.bind(loggerProvider);\n this.getTracer = traceProvider.getTracer.bind(traceProvider);\n }\n\n public async flush() {\n await this._traceProvider.forceFlush();\n await this._logProvider.forceFlush();\n }\n\n public async shutdown() {\n await this._traceProvider.shutdown();\n await this._logProvider.shutdown();\n }\n}\n\nfunction setLogLevel(level: TracingDiagnosticLogLevel) {\n let diagLogLevel: DiagLogLevel;\n\n switch (level) {\n case \"none\":\n diagLogLevel = DiagLogLevel.NONE;\n break;\n case \"error\":\n diagLogLevel = DiagLogLevel.ERROR;\n break;\n case \"warn\":\n diagLogLevel = DiagLogLevel.WARN;\n break;\n case \"info\":\n diagLogLevel = DiagLogLevel.INFO;\n break;\n case \"debug\":\n diagLogLevel = DiagLogLevel.DEBUG;\n break;\n case \"verbose\":\n diagLogLevel = DiagLogLevel.VERBOSE;\n break;\n case \"all\":\n diagLogLevel = DiagLogLevel.ALL;\n break;\n default:\n diagLogLevel = DiagLogLevel.NONE;\n }\n\n diag.setLogger(new DiagConsoleLogger(), diagLogLevel);\n}\n","import { AttributeValue, Attributes } from \"@opentelemetry/api\";\n\nexport const OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT = 256;\nexport const OTEL_LOG_ATTRIBUTE_COUNT_LIMIT = 256;\nexport const OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT = 1028;\nexport const OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT = 1028;\nexport const OTEL_SPAN_EVENT_COUNT_LIMIT = 10;\nexport const OTEL_LINK_COUNT_LIMIT = 2;\nexport const OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT = 10;\nexport const OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT = 10;\nexport const OFFLOAD_IO_PACKET_LENGTH_LIMIT = 128 * 1024;\n\nexport function imposeAttributeLimits(attributes: Attributes): Attributes {\n const newAttributes: Attributes = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n if (calculateAttributeValueLength(value) > OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) {\n continue;\n }\n\n if (Object.keys(newAttributes).length >= OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT) {\n break;\n }\n\n newAttributes[key] = value;\n }\n\n return newAttributes;\n}\n\nfunction calculateAttributeValueLength(value: AttributeValue | undefined | null): number {\n if (value === undefined || value === null) {\n return 0;\n }\n\n if (typeof value === \"string\") {\n return value.length;\n }\n\n if (typeof value === \"number\") {\n return 8;\n }\n\n if (typeof value === \"boolean\") {\n return 4;\n }\n\n if (Array.isArray(value)) {\n return value.reduce((acc: number, v) => acc + calculateAttributeValueLength(v), 0);\n }\n\n return 0;\n}\n","export const SemanticInternalAttributes = {\n ENVIRONMENT_ID: \"ctx.environment.id\",\n ENVIRONMENT_TYPE: \"ctx.environment.type\",\n ORGANIZATION_ID: \"ctx.organization.id\",\n ORGANIZATION_SLUG: \"ctx.organization.slug\",\n ORGANIZATION_NAME: \"ctx.organization.name\",\n PROJECT_ID: \"ctx.project.id\",\n PROJECT_REF: \"ctx.project.ref\",\n PROJECT_NAME: \"ctx.project.title\",\n PROJECT_DIR: \"project.dir\",\n ATTEMPT_ID: \"ctx.attempt.id\",\n ATTEMPT_NUMBER: \"ctx.attempt.number\",\n RUN_ID: \"ctx.run.id\",\n RUN_IS_TEST: \"ctx.run.isTest\",\n BATCH_ID: \"ctx.batch.id\",\n TASK_SLUG: \"ctx.task.id\",\n TASK_PATH: \"ctx.task.filePath\",\n TASK_EXPORT_NAME: \"ctx.task.exportName\",\n QUEUE_NAME: \"ctx.queue.name\",\n QUEUE_ID: \"ctx.queue.id\",\n SPAN_PARTIAL: \"$span.partial\",\n SPAN_ID: \"$span.span_id\",\n OUTPUT: \"$output\",\n OUTPUT_TYPE: \"$mime_type_output\",\n STYLE: \"$style\",\n STYLE_ICON: \"$style.icon\",\n STYLE_VARIANT: \"$style.variant\",\n STYLE_ACCESSORY: \"$style.accessory\",\n METADATA: \"$metadata\",\n TRIGGER: \"$trigger\",\n PAYLOAD: \"$payload\",\n PAYLOAD_TYPE: \"$mime_type_payload\",\n SHOW: \"$show\",\n SHOW_ACTIONS: \"$show.actions\",\n WORKER_ID: \"worker.id\",\n WORKER_VERSION: \"worker.version\",\n CLI_VERSION: \"cli.version\",\n SDK_VERSION: \"sdk.version\",\n SDK_LANGUAGE: \"sdk.language\",\n RETRY_AT: \"retry.at\",\n RETRY_DELAY: \"retry.delay\",\n RETRY_COUNT: \"retry.count\",\n LINK_TITLE: \"$link.title\",\n IDEMPOTENCY_KEY: \"ctx.run.idempotencyKey\",\n};\n","import { Attributes } from \"@opentelemetry/api\";\n\nexport function flattenAttributes(\n obj: Record<string, unknown> | Array<unknown> | string | boolean | number | null | undefined,\n prefix?: string\n): Attributes {\n const result: Attributes = {};\n\n // Check if obj is null or undefined\n if (!obj) {\n return result;\n }\n\n if (typeof obj === \"string\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n if (typeof obj === \"number\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n if (typeof obj === \"boolean\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const newPrefix = `${prefix ? `${prefix}.` : \"\"}${key}`;\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (typeof value[i] === \"object\" && value[i] !== null) {\n // update null check here as well\n Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`));\n } else {\n result[`${newPrefix}.[${i}]`] = value[i];\n }\n }\n } else if (isRecord(value)) {\n // update null check here\n Object.assign(result, flattenAttributes(value, newPrefix));\n } else {\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") {\n result[newPrefix] = value;\n }\n }\n }\n\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function unflattenAttributes(obj: Attributes): Record<string, unknown> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return obj;\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const parts = key.split(\".\").reduce((acc, part) => {\n // Splitting array indices as separate parts\n if (detectIsArrayIndex(part)) {\n acc.push(part);\n } else {\n acc.push(...part.split(/\\.\\[(.*?)\\]/).filter(Boolean));\n }\n return acc;\n }, [] as string[]);\n\n let current: Record<string, unknown> = result;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n const isArray = detectIsArrayIndex(part);\n const cleanPart = isArray ? part.substring(1, part.length - 1) : part;\n const nextIsArray = detectIsArrayIndex(parts[i + 1]);\n if (!current[cleanPart]) {\n current[cleanPart] = nextIsArray ? [] : {};\n }\n current = current[cleanPart] as Record<string, unknown>;\n }\n const lastPart = parts[parts.length - 1];\n const cleanLastPart = detectIsArrayIndex(lastPart)\n ? parseInt(lastPart.substring(1, lastPart.length - 1), 10)\n : lastPart;\n current[cleanLastPart] = value;\n }\n\n return result;\n}\n\nfunction detectIsArrayIndex(key: string): boolean {\n const match = key.match(/^\\[(\\d+)\\]$/);\n\n if (match) {\n return true;\n }\n\n return false;\n}\n\nexport function primitiveValueOrflattenedAttributes(\n obj: Record<string, unknown> | Array<unknown> | string | boolean | number | undefined,\n prefix: string | undefined\n): Attributes | string | number | boolean | undefined {\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null ||\n obj === undefined\n ) {\n return obj;\n }\n\n const attributes = flattenAttributes(obj, prefix);\n\n if (\n prefix !== undefined &&\n typeof attributes[prefix] !== \"undefined\" &&\n attributes[prefix] !== null\n ) {\n return attributes[prefix] as unknown as Attributes;\n }\n\n return attributes;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport class SafeAsyncLocalStorage<T> {\n private storage: AsyncLocalStorage<T>;\n\n constructor() {\n this.storage = new AsyncLocalStorage<T>();\n }\n\n runWith<R extends (...args: any[]) => Promise<any>>(context: T, fn: R): Promise<ReturnType<R>> {\n return this.storage.run(context, fn);\n }\n\n getStore(): T | undefined {\n return this.storage.getStore();\n }\n}\n","import { Attributes, Context } from \"@opentelemetry/api\";\nimport { TaskRunContext, type BackgroundWorkerProperties } from \"../schemas\";\nimport { flattenAttributes } from \"../utils/flattenAttributes\";\nimport { SafeAsyncLocalStorage } from \"../utils/safeAsyncLocalStorage\";\n\ntype TaskContext = {\n ctx: TaskRunContext;\n worker: BackgroundWorkerProperties;\n};\n\nexport class TaskContextManager {\n private _storage: SafeAsyncLocalStorage<TaskContext> = new SafeAsyncLocalStorage<TaskContext>();\n\n get isInsideTask(): boolean {\n return this.#getStore() !== undefined;\n }\n\n get ctx(): TaskRunContext | undefined {\n const store = this.#getStore();\n return store?.ctx;\n }\n\n get worker(): BackgroundWorkerProperties | undefined {\n const store = this.#getStore();\n return store?.worker;\n }\n\n get attributes(): Attributes {\n if (this.ctx) {\n return {\n ...this.contextAttributes,\n ...this.workerAttributes,\n };\n }\n\n return {};\n }\n\n get workerAttributes(): Attributes {\n if (this.worker) {\n return {\n [SemanticInternalAttributes.WORKER_ID]: this.worker.id,\n [SemanticInternalAttributes.WORKER_VERSION]: this.worker.version,\n };\n }\n\n return {};\n }\n\n get contextAttributes(): Attributes {\n if (this.ctx) {\n return {\n [SemanticInternalAttributes.ATTEMPT_ID]: this.ctx.attempt.id,\n [SemanticInternalAttributes.ATTEMPT_NUMBER]: this.ctx.attempt.number,\n [SemanticInternalAttributes.TASK_SLUG]: this.ctx.task.id,\n [SemanticInternalAttributes.TASK_PATH]: this.ctx.task.filePath,\n [SemanticInternalAttributes.TASK_EXPORT_NAME]: this.ctx.task.exportName,\n [SemanticInternalAttributes.QUEUE_NAME]: this.ctx.queue.name,\n [SemanticInternalAttributes.QUEUE_ID]: this.ctx.queue.id,\n [SemanticInternalAttributes.ENVIRONMENT_ID]: this.ctx.environment.id,\n [SemanticInternalAttributes.ENVIRONMENT_TYPE]: this.ctx.environment.type,\n [SemanticInternalAttributes.ORGANIZATION_ID]: this.ctx.organization.id,\n [SemanticInternalAttributes.PROJECT_ID]: this.ctx.project.id,\n [SemanticInternalAttributes.PROJECT_REF]: this.ctx.project.ref,\n [SemanticInternalAttributes.PROJECT_NAME]: this.ctx.project.name,\n [SemanticInternalAttributes.RUN_ID]: this.ctx.run.id,\n [SemanticInternalAttributes.RUN_IS_TEST]: this.ctx.run.isTest,\n [SemanticInternalAttributes.ORGANIZATION_SLUG]: this.ctx.organization.slug,\n [SemanticInternalAttributes.ORGANIZATION_NAME]: this.ctx.organization.name,\n [SemanticInternalAttributes.BATCH_ID]: this.ctx.batch?.id,\n [SemanticInternalAttributes.IDEMPOTENCY_KEY]: this.ctx.run.idempotencyKey,\n };\n }\n\n return {};\n }\n\n runWith<R extends (...args: any[]) => Promise<any>>(\n context: TaskContext,\n fn: R\n ): Promise<ReturnType<R>> {\n return this._storage.runWith(context, fn);\n }\n\n #getStore(): TaskContext | undefined {\n return this._storage.getStore();\n }\n}\n\nexport const taskContextManager = new TaskContextManager();\n\nimport { LogRecord, LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport { Span, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\n\nexport class TaskContextSpanProcessor implements SpanProcessor {\n private _innerProcessor: SpanProcessor;\n\n constructor(innerProcessor: SpanProcessor) {\n this._innerProcessor = innerProcessor;\n }\n\n // Called when a span starts\n onStart(span: Span, parentContext: Context): void {\n if (taskContextManager.ctx) {\n span.setAttributes(\n flattenAttributes(\n {\n [SemanticInternalAttributes.ATTEMPT_ID]: taskContextManager.ctx.attempt.id,\n [SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContextManager.ctx.attempt.number,\n },\n SemanticInternalAttributes.METADATA\n )\n );\n }\n\n this._innerProcessor.onStart(span, parentContext);\n }\n\n // Delegate the rest of the methods to the wrapped processor\n\n onEnd(span: Span): void {\n this._innerProcessor.onEnd(span);\n }\n\n shutdown(): Promise<void> {\n return this._innerProcessor.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this._innerProcessor.forceFlush();\n }\n}\n\nexport class TaskContextLogProcessor implements LogRecordProcessor {\n private _innerProcessor: LogRecordProcessor;\n\n constructor(innerProcessor: LogRecordProcessor) {\n this._innerProcessor = innerProcessor;\n }\n forceFlush(): Promise<void> {\n return this._innerProcessor.forceFlush();\n }\n onEmit(logRecord: LogRecord, context?: Context | undefined): void {\n // Adds in the context attributes to the log record\n if (taskContextManager.ctx) {\n logRecord.setAttributes(\n flattenAttributes(\n {\n [SemanticInternalAttributes.ATTEMPT_ID]: taskContextManager.ctx.attempt.id,\n [SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContextManager.ctx.attempt.number,\n },\n SemanticInternalAttributes.METADATA\n )\n );\n }\n\n this._innerProcessor.onEmit(logRecord, context);\n }\n shutdown(): Promise<void> {\n return this._innerProcessor.shutdown();\n }\n}\n","export function getEnvVar(name: string): string | undefined {\n // This could run in a non-Node.js environment (Bun, Deno, CF Worker, etc.), so don't just assume process.env is a thing\n if (typeof process !== \"undefined\" && typeof process.env === \"object\" && process.env !== null) {\n return process.env[name];\n }\n}\n"]}
|
package/dist/v3/otel/index.mjs
CHANGED
|
@@ -7,6 +7,7 @@ import { Resource, detectResourcesSync, processDetectorSync } from '@opentelemet
|
|
|
7
7
|
import { LoggerProvider, BatchLogRecordProcessor, SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs';
|
|
8
8
|
import { NodeTracerProvider, BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';
|
|
9
9
|
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
|
|
10
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
10
11
|
|
|
11
12
|
var __defProp = Object.defineProperty;
|
|
12
13
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -129,55 +130,37 @@ function isRecord(value) {
|
|
|
129
130
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
130
131
|
}
|
|
131
132
|
__name(isRecord, "isRecord");
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// src/v3/utils/globals.ts
|
|
137
|
-
var GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);
|
|
138
|
-
var _global = _globalThis;
|
|
139
|
-
function registerGlobal(type, instance, allowOverride = false) {
|
|
140
|
-
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {};
|
|
141
|
-
if (!allowOverride && api[type]) {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
api[type] = instance;
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
__name(registerGlobal, "registerGlobal");
|
|
148
|
-
function getGlobal(type) {
|
|
149
|
-
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
150
|
-
}
|
|
151
|
-
__name(getGlobal, "getGlobal");
|
|
152
|
-
function unregisterGlobal(type) {
|
|
153
|
-
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];
|
|
154
|
-
if (api) {
|
|
155
|
-
delete api[type];
|
|
133
|
+
var _SafeAsyncLocalStorage = class _SafeAsyncLocalStorage {
|
|
134
|
+
constructor() {
|
|
135
|
+
this.storage = new AsyncLocalStorage();
|
|
156
136
|
}
|
|
157
|
-
|
|
158
|
-
|
|
137
|
+
runWith(context, fn) {
|
|
138
|
+
return this.storage.run(context, fn);
|
|
139
|
+
}
|
|
140
|
+
getStore() {
|
|
141
|
+
return this.storage.getStore();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
__name(_SafeAsyncLocalStorage, "SafeAsyncLocalStorage");
|
|
145
|
+
var SafeAsyncLocalStorage = _SafeAsyncLocalStorage;
|
|
159
146
|
|
|
160
|
-
// src/v3/
|
|
161
|
-
var
|
|
162
|
-
var
|
|
163
|
-
var _TaskContextAPI = class _TaskContextAPI {
|
|
147
|
+
// src/v3/tasks/taskContextManager.ts
|
|
148
|
+
var _getStore, getStore_fn;
|
|
149
|
+
var _TaskContextManager = class _TaskContextManager {
|
|
164
150
|
constructor() {
|
|
165
|
-
__privateAdd(this,
|
|
166
|
-
|
|
167
|
-
static getInstance() {
|
|
168
|
-
if (!this._instance) {
|
|
169
|
-
this._instance = new _TaskContextAPI();
|
|
170
|
-
}
|
|
171
|
-
return this._instance;
|
|
151
|
+
__privateAdd(this, _getStore);
|
|
152
|
+
__publicField(this, "_storage", new SafeAsyncLocalStorage());
|
|
172
153
|
}
|
|
173
154
|
get isInsideTask() {
|
|
174
|
-
return __privateMethod(this,
|
|
155
|
+
return __privateMethod(this, _getStore, getStore_fn).call(this) !== void 0;
|
|
175
156
|
}
|
|
176
157
|
get ctx() {
|
|
177
|
-
|
|
158
|
+
const store = __privateMethod(this, _getStore, getStore_fn).call(this);
|
|
159
|
+
return store?.ctx;
|
|
178
160
|
}
|
|
179
161
|
get worker() {
|
|
180
|
-
|
|
162
|
+
const store = __privateMethod(this, _getStore, getStore_fn).call(this);
|
|
163
|
+
return store?.worker;
|
|
181
164
|
}
|
|
182
165
|
get attributes() {
|
|
183
166
|
if (this.ctx) {
|
|
@@ -223,34 +206,27 @@ var _TaskContextAPI = class _TaskContextAPI {
|
|
|
223
206
|
}
|
|
224
207
|
return {};
|
|
225
208
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
setGlobalTaskContext(taskContext2) {
|
|
230
|
-
return registerGlobal(API_NAME, taskContext2);
|
|
209
|
+
runWith(context, fn) {
|
|
210
|
+
return this._storage.runWith(context, fn);
|
|
231
211
|
}
|
|
232
212
|
};
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
return
|
|
236
|
-
}, "#
|
|
237
|
-
__name(
|
|
238
|
-
var
|
|
239
|
-
|
|
240
|
-
// src/v3/task-context-api.ts
|
|
241
|
-
var taskContext = TaskContextAPI.getInstance();
|
|
242
|
-
|
|
243
|
-
// src/v3/taskContext/otelProcessors.ts
|
|
213
|
+
_getStore = new WeakSet();
|
|
214
|
+
getStore_fn = /* @__PURE__ */ __name(function() {
|
|
215
|
+
return this._storage.getStore();
|
|
216
|
+
}, "#getStore");
|
|
217
|
+
__name(_TaskContextManager, "TaskContextManager");
|
|
218
|
+
var TaskContextManager = _TaskContextManager;
|
|
219
|
+
var taskContextManager = new TaskContextManager();
|
|
244
220
|
var _TaskContextSpanProcessor = class _TaskContextSpanProcessor {
|
|
245
221
|
constructor(innerProcessor) {
|
|
246
222
|
this._innerProcessor = innerProcessor;
|
|
247
223
|
}
|
|
248
224
|
// Called when a span starts
|
|
249
225
|
onStart(span, parentContext) {
|
|
250
|
-
if (
|
|
226
|
+
if (taskContextManager.ctx) {
|
|
251
227
|
span.setAttributes(flattenAttributes({
|
|
252
|
-
[SemanticInternalAttributes.ATTEMPT_ID]:
|
|
253
|
-
[SemanticInternalAttributes.ATTEMPT_NUMBER]:
|
|
228
|
+
[SemanticInternalAttributes.ATTEMPT_ID]: taskContextManager.ctx.attempt.id,
|
|
229
|
+
[SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContextManager.ctx.attempt.number
|
|
254
230
|
}, SemanticInternalAttributes.METADATA));
|
|
255
231
|
}
|
|
256
232
|
this._innerProcessor.onStart(span, parentContext);
|
|
@@ -276,10 +252,10 @@ var _TaskContextLogProcessor = class _TaskContextLogProcessor {
|
|
|
276
252
|
return this._innerProcessor.forceFlush();
|
|
277
253
|
}
|
|
278
254
|
onEmit(logRecord, context) {
|
|
279
|
-
if (
|
|
255
|
+
if (taskContextManager.ctx) {
|
|
280
256
|
logRecord.setAttributes(flattenAttributes({
|
|
281
|
-
[SemanticInternalAttributes.ATTEMPT_ID]:
|
|
282
|
-
[SemanticInternalAttributes.ATTEMPT_NUMBER]:
|
|
257
|
+
[SemanticInternalAttributes.ATTEMPT_ID]: taskContextManager.ctx.attempt.id,
|
|
258
|
+
[SemanticInternalAttributes.ATTEMPT_NUMBER]: taskContextManager.ctx.attempt.number
|
|
283
259
|
}, SemanticInternalAttributes.METADATA));
|
|
284
260
|
}
|
|
285
261
|
this._innerProcessor.onEmit(logRecord, context);
|