@trigger.dev/core 0.0.0-v3-canary-20240322220011 → 0.0.0-v3-canary-20240324201508

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.
@@ -2,8 +2,6 @@ import { TracerProvider, Span } from '@opentelemetry/api';
2
2
  import { InstrumentationOption } from '@opentelemetry/instrumentation';
3
3
  import { IResource, DetectorSync, ResourceDetectionConfig, Resource, ResourceAttributes } from '@opentelemetry/resources';
4
4
  import { LoggerProvider } from '@opentelemetry/sdk-logs';
5
- export { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
6
- export { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
7
5
 
8
6
  declare class AsyncResourceDetector implements DetectorSync {
9
7
  private _promise;
@@ -2,8 +2,6 @@ import { TracerProvider, Span } from '@opentelemetry/api';
2
2
  import { InstrumentationOption } from '@opentelemetry/instrumentation';
3
3
  import { IResource, DetectorSync, ResourceDetectionConfig, Resource, ResourceAttributes } from '@opentelemetry/resources';
4
4
  import { LoggerProvider } from '@opentelemetry/sdk-logs';
5
- export { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
6
- export { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
7
5
 
8
6
  declare class AsyncResourceDetector implements DetectorSync {
9
7
  private _promise;
@@ -10,8 +10,6 @@ var sdkLogs = require('@opentelemetry/sdk-logs');
10
10
  var sdkTraceNode = require('@opentelemetry/sdk-trace-node');
11
11
  var semanticConventions = require('@opentelemetry/semantic-conventions');
12
12
  var async_hooks = require('async_hooks');
13
- var instrumentationHttp = require('@opentelemetry/instrumentation-http');
14
- var instrumentationFetch = require('@opentelemetry/instrumentation-fetch');
15
13
 
16
14
  var __defProp = Object.defineProperty;
17
15
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -409,14 +407,6 @@ function recordSpanException(span, error) {
409
407
  }
410
408
  __name(recordSpanException, "recordSpanException");
411
409
 
412
- Object.defineProperty(exports, 'HttpInstrumentation', {
413
- enumerable: true,
414
- get: function () { return instrumentationHttp.HttpInstrumentation; }
415
- });
416
- Object.defineProperty(exports, 'FetchInstrumentation', {
417
- enumerable: true,
418
- get: function () { return instrumentationFetch.FetchInstrumentation; }
419
- });
420
410
  exports.TracingSDK = TracingSDK;
421
411
  exports.recordSpanException = recordSpanException;
422
412
  //# sourceMappingURL=out.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/v3/otel/index.ts","../../../src/v3/otel/tracingSDK.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","../../../src/v3/otel/instrumentations.ts"],"names":["SpanStatusCode","DiagConsoleLogger","DiagLogLevel","diag","logs","OTLPLogExporter","OTLPTraceExporter","registerInstrumentations","Resource","detectResourcesSync","processDetectorSync","LoggerProvider","SimpleLogRecordProcessor","NodeTracerProvider","SimpleSpanProcessor","SemanticResourceAttributes","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","STYLE","STYLE_ICON","STYLE_VARIANT","STYLE_ACCESSORY","METADATA","TRIGGER","PAYLOAD","SHOW_ACTIONS","WORKER_ID","WORKER_VERSION","CLI_VERSION","SDK_VERSION","SDK_LANGUAGE","RETRY_AT","RETRY_DELAY","RETRY_COUNT","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","payload","worker","attributes","contextAttributes","workerAttributes","payloadAttributes","SERVICE_NAME","task","id","version","attempt","number","filePath","exportName","queue","name","environment","type","organization","project","ref","isTest","slug","batch","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","register","instrumentations","tracerProvider","logExporter","loggerProvider","logRecordLimits","addLogRecordProcessor","_logProvider","_spanExporter","_traceProvider","setGlobalLoggerProvider","getLogger","bind","getTracer","flush","level","NONE","ERROR","WARN","INFO","DEBUG","VERBOSE","ALL","setLogger","HttpInstrumentation","FetchInstrumentation","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\";\nexport { HttpInstrumentation, FetchInstrumentation } from \"./instrumentations\";\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 { LoggerProvider, SimpleLogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport {\n NodeTracerProvider,\n SimpleSpanProcessor,\n SpanExporter,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\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: TracerProvider;\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: 1000,\n attributeValueLengthLimit: 1000,\n eventCountLimit: 100,\n attributePerEventCountLimit: 100,\n linkCountLimit: 10,\n attributePerLinkCountLimit: 100,\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(new SimpleSpanProcessor(spanExporter))\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: 1000,\n attributeValueLengthLimit: 1000,\n },\n });\n\n loggerProvider.addLogRecordProcessor(\n new TaskContextLogProcessor(new SimpleLogRecordProcessor(logExporter))\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._spanExporter.forceFlush?.();\n await this._logProvider.forceFlush();\n }\n\n public async shutdown() {\n await this._spanExporter.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","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 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 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};\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 (\n obj === null ||\n obj === undefined ||\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n Array.isArray(obj)\n ) {\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(\".\");\n let current = result;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n\n // Check if part is not undefined and it's a string.\n if (typeof part === \"string\") {\n const nextPart = parts[i + 1];\n const isArray = nextPart ? parseInt(nextPart, 10).toString() === nextPart : false;\n if (current[part] == null) {\n current[part] = isArray ? [] : {};\n }\n\n current = current[part] as Record<string, unknown>;\n }\n }\n // For the last element, we must ensure we also check if it is not undefined and it's a string.\n const lastPart = parts[parts.length - 1];\n if (typeof lastPart === \"string\") {\n current[lastPart] = value;\n }\n }\n\n return result;\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 payload: any;\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 payload(): any | undefined {\n const store = this.#getStore();\n return store?.payload;\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 ...this.payloadAttributes,\n [SemanticResourceAttributes.SERVICE_NAME]: this.ctx.task.id,\n };\n }\n\n return {};\n }\n\n get payloadAttributes(): Attributes {\n if (this.payload) {\n return flattenAttributes(this.payload, \"payload\");\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 };\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 { Span, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { LogRecord, LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\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","export { HttpInstrumentation } from \"@opentelemetry/instrumentation-http\";\nexport { FetchInstrumentation } from \"@opentelemetry/instrumentation-fetch\";\n"]}
1
+ {"version":3,"sources":["../../../src/v3/otel/index.ts","../../../src/v3/otel/tracingSDK.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","LoggerProvider","SimpleLogRecordProcessor","NodeTracerProvider","SimpleSpanProcessor","SemanticResourceAttributes","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","STYLE","STYLE_ICON","STYLE_VARIANT","STYLE_ACCESSORY","METADATA","TRIGGER","PAYLOAD","SHOW_ACTIONS","WORKER_ID","WORKER_VERSION","CLI_VERSION","SDK_VERSION","SDK_LANGUAGE","RETRY_AT","RETRY_DELAY","RETRY_COUNT","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","payload","worker","attributes","contextAttributes","workerAttributes","payloadAttributes","SERVICE_NAME","task","id","version","attempt","number","filePath","exportName","queue","name","environment","type","organization","project","ref","isTest","slug","batch","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","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,SAASC,gBAAgBC,gCAAgC;AACzD,SACEC,oBACAC,2BAEK;AACP,SAASC,8BAAAA,mCAAkC;;;ACvBpC,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,OAAO;EACPC,YAAY;EACZC,eAAe;EACfC,iBAAiB;EACjBC,UAAU;EACVC,SAAS;EACTC,SAAS;EACTC,cAAc;EACdC,WAAW;EACXC,gBAAgB;EAChBC,aAAa;EACbC,aAAa;EACbC,cAAc;EACdC,UAAU;EACVC,aAAa;EACbC,aAAa;AACf;;;ACrCO,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,IAAaG,CAAAA,EAAG,CAAA;QACvE,OAAO;AACLR,iBAAO,GAAGK,SAAAA,IAAaG,CAAAA,EAAG,IAAIN,MAAMM,CAAAA;QACtC;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;;;ACyGP,SAASxD,kCAAkC;AAzG3C;AASO,IAAMgE,sBAAN,MAAMA,oBAAAA;EAAN;AAwFL;AAvFQC,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,UAA2B;AAC7B,UAAMD,QAAQ,sBAAK,wBAAL;AACd,WAAOA,OAAOC;EAChB;EAEA,IAAIC,SAAiD;AACnD,UAAMF,QAAQ,sBAAK,wBAAL;AACd,WAAOA,OAAOE;EAChB;EAEA,IAAIC,aAAyB;AAC3B,QAAI,KAAKJ,KAAK;AACZ,aAAO;QACL,GAAG,KAAKK;QACR,GAAG,KAAKC;QACR,GAAG,KAAKC;QACR,CAAC3E,2BAA2B4E,YAAY,GAAG,KAAKR,IAAIS,KAAKC;MAC3D;IACF;AAEA,WAAO,CAAC;EACV;EAEA,IAAIH,oBAAgC;AAClC,QAAI,KAAKL,SAAS;AAChB,aAAO9B,kBAAkB,KAAK8B,SAAS,SAAA;IACzC;AAEA,WAAO,CAAC;EACV;EAEA,IAAII,mBAA+B;AACjC,QAAI,KAAKH,QAAQ;AACf,aAAO;QACL,CAACtE,2BAA2B+B,SAAS,GAAG,KAAKuC,OAAOO;QACpD,CAAC7E,2BAA2BgC,cAAc,GAAG,KAAKsC,OAAOQ;MAC3D;IACF;AAEA,WAAO,CAAC;EACV;EAEA,IAAIN,oBAAgC;AAClC,QAAI,KAAKL,KAAK;AACZ,aAAO;QACL,CAACnE,2BAA2BU,UAAU,GAAG,KAAKyD,IAAIY,QAAQF;QAC1D,CAAC7E,2BAA2BW,cAAc,GAAG,KAAKwD,IAAIY,QAAQC;QAC9D,CAAChF,2BAA2Be,SAAS,GAAG,KAAKoD,IAAIS,KAAKC;QACtD,CAAC7E,2BAA2BgB,SAAS,GAAG,KAAKmD,IAAIS,KAAKK;QACtD,CAACjF,2BAA2BiB,gBAAgB,GAAG,KAAKkD,IAAIS,KAAKM;QAC7D,CAAClF,2BAA2BkB,UAAU,GAAG,KAAKiD,IAAIgB,MAAMC;QACxD,CAACpF,2BAA2BmB,QAAQ,GAAG,KAAKgD,IAAIgB,MAAMN;QACtD,CAAC7E,2BAA2BC,cAAc,GAAG,KAAKkE,IAAIkB,YAAYR;QAClE,CAAC7E,2BAA2BE,gBAAgB,GAAG,KAAKiE,IAAIkB,YAAYC;QACpE,CAACtF,2BAA2BG,eAAe,GAAG,KAAKgE,IAAIoB,aAAaV;QACpE,CAAC7E,2BAA2BM,UAAU,GAAG,KAAK6D,IAAIqB,QAAQX;QAC1D,CAAC7E,2BAA2BO,WAAW,GAAG,KAAK4D,IAAIqB,QAAQC;QAC3D,CAACzF,2BAA2BQ,YAAY,GAAG,KAAK2D,IAAIqB,QAAQJ;QAC5D,CAACpF,2BAA2BY,MAAM,GAAG,KAAKuD,IAAIN,IAAIgB;QAClD,CAAC7E,2BAA2Ba,WAAW,GAAG,KAAKsD,IAAIN,IAAI6B;QACvD,CAAC1F,2BAA2BI,iBAAiB,GAAG,KAAK+D,IAAIoB,aAAaI;QACtE,CAAC3F,2BAA2BK,iBAAiB,GAAG,KAAK8D,IAAIoB,aAAaH;QACtE,CAACpF,2BAA2Bc,QAAQ,GAAG,KAAKqD,IAAIyB,OAAOf;MACzD;IACF;AAEA,WAAO,CAAC;EACV;EAEAnB,QACEC,SACAC,IACwB;AACxB,WAAO,KAAKI,SAASN,QAAQC,SAASC,EAAAA;EACxC;AAKF;AAHE;cAAS,kCAA4B;AACnC,SAAO,KAAKI,SAASF,SAAQ;AAC/B,GAFS;AAxFEC;AAAN,IAAMA,qBAAN;AA6FA,IAAM8B,qBAAqB,IAAI9B,mBAAAA;AAO/B,IAAM+B,4BAAN,MAAMA,0BAAAA;EAGXtC,YAAYuC,gBAA+B;AACzC,SAAKC,kBAAkBD;EACzB;;EAGAE,QAAQC,MAAYC,eAA8B;AAChD,QAAIN,mBAAmB1B,KAAK;AAC1B+B,WAAKE,cACH7D,kBACE;QACE,CAACvC,2BAA2BU,UAAU,GAAGmF,mBAAmB1B,IAAIY,QAAQF;QACxE,CAAC7E,2BAA2BW,cAAc,GAAGkF,mBAAmB1B,IAAIY,QAAQC;MAC9E,GACAhF,2BAA2B2B,QAAQ,CAAA;IAGzC;AAEA,SAAKqE,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;EAGXhD,YAAYuC,gBAAoC;AAC9C,SAAKC,kBAAkBD;EACzB;EACAQ,aAA4B;AAC1B,WAAO,KAAKP,gBAAgBO,WAAU;EACxC;EACAE,OAAOC,WAAsB/C,SAAqC;AAEhE,QAAIkC,mBAAmB1B,KAAK;AAC1BuC,gBAAUN,cACR7D,kBACE;QACE,CAACvC,2BAA2BU,UAAU,GAAGmF,mBAAmB1B,IAAIY,QAAQF;QACxE,CAAC7E,2BAA2BW,cAAc,GAAGkF,mBAAmB1B,IAAIY,QAAQC;MAC9E,GACAhF,2BAA2B2B,QAAQ,CAAA;IAGzC;AAEA,SAAKqE,gBAAgBS,OAAOC,WAAW/C,OAAAA;EACzC;EACA2C,WAA0B;AACxB,WAAO,KAAKN,gBAAgBM,SAAQ;EACtC;AACF;AA5BaE;AAAN,IAAMA,0BAAN;;;ACtJA,SAASG,UAAUvB,MAAkC;AAE1D,MAAI,OAAOwB,YAAY,eAAe,OAAOA,QAAQC,QAAQ,YAAYD,QAAQC,QAAQ,MAAM;AAC7F,WAAOD,QAAQC,IAAIzB,IAAAA;EACrB;AACF;AALgBuB;;;ALAhB;AA4BA,IAAMG,yBAAN,WAAMA;EAKJtD,cAAc;AAFNuD,qCAAqB;AAG3B,SAAKC,WAAW,IAAIC,QAAQ,CAACC,aAAa;AACxC,WAAKC,YAAYD;IACnB,CAAA;EACF;EAEAE,OAAOC,SAA6C;AAClD,WAAO,IAAI7H,SAAS,CAAC,GAAG,KAAKwH,QAAQ;EACvC;EAEAM,sBAAsB/C,YAAgC;AACpD,QAAI,CAAC,KAAK4C,WAAW;AACnB,YAAM,IAAII,MAAM,wBAAA;IAClB;AAEA,QAAI,KAAKR,WAAW;AAClB;IACF;AAEA,SAAKA,YAAY;AACjB,SAAKI,UAAU5C,UAAAA;EACjB;AACF,GA3BMuC,qCAAN;AA8CO,IAAMU,cAAN,MAAMA,YAAAA;EASXhE,YAA6BiE,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,kBAAkBxI,oBAAoB;MAC1CyI,WAAW;QAAC,KAAKR;QAAuBhI;;IAC1C,CAAA,EACGyI,MACC,IAAI3I,SAAS;MACX,CAACO,4BAA2BqI,cAAc,GAAG;MAC7C,CAACpI,2BAA2B4B,OAAO,GAAG;IACxC,CAAA,CAAA,EAEDuG,MAAMV,OAAOY,YAAY,IAAI7I,SAAS,CAAC,CAAA,CAAA,EACvC2I,MAAM,IAAI3I,SAASsI,qBAAAA,CAAAA;AAEtB,UAAMQ,gBAAgB,IAAIzI,mBAAmB;MAC3C0I,yBAAyBd,OAAOc,2BAA2B;MAC3DF,UAAUJ;MACVO,YAAY;QACVC,qBAAqB;QACrBC,2BAA2B;QAC3BC,iBAAiB;QACjBC,6BAA6B;QAC7BC,gBAAgB;QAChBC,4BAA4B;MAC9B;IACF,CAAA;AAEA,UAAMC,eAAe,IAAIzJ,kBAAkB;MACzC0J,KAAK,GAAGvB,OAAOuB,GAAG;MAClBC,eAAexB,OAAOc,2BAA2B;IACnD,CAAA;AAEAD,kBAAcY,iBACZ,IAAIpD,yBAAyB,IAAIhG,oBAAoBiJ,YAAAA,CAAAA,CAAAA;AAEvDT,kBAAca,SAAQ;AAEtB5J,6BAAyB;MACvB6J,kBAAkB3B,OAAO2B,oBAAoB,CAAA;MAC7CC,gBAAgBf;IAClB,CAAA;AAEA,UAAMgB,cAAc,IAAIjK,gBAAgB;MACtC2J,KAAK,GAAGvB,OAAOuB,GAAG;IACpB,CAAA;AAGA,UAAMO,iBAAiB,IAAI5J,eAAe;MACxC0I,UAAUJ;MACVuB,iBAAiB;QACff,qBAAqB;QACrBC,2BAA2B;MAC7B;IACF,CAAA;AAEAa,mBAAeE,sBACb,IAAIjD,wBAAwB,IAAI5G,yBAAyB0J,WAAAA,CAAAA,CAAAA;AAG3D,SAAKI,eAAeH;AACpB,SAAKI,gBAAgBZ;AACrB,SAAKa,iBAAiBtB;AAEtBlJ,SAAKyK,wBAAwBN,cAAAA;AAE7B,SAAKO,YAAYP,eAAeO,UAAUC,KAAKR,cAAAA;AAC/C,SAAKS,YAAY1B,cAAc0B,UAAUD,KAAKzB,aAAAA;EAChD;EAEA,MAAa2B,QAAQ;AACnB,UAAM,KAAKN,cAAcpD,aAAU;AACnC,UAAM,KAAKmD,aAAanD,WAAU;EACpC;EAEA,MAAaD,WAAW;AACtB,UAAM,KAAKqD,cAAcrD,SAAQ;AACjC,UAAM,KAAKoD,aAAapD,SAAQ;EAClC;AACF;AA7FakB;AAAN,IAAMA,aAAN;AA+FP,SAASG,YAAYuC,OAAkC;AACrD,MAAItC;AAEJ,UAAQsC,OAAAA;IACN,KAAK;AACHtC,qBAAe1I,aAAaiL;AAC5B;IACF,KAAK;AACHvC,qBAAe1I,aAAakL;AAC5B;IACF,KAAK;AACHxC,qBAAe1I,aAAamL;AAC5B;IACF,KAAK;AACHzC,qBAAe1I,aAAaoL;AAC5B;IACF,KAAK;AACH1C,qBAAe1I,aAAaqL;AAC5B;IACF,KAAK;AACH3C,qBAAe1I,aAAasL;AAC5B;IACF,KAAK;AACH5C,qBAAe1I,aAAauL;AAC5B;IACF;AACE7C,qBAAe1I,aAAaiL;EAChC;AAEAhL,OAAKuL,UAAU,IAAIzL,kBAAAA,GAAqB2I,YAAAA;AAC1C;AA9BSD;;;ADrKF,SAASgD,oBAAoBzE,MAAY0E,OAAgB;AAC9D,MAAIA,iBAAiBrD,OAAO;AAC1BrB,SAAK2E,gBAAgBD,KAAAA;EACvB,WAAW,OAAOA,UAAU,UAAU;AACpC1E,SAAK2E,gBAAgB,IAAItD,MAAMqD,KAAAA,CAAAA;EACjC,OAAO;AACL1E,SAAK2E,gBAAgB,IAAItD,MAAMQ,KAAK+C,UAAUF,KAAAA,CAAAA,CAAAA;EAChD;AAEA1E,OAAK6E,UAAU;IAAEC,MAAMhM,eAAeoL;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 { LoggerProvider, SimpleLogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport {\n NodeTracerProvider,\n SimpleSpanProcessor,\n SpanExporter,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\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: TracerProvider;\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: 1000,\n attributeValueLengthLimit: 1000,\n eventCountLimit: 100,\n attributePerEventCountLimit: 100,\n linkCountLimit: 10,\n attributePerLinkCountLimit: 100,\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(new SimpleSpanProcessor(spanExporter))\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: 1000,\n attributeValueLengthLimit: 1000,\n },\n });\n\n loggerProvider.addLogRecordProcessor(\n new TaskContextLogProcessor(new SimpleLogRecordProcessor(logExporter))\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._spanExporter.forceFlush?.();\n await this._logProvider.forceFlush();\n }\n\n public async shutdown() {\n await this._spanExporter.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","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 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 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};\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 (\n obj === null ||\n obj === undefined ||\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n Array.isArray(obj)\n ) {\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(\".\");\n let current = result;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n\n // Check if part is not undefined and it's a string.\n if (typeof part === \"string\") {\n const nextPart = parts[i + 1];\n const isArray = nextPart ? parseInt(nextPart, 10).toString() === nextPart : false;\n if (current[part] == null) {\n current[part] = isArray ? [] : {};\n }\n\n current = current[part] as Record<string, unknown>;\n }\n }\n // For the last element, we must ensure we also check if it is not undefined and it's a string.\n const lastPart = parts[parts.length - 1];\n if (typeof lastPart === \"string\") {\n current[lastPart] = value;\n }\n }\n\n return result;\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 payload: any;\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 payload(): any | undefined {\n const store = this.#getStore();\n return store?.payload;\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 ...this.payloadAttributes,\n [SemanticResourceAttributes.SERVICE_NAME]: this.ctx.task.id,\n };\n }\n\n return {};\n }\n\n get payloadAttributes(): Attributes {\n if (this.payload) {\n return flattenAttributes(this.payload, \"payload\");\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 };\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 { Span, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { LogRecord, LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\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"]}
@@ -8,8 +8,6 @@ import { LoggerProvider, SimpleLogRecordProcessor } from '@opentelemetry/sdk-log
8
8
  import { NodeTracerProvider, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';
9
9
  import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
10
10
  import { AsyncLocalStorage } from 'node:async_hooks';
11
- export { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
12
- export { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
13
11
 
14
12
  var __defProp = Object.defineProperty;
15
13
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/v3/otel/index.ts","../../../src/v3/otel/tracingSDK.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","../../../src/v3/otel/instrumentations.ts"],"names":["SpanStatusCode","DiagConsoleLogger","DiagLogLevel","diag","logs","OTLPLogExporter","OTLPTraceExporter","registerInstrumentations","Resource","detectResourcesSync","processDetectorSync","LoggerProvider","SimpleLogRecordProcessor","NodeTracerProvider","SimpleSpanProcessor","SemanticResourceAttributes","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","STYLE","STYLE_ICON","STYLE_VARIANT","STYLE_ACCESSORY","METADATA","TRIGGER","PAYLOAD","SHOW_ACTIONS","WORKER_ID","WORKER_VERSION","CLI_VERSION","SDK_VERSION","SDK_LANGUAGE","RETRY_AT","RETRY_DELAY","RETRY_COUNT","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","payload","worker","attributes","contextAttributes","workerAttributes","payloadAttributes","SERVICE_NAME","task","id","version","attempt","number","filePath","exportName","queue","name","environment","type","organization","project","ref","isTest","slug","batch","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","register","instrumentations","tracerProvider","logExporter","loggerProvider","logRecordLimits","addLogRecordProcessor","_logProvider","_spanExporter","_traceProvider","setGlobalLoggerProvider","getLogger","bind","getTracer","flush","level","NONE","ERROR","WARN","INFO","DEBUG","VERBOSE","ALL","setLogger","HttpInstrumentation","FetchInstrumentation","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\";\nexport { HttpInstrumentation, FetchInstrumentation } from \"./instrumentations\";\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 { LoggerProvider, SimpleLogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport {\n NodeTracerProvider,\n SimpleSpanProcessor,\n SpanExporter,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\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: TracerProvider;\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: 1000,\n attributeValueLengthLimit: 1000,\n eventCountLimit: 100,\n attributePerEventCountLimit: 100,\n linkCountLimit: 10,\n attributePerLinkCountLimit: 100,\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(new SimpleSpanProcessor(spanExporter))\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: 1000,\n attributeValueLengthLimit: 1000,\n },\n });\n\n loggerProvider.addLogRecordProcessor(\n new TaskContextLogProcessor(new SimpleLogRecordProcessor(logExporter))\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._spanExporter.forceFlush?.();\n await this._logProvider.forceFlush();\n }\n\n public async shutdown() {\n await this._spanExporter.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","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 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 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};\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 (\n obj === null ||\n obj === undefined ||\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n Array.isArray(obj)\n ) {\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(\".\");\n let current = result;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n\n // Check if part is not undefined and it's a string.\n if (typeof part === \"string\") {\n const nextPart = parts[i + 1];\n const isArray = nextPart ? parseInt(nextPart, 10).toString() === nextPart : false;\n if (current[part] == null) {\n current[part] = isArray ? [] : {};\n }\n\n current = current[part] as Record<string, unknown>;\n }\n }\n // For the last element, we must ensure we also check if it is not undefined and it's a string.\n const lastPart = parts[parts.length - 1];\n if (typeof lastPart === \"string\") {\n current[lastPart] = value;\n }\n }\n\n return result;\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 payload: any;\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 payload(): any | undefined {\n const store = this.#getStore();\n return store?.payload;\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 ...this.payloadAttributes,\n [SemanticResourceAttributes.SERVICE_NAME]: this.ctx.task.id,\n };\n }\n\n return {};\n }\n\n get payloadAttributes(): Attributes {\n if (this.payload) {\n return flattenAttributes(this.payload, \"payload\");\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 };\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 { Span, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { LogRecord, LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\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","export { HttpInstrumentation } from \"@opentelemetry/instrumentation-http\";\nexport { FetchInstrumentation } from \"@opentelemetry/instrumentation-fetch\";\n"]}
1
+ {"version":3,"sources":["../../../src/v3/otel/index.ts","../../../src/v3/otel/tracingSDK.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","LoggerProvider","SimpleLogRecordProcessor","NodeTracerProvider","SimpleSpanProcessor","SemanticResourceAttributes","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","STYLE","STYLE_ICON","STYLE_VARIANT","STYLE_ACCESSORY","METADATA","TRIGGER","PAYLOAD","SHOW_ACTIONS","WORKER_ID","WORKER_VERSION","CLI_VERSION","SDK_VERSION","SDK_LANGUAGE","RETRY_AT","RETRY_DELAY","RETRY_COUNT","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","payload","worker","attributes","contextAttributes","workerAttributes","payloadAttributes","SERVICE_NAME","task","id","version","attempt","number","filePath","exportName","queue","name","environment","type","organization","project","ref","isTest","slug","batch","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","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 { LoggerProvider, SimpleLogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport {\n NodeTracerProvider,\n SimpleSpanProcessor,\n SpanExporter,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\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: TracerProvider;\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: 1000,\n attributeValueLengthLimit: 1000,\n eventCountLimit: 100,\n attributePerEventCountLimit: 100,\n linkCountLimit: 10,\n attributePerLinkCountLimit: 100,\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(new SimpleSpanProcessor(spanExporter))\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: 1000,\n attributeValueLengthLimit: 1000,\n },\n });\n\n loggerProvider.addLogRecordProcessor(\n new TaskContextLogProcessor(new SimpleLogRecordProcessor(logExporter))\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._spanExporter.forceFlush?.();\n await this._logProvider.forceFlush();\n }\n\n public async shutdown() {\n await this._spanExporter.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","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 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 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};\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 (\n obj === null ||\n obj === undefined ||\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n Array.isArray(obj)\n ) {\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(\".\");\n let current = result;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n\n // Check if part is not undefined and it's a string.\n if (typeof part === \"string\") {\n const nextPart = parts[i + 1];\n const isArray = nextPart ? parseInt(nextPart, 10).toString() === nextPart : false;\n if (current[part] == null) {\n current[part] = isArray ? [] : {};\n }\n\n current = current[part] as Record<string, unknown>;\n }\n }\n // For the last element, we must ensure we also check if it is not undefined and it's a string.\n const lastPart = parts[parts.length - 1];\n if (typeof lastPart === \"string\") {\n current[lastPart] = value;\n }\n }\n\n return result;\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 payload: any;\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 payload(): any | undefined {\n const store = this.#getStore();\n return store?.payload;\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 ...this.payloadAttributes,\n [SemanticResourceAttributes.SERVICE_NAME]: this.ctx.task.id,\n };\n }\n\n return {};\n }\n\n get payloadAttributes(): Attributes {\n if (this.payload) {\n return flattenAttributes(this.payload, \"payload\");\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 };\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 { Span, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { SemanticResourceAttributes } from \"@opentelemetry/semantic-conventions\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { LogRecord, LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trigger.dev/core",
3
- "version": "0.0.0-v3-canary-20240322220011",
3
+ "version": "0.0.0-v3-canary-20240324201508",
4
4
  "description": "Core code used across the Trigger.dev SDK and platform",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -52,21 +52,17 @@
52
52
  "sideEffects": false,
53
53
  "dependencies": {
54
54
  "@google-cloud/precise-date": "^4.0.0",
55
- "@opentelemetry/api": "^1.7.0",
55
+ "@opentelemetry/api": "^1.8.0",
56
56
  "@opentelemetry/api-logs": "^0.48.0",
57
- "@opentelemetry/auto-instrumentations-node": "^0.40.3",
58
- "@opentelemetry/exporter-collector": "^0.25.0",
59
- "@opentelemetry/exporter-logs-otlp-http": "^0.48.0",
60
- "@opentelemetry/exporter-trace-otlp-http": "^0.48.0",
61
- "@opentelemetry/instrumentation": "^0.48.0",
62
- "@opentelemetry/instrumentation-fetch": "^0.48.0",
63
- "@opentelemetry/instrumentation-http": "^0.48.0",
64
- "@opentelemetry/resources": "^1.21.0",
65
- "@opentelemetry/sdk-logs": "^0.48.0",
66
- "@opentelemetry/sdk-node": "^0.48.0",
67
- "@opentelemetry/sdk-trace-base": "^1.21.0",
68
- "@opentelemetry/sdk-trace-node": "^1.21.0",
69
- "@opentelemetry/semantic-conventions": "^1.21.0",
57
+ "@opentelemetry/exporter-logs-otlp-http": "^0.49.1",
58
+ "@opentelemetry/exporter-trace-otlp-http": "^0.49.1",
59
+ "@opentelemetry/instrumentation": "^0.49.1",
60
+ "@opentelemetry/resources": "^1.22.0",
61
+ "@opentelemetry/sdk-logs": "^0.49.1",
62
+ "@opentelemetry/sdk-node": "^0.49.1",
63
+ "@opentelemetry/sdk-trace-base": "^1.22.0",
64
+ "@opentelemetry/sdk-trace-node": "^1.22.0",
65
+ "@opentelemetry/semantic-conventions": "^1.22.0",
70
66
  "humanize-duration": "^3.27.3",
71
67
  "socket.io": "^4.7.4",
72
68
  "socket.io-client": "^4.7.4",