autotel-cloudflare 2.12.0 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actors.js +1 -1
- package/dist/bindings.d.ts +113 -1
- package/dist/bindings.js +2 -2
- package/dist/chunk-4UG2QCPQ.js +1060 -0
- package/dist/chunk-4UG2QCPQ.js.map +1 -0
- package/dist/{chunk-5NL62W4L.js → chunk-O4IYKWPJ.js} +8 -3
- package/dist/chunk-O4IYKWPJ.js.map +1 -0
- package/dist/{chunk-ADWSZ5GY.js → chunk-WDNZVVRW.js} +8 -9
- package/dist/chunk-WDNZVVRW.js.map +1 -0
- package/dist/handlers.d.ts +5 -14
- package/dist/handlers.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +34 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/bindings/ai.test.ts +156 -0
- package/src/bindings/ai.ts +71 -0
- package/src/bindings/analytics-engine.test.ts +160 -0
- package/src/bindings/analytics-engine.ts +78 -0
- package/src/bindings/bindings-detection.test.ts +235 -0
- package/src/bindings/bindings.ts +98 -47
- package/src/bindings/browser-rendering.test.ts +144 -0
- package/src/bindings/browser-rendering.ts +70 -0
- package/src/bindings/common.ts +9 -0
- package/src/bindings/hyperdrive.test.ts +154 -0
- package/src/bindings/hyperdrive.ts +74 -0
- package/src/bindings/images.test.ts +229 -0
- package/src/bindings/images.ts +182 -0
- package/src/bindings/index.ts +8 -0
- package/src/bindings/queue-producer.test.ts +192 -0
- package/src/bindings/queue-producer.ts +105 -0
- package/src/bindings/rate-limiter.test.ts +124 -0
- package/src/bindings/rate-limiter.ts +69 -0
- package/src/bindings/vectorize.test.ts +340 -0
- package/src/bindings/vectorize.ts +86 -0
- package/src/handlers/workflows.test.ts +325 -0
- package/src/handlers/workflows.ts +51 -41
- package/src/index.ts +8 -0
- package/src/wrappers/cf-attributes.test.ts +275 -0
- package/src/wrappers/instrument.ts +38 -0
- package/dist/chunk-5NL62W4L.js.map +0 -1
- package/dist/chunk-ADWSZ5GY.js.map +0 -1
- package/dist/chunk-UPQE3J4I.js +0 -520
- package/dist/chunk-UPQE3J4I.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bindings/ai.ts","../src/bindings/vectorize.ts","../src/bindings/hyperdrive.ts","../src/bindings/queue-producer.ts","../src/bindings/analytics-engine.ts","../src/bindings/images.ts","../src/bindings/bindings.ts","../src/bindings/rate-limiter.ts","../src/bindings/browser-rendering.ts"],"names":["trace","SpanKind","SpanStatusCode","target","prop","value","fnTarget","thisArg","args"],"mappings":"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","file":"chunk-4UG2QCPQ.js","sourcesContent":["/**\n * Workers AI binding instrumentation\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap, setAttr } from './common';\n\n/**\n * Instrument Workers AI binding\n */\nexport function instrumentAI<T extends Ai>(ai: T, bindingName?: string): T {\n const name = bindingName || 'ai';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'run' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [model] = args as [string, unknown, unknown];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `AI ${name}: run ${model}`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'gen_ai.system': 'cloudflare-workers-ai',\n 'gen_ai.operation.name': 'run',\n 'gen_ai.request.model': model,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n if (result?.usage?.prompt_tokens !== undefined) {\n setAttr(span, 'gen_ai.usage.input_tokens', Number(result.usage.prompt_tokens));\n }\n if (result?.usage?.completion_tokens !== undefined) {\n setAttr(span, 'gen_ai.usage.output_tokens', Number(result.usage.completion_tokens));\n }\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(ai, handler);\n}\n","/**\n * Vectorize binding instrumentation\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap, setAttr } from './common';\n\nconst TRACED_METHODS = ['query', 'insert', 'upsert', 'deleteByIds', 'getByIds', 'describe'] as const;\n\n/**\n * Instrument Vectorize index binding\n */\nexport function instrumentVectorize<T extends VectorizeIndex>(vectorize: T, indexName?: string): T {\n const name = indexName || 'vectorize';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (typeof prop === 'string' && TRACED_METHODS.includes(prop as any) && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const operation = prop as string;\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n const attributes: Record<string, string | number> = {\n 'db.system': 'cloudflare-vectorize',\n 'db.operation': operation,\n 'db.collection.name': name,\n };\n\n // Per-operation attributes\n if (operation === 'query') {\n const queryInput = args[0] as { topK?: number } | undefined;\n if (queryInput?.topK !== undefined) {\n attributes['db.vectorize.top_k'] = queryInput.topK;\n }\n }\n\n if ((operation === 'insert' || operation === 'upsert') && Array.isArray(args[0])) {\n attributes['db.vectorize.vectors_count'] = args[0].length;\n }\n\n return tracer.startActiveSpan(\n `Vectorize ${name}: ${operation}`,\n {\n kind: SpanKind.CLIENT,\n attributes,\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n\n if (operation === 'query' && result?.matches) {\n setAttr(span, 'db.vectorize.matches_count', result.matches.length);\n }\n\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(vectorize, handler);\n}\n","/**\n * Hyperdrive binding instrumentation\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap, setAttr } from './common';\n\n/**\n * Instrument Hyperdrive binding\n */\nexport function instrumentHyperdrive<T extends Hyperdrive>(hyperdrive: T, bindingName?: string): T {\n const name = bindingName || 'hyperdrive';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'connect' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n const attributes: Record<string, string | number> = {\n 'db.system': 'cloudflare-hyperdrive',\n 'db.operation': 'connect',\n };\n\n // Extract connection info safely (never record password)\n try {\n setAttr({ setAttribute: (k: string, v: any) => { if (v !== undefined && v !== null) attributes[k] = v; } }, 'server.address', target.host);\n setAttr({ setAttribute: (k: string, v: any) => { if (v !== undefined && v !== null) attributes[k] = v; } }, 'server.port', target.port);\n setAttr({ setAttribute: (k: string, v: any) => { if (v !== undefined && v !== null) attributes[k] = v; } }, 'db.user', target.user);\n } catch {\n // Properties may not be accessible in all environments\n }\n\n return tracer.startActiveSpan(\n `Hyperdrive ${name}: connect`,\n {\n kind: SpanKind.CLIENT,\n attributes,\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(hyperdrive, handler);\n}\n","/**\n * Queue producer binding instrumentation\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap, setAttr } from './common';\n\n/**\n * Instrument Queue producer binding\n */\nexport function instrumentQueueProducer<T extends Queue>(queue: T, queueName?: string): T {\n const name = queueName || 'queue';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'send' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `Queue ${name}: send`,\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n 'messaging.system': 'cloudflare-queues',\n 'messaging.operation.type': 'publish',\n 'messaging.operation': 'send',\n 'messaging.destination.name': name,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n setAttr(span, 'messaging.message.id', (result as any)?.messageId);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n if (prop === 'sendBatch' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [messages] = args as [{ body: unknown }[]];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `Queue ${name}: sendBatch`,\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n 'messaging.system': 'cloudflare-queues',\n 'messaging.operation.type': 'publish',\n 'messaging.operation': 'sendBatch',\n 'messaging.destination.name': name,\n 'messaging.batch.message_count': Array.isArray(messages) ? messages.length : 0,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(queue, handler);\n}\n","/**\n * Analytics Engine binding instrumentation\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap } from './common';\n\n/**\n * Instrument Analytics Engine binding\n */\nexport function instrumentAnalyticsEngine<T extends AnalyticsEngineDataset>(ae: T, datasetName?: string): T {\n const name = datasetName || 'analytics-engine';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'writeDataPoint' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [dataPoint] = args as [AnalyticsEngineDataPoint | undefined];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n const attributes: Record<string, string | number> = {\n 'analytics.system': 'cloudflare-analytics-engine',\n 'analytics.operation': 'writeDataPoint',\n };\n\n if (dataPoint) {\n if (dataPoint.indexes) {\n attributes['analytics.indexes_count'] = Array.isArray(dataPoint.indexes) ? dataPoint.indexes.length : 1;\n }\n if (dataPoint.doubles) {\n attributes['analytics.doubles_count'] = dataPoint.doubles.length;\n }\n if (dataPoint.blobs) {\n attributes['analytics.blobs_count'] = dataPoint.blobs.length;\n }\n }\n\n return tracer.startActiveSpan(\n `AnalyticsEngine ${name}: writeDataPoint`,\n {\n kind: SpanKind.CLIENT,\n attributes,\n },\n (span) => {\n try {\n // writeDataPoint is synchronous/void\n Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(ae, handler);\n}\n","/**\n * Images binding instrumentation\n *\n * The Images binding uses a fluent chain: input() -> transform() -> draw() -> output()\n * We only create a span at the terminal output() call to avoid intermediate noise.\n * info() is a standalone operation and gets its own span.\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap, setAttr } from './common';\n\nconst pipelineMetaSymbol = Symbol('images-pipeline-meta');\n\ninterface PipelineMeta {\n operationCount: number;\n}\n\ninterface ImagesLike {\n info(blob: ReadableStream | ArrayBuffer | Blob): Promise<{ width: number; height: number; format: string }>;\n input(blob: ReadableStream | ArrayBuffer | Blob): ImageTransformerLike;\n}\n\ninterface ImageTransformerLike {\n transform(options: unknown): ImageTransformerLike;\n draw(image: unknown, options?: unknown): ImageTransformerLike;\n output(options?: unknown): Promise<ImageOutputLike>;\n}\n\ninterface ImageOutputLike {\n response(): Response;\n blob(): Promise<Blob>;\n arrayBuffer(): Promise<ArrayBuffer>;\n}\n\nfunction proxyTransformer(transformer: ImageTransformerLike, meta: PipelineMeta, bindingName: string): ImageTransformerLike {\n const handler: ProxyHandler<ImageTransformerLike> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if ((prop === 'transform' || prop === 'draw') && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, _thisArg, args) => {\n meta.operationCount++;\n const result = Reflect.apply(fnTarget, target, args);\n // If the result is the transformer itself (fluent chain), return our proxy\n if (result === target || (result && typeof result === 'object' && 'output' in result)) {\n return proxyTransformer(result as ImageTransformerLike, meta, bindingName);\n }\n return result;\n },\n });\n }\n\n if (prop === 'output' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, _thisArg, args) => {\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n const [formatOrOptions] = args;\n\n const attributes: Record<string, string | number> = {\n 'images.system': 'cloudflare-images',\n 'images.pipeline.operation_count': meta.operationCount,\n };\n\n // Capture output format\n if (typeof formatOrOptions === 'string') {\n attributes['images.output.format'] = formatOrOptions;\n } else if (formatOrOptions && typeof formatOrOptions === 'object') {\n const fmt = (formatOrOptions as any).format;\n if (fmt) attributes['images.output.format'] = fmt;\n }\n\n return tracer.startActiveSpan(\n `Images ${bindingName}: output`,\n {\n kind: SpanKind.CLIENT,\n attributes,\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, target, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n const proxy = new Proxy(transformer, handler);\n Object.defineProperty(proxy, pipelineMetaSymbol, {\n value: meta,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n return proxy;\n}\n\n/**\n * Instrument Images binding\n */\nexport function instrumentImages<T extends ImagesLike>(images: T, bindingName?: string): T {\n const name = bindingName || 'images';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'info' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `Images ${name}: info`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'images.system': 'cloudflare-images',\n 'images.operation': 'info',\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n setAttr(span, 'images.width', result?.width);\n setAttr(span, 'images.height', result?.height);\n setAttr(span, 'images.format', result?.format);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n if (prop === 'input' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const transformer = Reflect.apply(fnTarget, thisArg, args) as ImageTransformerLike;\n const meta: PipelineMeta = { operationCount: 0 };\n return proxyTransformer(transformer, meta, name);\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(images, handler);\n}\n","/**\n * Auto-instrumentation for Cloudflare Workers bindings\n * \n * Note: This file uses Cloudflare Workers types (KVNamespace, R2Bucket, D1Database, Fetcher, etc.)\n * which are globally available via @cloudflare/workers-types when listed in tsconfig.json.\n * These types are devDependencies only - they're not runtime dependencies.\n * At runtime, Cloudflare Workers runtime provides the actual implementations.\n * \n * This module provides automatic tracing for Cloudflare bindings:\n * - KV (key-value operations)\n * - R2 (object storage operations)\n * - D1 (database operations)\n * - Service Bindings\n * - Events Engine\n * - Workers AI\n * - Vectorize\n * - Hyperdrive\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport { WorkerTracer } from 'autotel-edge';\nimport { wrap, isWrapped } from './common';\nimport { instrumentAI } from './ai';\nimport { instrumentVectorize } from './vectorize';\nimport { instrumentHyperdrive } from './hyperdrive';\nimport { instrumentQueueProducer } from './queue-producer';\nimport { instrumentAnalyticsEngine } from './analytics-engine';\nimport { instrumentImages } from './images';\n\n/**\n * Instrument KV namespace\n */\nexport function instrumentKV<K extends KVNamespace>(kv: K, namespaceName?: string): K {\n const name = namespaceName || 'kv';\n \n const kvHandler: ProxyHandler<K> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n \n if (prop === 'get' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [key, options] = args as [string, KVNamespaceGetOptions<unknown> | undefined];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `KV ${name}: get`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-kv',\n 'db.operation': 'get',\n 'db.namespace': name,\n 'db.key': key,\n 'db.cache_hit': options?.cacheTtl !== undefined,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setAttribute('db.result.type', result === null ? 'null' : typeof result);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n if (prop === 'put' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [key] = args as [string, unknown, KVNamespacePutOptions | undefined];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `KV ${name}: put`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-kv',\n 'db.operation': 'put',\n 'db.namespace': name,\n 'db.key': key,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n if (prop === 'delete' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [key] = args as [string];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `KV ${name}: delete`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-kv',\n 'db.operation': 'delete',\n 'db.namespace': name,\n 'db.key': key,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n if (prop === 'list' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [options] = args as [KVNamespaceListOptions | undefined];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `KV ${name}: list`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-kv',\n 'db.operation': 'list',\n 'db.namespace': name,\n 'db.prefix': options?.prefix || undefined,\n 'db.limit': options?.limit || undefined,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setAttribute('db.result.keys_count', result.keys.length);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n return value;\n },\n };\n \n return wrap(kv, kvHandler);\n}\n\n/**\n * Instrument R2 bucket\n */\nexport function instrumentR2<R extends R2Bucket>(r2: R, bucketName?: string): R {\n const name = bucketName || 'r2';\n \n const r2Handler: ProxyHandler<R> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n \n if (prop === 'get' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [key] = args as [string, R2GetOptions | undefined];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `R2 ${name}: get`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-r2',\n 'db.operation': 'get',\n 'db.bucket': name,\n 'db.key': key,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n if (result) {\n span.setAttribute('db.result.size', result.size);\n span.setAttribute('db.result.etag', result.etag);\n span.setAttribute('db.result.content_type', result.httpMetadata?.contentType);\n } else {\n span.setAttribute('db.result.exists', false);\n }\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n if (prop === 'put' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [key] = args as [string, ReadableStream | ArrayBuffer | ArrayBufferView | string | null | Blob, R2PutOptions | undefined];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `R2 ${name}: put`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-r2',\n 'db.operation': 'put',\n 'db.bucket': name,\n 'db.key': key,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setAttribute('db.result.etag', result.etag);\n span.setAttribute('db.result.uploaded', result.uploaded);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n if (prop === 'delete' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const keys = args as string[];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `R2 ${name}: delete`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-r2',\n 'db.operation': 'delete',\n 'db.bucket': name,\n 'db.keys_count': keys.length,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n if (prop === 'list' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [options] = args as [R2ListOptions | undefined];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `R2 ${name}: list`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-r2',\n 'db.operation': 'list',\n 'db.bucket': name,\n 'db.prefix': options?.prefix || undefined,\n 'db.limit': options?.limit || undefined,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setAttribute('db.result.objects_count', result.objects.length);\n span.setAttribute('db.result.truncated', result.truncated);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n return value;\n },\n };\n \n return wrap(r2, r2Handler);\n}\n\n/**\n * Instrument D1 database\n */\nexport function instrumentD1<D extends D1Database>(d1: D, databaseName?: string): D {\n const name = databaseName || 'd1';\n \n const d1Handler: ProxyHandler<D> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n \n if (prop === 'prepare' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [query] = args as [string];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n const prepared = Reflect.apply(fnTarget, thisArg, args);\n \n // Instrument the prepared statement\n const preparedHandler: ProxyHandler<typeof prepared> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n \n if (prop === 'first' || prop === 'run' || prop === 'all' || prop === 'raw') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n return tracer.startActiveSpan(\n `D1 ${name}: ${prop}`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-d1',\n 'db.operation': prop,\n 'db.name': name,\n 'db.statement': query,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n if (prop === 'all' && Array.isArray(result)) {\n span.setAttribute('db.result.rows_count', result.length);\n } else if (prop === 'first' && result) {\n span.setAttribute('db.result.exists', true);\n }\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n return value;\n },\n };\n \n return wrap(prepared, preparedHandler);\n },\n });\n }\n \n if (prop === 'exec' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [query] = args as [string];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `D1 ${name}: exec`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'db.system': 'cloudflare-d1',\n 'db.operation': 'exec',\n 'db.name': name,\n 'db.statement': query,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setAttribute('db.result.count', result.count);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n return value;\n },\n };\n \n return wrap(d1, d1Handler);\n}\n\n/**\n * Instrument service binding (Fetcher)\n */\nexport function instrumentServiceBinding<F extends Fetcher>(fetcher: F, serviceName?: string): F {\n const name = serviceName || 'service';\n \n const fetcherHandler: ProxyHandler<F> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n \n if (prop === 'fetch' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [input, init] = args as [RequestInfo | URL, RequestInit | undefined];\n const request = new Request(input, init);\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n \n return tracer.startActiveSpan(\n `Service ${name}: ${request.method}`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'rpc.system': 'cloudflare-service-binding',\n 'rpc.service': name,\n 'http.request.method': request.method,\n 'url.full': request.url,\n },\n },\n async (span) => {\n try {\n const response = await Reflect.apply(fnTarget, thisArg, args);\n span.setAttribute('http.response.status_code', response.status);\n span.setStatus({ code: SpanStatusCode.OK });\n return response;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n \n return value;\n },\n };\n \n return wrap(fetcher, fetcherHandler);\n}\n\n/**\n * Detection helpers\n */\nconst hasMethod = (obj: any, m: string): boolean =>\n typeof obj?.[m] === 'function';\n\nconst hasExactMethods = (obj: any, methods: string[]): boolean =>\n methods.every(m => hasMethod(obj, m));\n\n/**\n * Auto-instrument all Cloudflare bindings in the environment\n *\n * Detection order (most specific first):\n * 1. R2 — get, put, delete, list, head\n * 2. KV — get, put, delete, list (not head)\n * 3. D1 — prepare, exec\n * 4. Vectorize — query, insert, upsert, describe\n * 5. AI — run + (gateway or models discriminator)\n * 6. Hyperdrive — connect + connectionString + host\n * 7. Queue Producer — send, sendBatch (not get)\n * 8. Analytics Engine — writeDataPoint\n * 9. Images — info, input\n * 10. Service Binding — fetch (broadest, must be last)\n *\n * Not auto-detected (manual only):\n * - Rate Limiter — limit() alone too generic\n * - Browser Rendering — indistinguishable from Service Binding\n */\nexport function instrumentBindings(env: Record<string, any>): Record<string, any> {\n const instrumented: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(env)) {\n if (!value || typeof value !== 'object') {\n instrumented[key] = value;\n continue;\n }\n\n // Skip already-instrumented bindings\n if (isWrapped(value)) {\n instrumented[key] = value;\n continue;\n }\n\n // 1. R2 — most specific (has head)\n if (hasExactMethods(value, ['get', 'put', 'delete', 'list', 'head'])) {\n instrumented[key] = instrumentR2(value as R2Bucket, key);\n continue;\n }\n\n // 2. KV — like R2 but without head\n if (hasExactMethods(value, ['get', 'put', 'delete', 'list']) && !('head' in value)) {\n instrumented[key] = instrumentKV(value as KVNamespace, key);\n continue;\n }\n\n // 3. D1\n if (hasExactMethods(value, ['prepare', 'exec'])) {\n instrumented[key] = instrumentD1(value as D1Database, key);\n continue;\n }\n\n // 4. Vectorize\n if (hasExactMethods(value, ['query', 'insert', 'upsert', 'describe'])) {\n instrumented[key] = instrumentVectorize(value as VectorizeIndex, key);\n continue;\n }\n\n // 5. AI — has run() + discriminator properties\n if (hasMethod(value, 'run') && ('gateway' in value || 'models' in value)) {\n instrumented[key] = instrumentAI(value as Ai, key);\n continue;\n }\n\n // 6. Hyperdrive — connect + connection properties\n if (hasMethod(value, 'connect') && 'connectionString' in value && 'host' in value) {\n instrumented[key] = instrumentHyperdrive(value as Hyperdrive, key);\n continue;\n }\n\n // 7. Queue Producer — send + sendBatch (not get, to avoid KV collision)\n if (hasExactMethods(value, ['send', 'sendBatch']) && !('get' in value)) {\n instrumented[key] = instrumentQueueProducer(value as Queue, key);\n continue;\n }\n\n // 8. Analytics Engine\n if (hasMethod(value, 'writeDataPoint')) {\n instrumented[key] = instrumentAnalyticsEngine(value as AnalyticsEngineDataset, key);\n continue;\n }\n\n // 9. Images\n if (hasExactMethods(value, ['info', 'input'])) {\n instrumented[key] = instrumentImages(value as any, key);\n continue;\n }\n\n // 10. Service Binding (broadest — must be last)\n if (hasMethod(value, 'fetch')) {\n instrumented[key] = instrumentServiceBinding(value as Fetcher, key);\n continue;\n }\n\n // Unknown binding type — pass through\n instrumented[key] = value;\n }\n\n return instrumented;\n}\n\n","/**\n * Rate Limiter binding instrumentation\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap, setAttr } from './common';\n\ninterface RateLimiterLike {\n limit(options: { key: string }): Promise<{ success: boolean }>;\n}\n\n/**\n * Instrument Rate Limiter binding (manual only — not auto-detected)\n */\nexport function instrumentRateLimiter<T extends RateLimiterLike>(limiter: T, bindingName?: string): T {\n const name = bindingName || 'rate-limiter';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'limit' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [options] = args as [{ key: string }];\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `RateLimiter ${name}: limit`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'rate_limiter.system': 'cloudflare-rate-limiter',\n 'rate_limiter.key': options?.key,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n setAttr(span, 'rate_limiter.success', result?.success);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(limiter, handler);\n}\n","/**\n * Browser Rendering binding instrumentation\n */\n\nimport {\n trace,\n SpanKind,\n SpanStatusCode,\n} from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap, setAttr } from './common';\n\ninterface BrowserRenderingLike {\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n}\n\n/**\n * Instrument Browser Rendering binding (manual only — not auto-detected)\n */\nexport function instrumentBrowserRendering<T extends BrowserRenderingLike>(browser: T, bindingName?: string): T {\n const name = bindingName || 'browser';\n\n const handler: ProxyHandler<T> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'fetch' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [input] = args as [RequestInfo | URL, RequestInit | undefined];\n const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `BrowserRendering ${name}: fetch`,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'browser.system': 'cloudflare-browser-rendering',\n 'url.full': url,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n setAttr(span, 'http.response.status_code', result?.status);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n return value;\n },\n };\n\n return wrap(browser, handler);\n}\n"]}
|
|
@@ -34,6 +34,11 @@ function unwrap(item) {
|
|
|
34
34
|
return item;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
function setAttr(span, key, value) {
|
|
38
|
+
if (value !== void 0 && value !== null) {
|
|
39
|
+
span.setAttribute(key, value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
37
42
|
function wrap(item, handler) {
|
|
38
43
|
const proxy = new Proxy(item, handler);
|
|
39
44
|
Object.defineProperty(proxy, unwrapSymbol, {
|
|
@@ -45,6 +50,6 @@ function wrap(item, handler) {
|
|
|
45
50
|
return proxy;
|
|
46
51
|
}
|
|
47
52
|
|
|
48
|
-
export { proxyExecutionContext, unwrap, wrap };
|
|
49
|
-
//# sourceMappingURL=chunk-
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
export { isWrapped, proxyExecutionContext, setAttr, unwrap, wrap };
|
|
54
|
+
//# sourceMappingURL=chunk-O4IYKWPJ.js.map
|
|
55
|
+
//# sourceMappingURL=chunk-O4IYKWPJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bindings/common.ts"],"names":[],"mappings":";AAOO,IAAM,iBAAN,MAAqB;AAAA,EAClB,WAA+B,EAAC;AAAA,EAExC,MAAM,OAAA,EAAiC;AACrC,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,EAC5B;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AAAA,EACxC;AACF,CAAA;AAKO,SAAS,sBAAsB,GAAA,EAGpC;AACA,EAAA,MAAM,OAAA,GAAU,IAAI,cAAA,EAAe;AAEnC,EAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAM,GAAA,EAAK;AAAA,IAC7B,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,SAAS,WAAA,EAAa;AACxB,QAAA,OAAO,CAAC,OAAA,KAA8B;AACpC,UAAA,OAAA,CAAQ,MAAM,OAAO,CAAA;AACrB,UAAA,OAAO,MAAA,CAAO,UAAU,OAAO,CAAA;AAAA,QACjC,CAAA;AAAA,MACF;AACA,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,IACjC;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,OAAA,EAAQ;AACjC;AAKA,IAAM,YAAA,0BAAsB,QAAQ,CAAA;AAI7B,SAAS,UAAa,IAAA,EAA6B;AACxD,EAAA,OAAO,IAAA,IAAQ,CAAC,CAAE,IAAA,CAAoB,YAAY,CAAA;AACpD;AAEO,SAAS,OAAyB,IAAA,EAAY;AACnD,EAAA,IAAI,IAAA,IAAQ,SAAA,CAAU,IAAI,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAK,YAAY,CAAA;AAAA,EAC1B,CAAA,MAAO;AACL,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKO,SAAS,OAAA,CAAQ,IAAA,EAA2D,GAAA,EAAa,KAAA,EAAsB;AACpH,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA,IAAA,CAAK,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,EAC9B;AACF;AAEO,SAAS,IAAA,CACd,MACA,OAAA,EACY;AACZ,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AACrC,EAAA,MAAA,CAAO,cAAA,CAAe,OAAO,YAAA,EAAc;AAAA,IACzC,KAAA,EAAO,IAAA;AAAA,IACP,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc;AAAA,GACf,CAAA;AACD,EAAA,OAAO,KAAA;AACT","file":"chunk-O4IYKWPJ.js","sourcesContent":["/**\n * Common instrumentation utilities\n */\n\n/**\n * Promise tracker for waitUntil\n */\nexport class PromiseTracker {\n private promises: Promise<unknown>[] = [];\n\n track(promise: Promise<unknown>): void {\n this.promises.push(promise);\n }\n\n async wait(): Promise<void> {\n await Promise.allSettled(this.promises);\n }\n}\n\n/**\n * Proxy ExecutionContext to track waitUntil promises\n */\nexport function proxyExecutionContext(ctx: ExecutionContext): {\n ctx: ExecutionContext;\n tracker: PromiseTracker;\n} {\n const tracker = new PromiseTracker();\n\n const proxied = new Proxy(ctx, {\n get(target, prop) {\n if (prop === 'waitUntil') {\n return (promise: Promise<unknown>) => {\n tracker.track(promise);\n return target.waitUntil(promise);\n };\n }\n return Reflect.get(target, prop);\n },\n });\n\n return { ctx: proxied, tracker };\n}\n\n/**\n * Helper to wrap/unwrap proxied objects\n */\nconst unwrapSymbol = Symbol('unwrap');\n\ntype Wrapped<T> = { [unwrapSymbol]: T } & T;\n\nexport function isWrapped<T>(item: T): item is Wrapped<T> {\n return item && !!(item as Wrapped<T>)[unwrapSymbol];\n}\n\nexport function unwrap<T extends object>(item: T): T {\n if (item && isWrapped(item)) {\n return item[unwrapSymbol];\n } else {\n return item;\n }\n}\n\n/**\n * Set attribute only if value is defined and non-null\n */\nexport function setAttr(span: { setAttribute: (key: string, value: any) => void }, key: string, value: unknown): void {\n if (value !== undefined && value !== null) {\n span.setAttribute(key, value);\n }\n}\n\nexport function wrap<T extends object>(\n item: T,\n handler: ProxyHandler<T>,\n): Wrapped<T> {\n const proxy = new Proxy(item, handler) as Wrapped<T>;\n Object.defineProperty(proxy, unwrapSymbol, {\n value: item,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n return proxy;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { wrap } from './chunk-
|
|
1
|
+
import { wrap } from './chunk-O4IYKWPJ.js';
|
|
2
2
|
import { context, trace, propagation, SpanKind, SpanStatusCode } from '@opentelemetry/api';
|
|
3
3
|
import { createInitialiser, setConfig } from 'autotel-edge';
|
|
4
4
|
|
|
@@ -228,17 +228,16 @@ function instrumentWorkflowRun(runFn, workflowName, workflowClass) {
|
|
|
228
228
|
kind: SpanKind.INTERNAL,
|
|
229
229
|
attributes: {
|
|
230
230
|
"workflow.name": workflowName,
|
|
231
|
+
"workflow.instance_id": event.instanceId,
|
|
231
232
|
"faas.trigger": "workflow",
|
|
232
|
-
"faas.coldstart": isColdStart2(workflowClass)
|
|
233
|
-
// Add workflow event attributes if available
|
|
234
|
-
...event?.workflowId && { "workflow.id": event.workflowId },
|
|
235
|
-
...event?.runId && { "workflow.run_id": event.runId }
|
|
233
|
+
"faas.coldstart": isColdStart2(workflowClass)
|
|
236
234
|
}
|
|
237
235
|
},
|
|
238
236
|
async (span) => {
|
|
239
237
|
try {
|
|
240
|
-
await runFn.call(this, event, instrumentedStep);
|
|
238
|
+
const result = await runFn.call(this, event, instrumentedStep);
|
|
241
239
|
span.setStatus({ code: SpanStatusCode.OK });
|
|
240
|
+
return result;
|
|
242
241
|
} catch (error) {
|
|
243
242
|
span.recordException(error);
|
|
244
243
|
span.setStatus({
|
|
@@ -277,7 +276,7 @@ function instrumentWorkflow(workflowClass, workflowName, config) {
|
|
|
277
276
|
const classHandler = {
|
|
278
277
|
construct(target, args) {
|
|
279
278
|
const env = args[args.length - 1] || {};
|
|
280
|
-
const trigger =
|
|
279
|
+
const trigger = { type: "workflow", name: workflowName };
|
|
281
280
|
const workflowConfig = initialiser(env, trigger);
|
|
282
281
|
const context$1 = setConfig(workflowConfig);
|
|
283
282
|
const workflowInstance = context.with(context$1, () => {
|
|
@@ -294,5 +293,5 @@ function instrumentWorkflow(workflowClass, workflowName, config) {
|
|
|
294
293
|
}
|
|
295
294
|
|
|
296
295
|
export { instrumentDO, instrumentWorkflow };
|
|
297
|
-
//# sourceMappingURL=chunk-
|
|
298
|
-
//# sourceMappingURL=chunk-
|
|
296
|
+
//# sourceMappingURL=chunk-WDNZVVRW.js.map
|
|
297
|
+
//# sourceMappingURL=chunk-WDNZVVRW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/handlers/durable-objects.ts","../src/handlers/workflows.ts"],"names":["api_context","context","coldStarts","isColdStart","trace","SpanKind","SpanStatusCode","createInitialiser","setConfig"],"mappings":"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","file":"chunk-WDNZVVRW.js","sourcesContent":["/**\n * Durable Objects instrumentation for Cloudflare Workers\n * \n * Note: This file uses Cloudflare Workers types (DurableObjectId, DurableObjectState, etc.)\n * which are globally available via @cloudflare/workers-types when listed in tsconfig.json.\n * These types are devDependencies only - they're not runtime dependencies.\n * At runtime, Cloudflare Workers runtime provides the actual implementations.\n */\n\nimport {\n trace,\n context as api_context,\n propagation,\n SpanStatusCode,\n SpanKind,\n} from '@opentelemetry/api';\nimport type { ConfigurationOption } from 'autotel-edge';\nimport { createInitialiser, setConfig, WorkerTracer } from 'autotel-edge';\nimport { wrap } from '../bindings/common';\n\n// Durable Object types\ntype DOFetchFn = (request: Request) => Response | Promise<Response>;\ntype DOAlarmFn = () => void | Promise<void>;\n\n/**\n * Track cold starts per DO class\n */\nconst coldStarts = new WeakMap<any, boolean>();\n\nfunction isColdStart(doClass: any): boolean {\n if (!coldStarts.has(doClass)) {\n coldStarts.set(doClass, true);\n return true;\n }\n return false;\n}\n\n/**\n * Instrument a Durable Object fetch method\n */\nfunction instrumentDOFetch(\n fetchFn: DOFetchFn,\n id: DurableObjectId,\n doClass: any,\n): DOFetchFn {\n return async function instrumentedFetch(\n this: any,\n request: Request,\n ): Promise<Response> {\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n // Extract parent context from request headers\n const parentContext = propagation.extract(\n api_context.active(),\n request.headers,\n );\n\n const url = new URL(request.url);\n const spanName = `DO ${id.name || id.toString()}: ${request.method} ${url.pathname}`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.SERVER,\n attributes: {\n 'http.request.method': request.method,\n 'url.full': request.url,\n 'do.id': id.toString(),\n 'do.id.name': id.name || '',\n 'faas.trigger': 'http',\n 'faas.coldstart': isColdStart(doClass),\n },\n },\n parentContext,\n async (span) => {\n try {\n const response = await fetchFn.call(this, request);\n\n span.setAttributes({\n 'http.response.status_code': response.status,\n });\n\n if (response.ok) {\n span.setStatus({ code: SpanStatusCode.OK });\n } else {\n span.setStatus({ code: SpanStatusCode.ERROR });\n }\n\n return response;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n };\n}\n\n/**\n * Instrument a Durable Object alarm method\n */\nfunction instrumentDOAlarm(\n alarmFn: DOAlarmFn,\n id: DurableObjectId,\n doClass: any,\n): DOAlarmFn {\n return async function instrumentedAlarm(this: any): Promise<void> {\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n const spanName = `DO ${id.name || id.toString()}: alarm`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n 'do.id': id.toString(),\n 'do.id.name': id.name || '',\n 'faas.trigger': 'timer',\n 'faas.coldstart': isColdStart(doClass),\n },\n },\n async (span) => {\n try {\n await alarmFn.call(this);\n span.setStatus({ code: SpanStatusCode.OK });\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n };\n}\n\n/**\n * Instrument a Durable Object instance\n */\nfunction instrumentDOInstance(\n doInstance: any,\n state: DurableObjectState,\n _env: any,\n doClass: any,\n): any {\n const instanceHandler: ProxyHandler<any> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'fetch' && typeof value === 'function') {\n return instrumentDOFetch(value.bind(target), state.id, doClass);\n }\n\n if (prop === 'alarm' && typeof value === 'function') {\n return instrumentDOAlarm(value.bind(target), state.id, doClass);\n }\n\n // Bind other methods to the target\n if (typeof value === 'function') {\n return value.bind(target);\n }\n\n return value;\n },\n };\n\n return wrap(doInstance, instanceHandler);\n}\n\n/**\n * Instrument a Durable Object class\n *\n * This wraps the DO class to automatically trace all fetch and alarm calls,\n * as well as initialize the telemetry configuration.\n *\n * **Usage:**\n * ```typescript\n * import { DurableObject } from 'cloudflare:workers'\n * import { instrumentDO } from 'autotel-edge'\n *\n * export class Counter extends DurableObject<Env> {\n * async fetch(request: Request) {\n * // Your DO logic here\n * return new Response('OK')\n * }\n * }\n *\n * // Wrap the class before exporting\n * export const CounterDO = instrumentDO(Counter, (env: Env) => ({\n * exporter: {\n * url: env.OTLP_ENDPOINT,\n * headers: { 'x-api-key': env.API_KEY }\n * },\n * service: {\n * name: 'my-durable-object',\n * version: '1.0.0'\n * }\n * }))\n * ```\n *\n * **What you get:**\n * - 🎯 Automatic spans for fetch() calls with HTTP attributes\n * - ⏰ Automatic spans for alarm() calls\n * - 🥶 Cold start tracking\n * - 🔗 Context propagation from incoming requests\n * - ⚡ Automatic span lifecycle management\n *\n * @param doClass - The Durable Object class to instrument\n * @param config - Configuration or configuration function\n * @returns Instrumented Durable Object class\n */\nexport function instrumentDO<C extends new (state: DurableObjectState, env: any) => any>(\n doClass: C,\n config: ConfigurationOption,\n): C {\n const initialiser = createInitialiser(config);\n\n const classHandler: ProxyHandler<C> = {\n construct(target, [state, env]: [DurableObjectState, any]) {\n // Initialize config for this DO instance\n const trigger = {\n id: state.id.toString(),\n name: state.id.name,\n };\n const doConfig = initialiser(env, trigger);\n const context = setConfig(doConfig);\n\n // Create the DO instance within the config context\n const doInstance = api_context.with(context, () => {\n return new target(state, env);\n });\n\n // Instrument the instance\n return instrumentDOInstance(doInstance, state, env, doClass);\n },\n };\n\n return wrap(doClass, classHandler);\n}\n","/**\n * Cloudflare Workflows instrumentation for autotel-edge\n *\n * Instruments WorkflowEntrypoint classes to automatically trace workflow execution,\n * step operations, retries, and sleeps.\n *\n * Based on Cloudflare Workflows API:\n * https://developers.cloudflare.com/workflows/\n */\n\nimport {\n trace,\n context as api_context,\n SpanStatusCode,\n SpanKind,\n} from '@opentelemetry/api';\nimport type { ConfigurationOption, WorkflowTrigger } from 'autotel-edge';\nimport { createInitialiser, setConfig, WorkerTracer } from 'autotel-edge';\nimport { wrap } from '../bindings/common';\n\n/**\n * Workflow types matching the Cloudflare Workers Workflows API.\n * @see https://developers.cloudflare.com/workflows/\n */\n\ninterface WorkflowEvent<T = unknown> {\n payload: Readonly<T>;\n timestamp: Date;\n instanceId: string;\n}\n\ninterface WorkflowStepConfig {\n retries?: {\n limit: number;\n delay?: string | number;\n backoff?: 'constant' | 'linear' | 'exponential';\n };\n timeout?: string | number;\n}\n\ninterface WorkflowStep {\n do<T>(name: string, callback: () => Promise<T>): Promise<T>;\n do<T>(name: string, config: WorkflowStepConfig, callback: () => Promise<T>): Promise<T>;\n sleep(name: string, duration: string | number): Promise<void>;\n sleepUntil(name: string, timestamp: Date | number): Promise<void>;\n}\n\ntype WorkflowRunFn = (\n event: Readonly<WorkflowEvent>,\n step: WorkflowStep,\n) => Promise<unknown> | void;\n\n/**\n * Track cold starts per Workflow class\n */\nconst coldStarts = new WeakMap<object, boolean>();\n\nfunction isColdStart(workflowClass: object): boolean {\n if (!coldStarts.has(workflowClass)) {\n coldStarts.set(workflowClass, true);\n return true;\n }\n return false;\n}\n\n/**\n * Proxy the step object to instrument step.do() and step.sleep() calls\n */\nfunction instrumentWorkflowStep(\n step: WorkflowStep,\n workflowName: string,\n): WorkflowStep {\n const stepHandler: ProxyHandler<WorkflowStep> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n // Instrument step.do() to create spans for each workflow step\n if (prop === 'do' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [stepName] = args as [string, ...unknown[]];\n\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `Workflow ${workflowName}: ${stepName}`,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n 'workflow.step.name': stepName,\n 'workflow.name': workflowName,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n // Instrument step.sleep() to track workflow delays\n if (prop === 'sleep' && typeof value === 'function') {\n return new Proxy(value, {\n apply: (fnTarget, thisArg, args) => {\n const [sleepName, duration] = args as [string, string | number];\n\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n return tracer.startActiveSpan(\n `Workflow ${workflowName}: sleep ${sleepName}`,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n 'workflow.sleep.name': sleepName,\n 'workflow.sleep.duration': String(duration),\n 'workflow.name': workflowName,\n },\n },\n async (span) => {\n try {\n const result = await Reflect.apply(fnTarget, thisArg, args);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n },\n });\n }\n\n // Pass through other step methods\n if (typeof value === 'function') {\n return value.bind(target);\n }\n\n return value;\n },\n };\n\n return wrap(step, stepHandler);\n}\n\n/**\n * Instrument a Workflow run method\n */\nfunction instrumentWorkflowRun(\n runFn: WorkflowRunFn,\n workflowName: string,\n workflowClass: object,\n): WorkflowRunFn {\n return async function instrumentedRun(\n this: unknown,\n event: Readonly<WorkflowEvent>,\n step: WorkflowStep,\n ): Promise<unknown> {\n const tracer = trace.getTracer('autotel-edge') as WorkerTracer;\n\n // Instrument the step object to track individual operations\n const instrumentedStep = instrumentWorkflowStep(step, workflowName);\n\n const spanName = `Workflow ${workflowName}: run`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n 'workflow.name': workflowName,\n 'workflow.instance_id': event.instanceId,\n 'faas.trigger': 'workflow',\n 'faas.coldstart': isColdStart(workflowClass),\n },\n },\n async (span) => {\n try {\n const result = await runFn.call(this, event, instrumentedStep);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n },\n );\n };\n}\n\n/**\n * Instrument a Workflow instance\n */\nfunction instrumentWorkflowInstance(\n workflowInstance: Record<string, unknown>,\n workflowName: string,\n workflowClass: object,\n): Record<string, unknown> {\n const instanceHandler: ProxyHandler<Record<string, unknown>> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'run' && typeof value === 'function') {\n return instrumentWorkflowRun(\n value.bind(target) as WorkflowRunFn,\n workflowName,\n workflowClass,\n );\n }\n\n // Bind other methods to the target\n if (typeof value === 'function') {\n return value.bind(target);\n }\n\n return value;\n },\n };\n\n return wrap(workflowInstance, instanceHandler);\n}\n\n/**\n * Instrument a Cloudflare Workflow class\n *\n * This wraps the WorkflowEntrypoint class to automatically trace workflow execution,\n * step operations, retries, and sleeps.\n *\n * **Usage:**\n * ```typescript\n * import { WorkflowEntrypoint } from 'cloudflare:workers'\n * import { instrumentWorkflow } from 'autotel-cloudflare/handlers'\n *\n * class MyWorkflow extends WorkflowEntrypoint {\n * async run(event, step) {\n * await step.do('submit payment', async () => {\n * return await submitToPaymentProcessor(event.payload.payment)\n * })\n *\n * await step.sleep('wait for feedback', '2 days')\n *\n * await step.do('send feedback email', sendFeedbackEmail)\n * }\n * }\n *\n * export const CheckoutWorkflow = instrumentWorkflow(\n * MyWorkflow,\n * 'checkout-workflow',\n * (env: Env) => ({\n * exporter: {\n * url: env.OTLP_ENDPOINT,\n * headers: { 'x-api-key': env.API_KEY }\n * },\n * service: {\n * name: 'checkout-workflow',\n * version: '1.0.0'\n * }\n * })\n * )\n * ```\n *\n * @param workflowClass - The WorkflowEntrypoint class to instrument\n * @param workflowName - The name of the workflow (used in span names)\n * @param config - Configuration or configuration function\n * @returns Instrumented Workflow class\n */\nexport function instrumentWorkflow<\n C extends new (...args: any[]) => any,\n>(\n workflowClass: C,\n workflowName: string,\n config: ConfigurationOption,\n): C {\n const initialiser = createInitialiser(config);\n\n const classHandler: ProxyHandler<C> = {\n construct(target, args: any[]) {\n // Extract env from constructor args (typically last arg)\n const env = args[args.length - 1] || {};\n\n const trigger: WorkflowTrigger = { type: 'workflow', name: workflowName };\n const workflowConfig = initialiser(env, trigger);\n const context = setConfig(workflowConfig);\n\n // Create the workflow instance within the config context\n const workflowInstance = api_context.with(context, () => {\n return new target(...args);\n });\n\n // Instrument the instance\n return instrumentWorkflowInstance(\n workflowInstance,\n workflowName,\n workflowClass,\n );\n },\n };\n\n return wrap(workflowClass, classHandler);\n}\n"]}
|
package/dist/handlers.d.ts
CHANGED
|
@@ -72,12 +72,12 @@ declare function instrumentDO<C extends new (state: DurableObjectState, env: any
|
|
|
72
72
|
* **Usage:**
|
|
73
73
|
* ```typescript
|
|
74
74
|
* import { WorkflowEntrypoint } from 'cloudflare:workers'
|
|
75
|
-
* import { instrumentWorkflow } from 'autotel-
|
|
75
|
+
* import { instrumentWorkflow } from 'autotel-cloudflare/handlers'
|
|
76
76
|
*
|
|
77
|
-
*
|
|
77
|
+
* class MyWorkflow extends WorkflowEntrypoint {
|
|
78
78
|
* async run(event, step) {
|
|
79
79
|
* await step.do('submit payment', async () => {
|
|
80
|
-
* return await submitToPaymentProcessor(event.
|
|
80
|
+
* return await submitToPaymentProcessor(event.payload.payment)
|
|
81
81
|
* })
|
|
82
82
|
*
|
|
83
83
|
* await step.sleep('wait for feedback', '2 days')
|
|
@@ -86,9 +86,8 @@ declare function instrumentDO<C extends new (state: DurableObjectState, env: any
|
|
|
86
86
|
* }
|
|
87
87
|
* }
|
|
88
88
|
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* CheckoutWorkflow,
|
|
89
|
+
* export const CheckoutWorkflow = instrumentWorkflow(
|
|
90
|
+
* MyWorkflow,
|
|
92
91
|
* 'checkout-workflow',
|
|
93
92
|
* (env: Env) => ({
|
|
94
93
|
* exporter: {
|
|
@@ -103,14 +102,6 @@ declare function instrumentDO<C extends new (state: DurableObjectState, env: any
|
|
|
103
102
|
* )
|
|
104
103
|
* ```
|
|
105
104
|
*
|
|
106
|
-
* **What you get:**
|
|
107
|
-
* - 🎯 Automatic spans for workflow.run() execution
|
|
108
|
-
* - 📋 Automatic spans for each step.do() operation
|
|
109
|
-
* - ⏸️ Automatic spans for step.sleep() operations
|
|
110
|
-
* - 🔄 Automatic retry tracking (via step.do retries)
|
|
111
|
-
* - 🥶 Cold start tracking
|
|
112
|
-
* - ⚡ Automatic span lifecycle management
|
|
113
|
-
*
|
|
114
105
|
* @param workflowClass - The WorkflowEntrypoint class to instrument
|
|
115
106
|
* @param workflowName - The name of the workflow (used in span names)
|
|
116
107
|
* @param config - Configuration or configuration function
|
package/dist/handlers.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { instrumentDO, instrumentWorkflow } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { instrumentDO, instrumentWorkflow } from './chunk-WDNZVVRW.js';
|
|
2
|
+
import './chunk-O4IYKWPJ.js';
|
|
3
3
|
//# sourceMappingURL=handlers.js.map
|
|
4
4
|
//# sourceMappingURL=handlers.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ConfigurationOption } from 'autotel-edge';
|
|
2
2
|
export * from 'autotel-edge';
|
|
3
3
|
export { instrumentDO, instrumentWorkflow } from './handlers.js';
|
|
4
|
-
export { instrumentBindings, instrumentD1, instrumentKV, instrumentR2, instrumentServiceBinding } from './bindings.js';
|
|
4
|
+
export { instrumentAI, instrumentAnalyticsEngine, instrumentBindings, instrumentBrowserRendering, instrumentD1, instrumentHyperdrive, instrumentImages, instrumentKV, instrumentQueueProducer, instrumentR2, instrumentRateLimiter, instrumentServiceBinding, instrumentVectorize } from './bindings.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Handler instrumentation for Cloudflare Workers
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { instrumentBindings } from './chunk-
|
|
2
|
-
export { instrumentBindings, instrumentD1, instrumentKV, instrumentR2, instrumentServiceBinding } from './chunk-
|
|
3
|
-
import { instrumentDO } from './chunk-
|
|
4
|
-
export { instrumentDO, instrumentWorkflow } from './chunk-
|
|
5
|
-
import { wrap, unwrap, proxyExecutionContext } from './chunk-
|
|
1
|
+
import { instrumentBindings } from './chunk-4UG2QCPQ.js';
|
|
2
|
+
export { instrumentAI, instrumentAnalyticsEngine, instrumentBindings, instrumentBrowserRendering, instrumentD1, instrumentHyperdrive, instrumentImages, instrumentKV, instrumentQueueProducer, instrumentR2, instrumentRateLimiter, instrumentServiceBinding, instrumentVectorize } from './chunk-4UG2QCPQ.js';
|
|
3
|
+
import { instrumentDO } from './chunk-WDNZVVRW.js';
|
|
4
|
+
export { instrumentDO, instrumentWorkflow } from './chunk-WDNZVVRW.js';
|
|
5
|
+
import { wrap, unwrap, proxyExecutionContext } from './chunk-O4IYKWPJ.js';
|
|
6
6
|
import { createInitialiser, getActiveConfig, setConfig, WorkerTracerProvider, WorkerTracer } from 'autotel-edge';
|
|
7
7
|
export * from 'autotel-edge';
|
|
8
8
|
import { trace, SpanKind, propagation, context, SpanStatusCode } from '@opentelemetry/api';
|
|
@@ -174,17 +174,45 @@ function instrumentGlobalCache() {
|
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
// src/wrappers/instrument.ts
|
|
177
|
+
function extractCfAttributes(request) {
|
|
178
|
+
const cf = request.cf;
|
|
179
|
+
if (!cf) return {};
|
|
180
|
+
const attrs = {};
|
|
181
|
+
const set = (key, value) => {
|
|
182
|
+
if (value !== void 0 && value !== null) {
|
|
183
|
+
attrs[key] = value;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
set("cloudflare.colo", cf.colo);
|
|
187
|
+
const ray = request.headers.get("cf-ray");
|
|
188
|
+
if (ray) attrs["cloudflare.ray_id"] = ray;
|
|
189
|
+
set("cloudflare.country", cf.country);
|
|
190
|
+
set("cloudflare.city", cf.city);
|
|
191
|
+
set("cloudflare.region", cf.region);
|
|
192
|
+
set("cloudflare.continent", cf.continent);
|
|
193
|
+
set("cloudflare.timezone", cf.timezone);
|
|
194
|
+
set("cloudflare.latitude", cf.latitude);
|
|
195
|
+
set("cloudflare.longitude", cf.longitude);
|
|
196
|
+
set("cloudflare.asn", cf.asn);
|
|
197
|
+
set("cloudflare.as_organization", cf.asOrganization);
|
|
198
|
+
set("cloudflare.http_protocol", cf.httpProtocol);
|
|
199
|
+
set("cloudflare.tls_version", cf.tlsVersion);
|
|
200
|
+
set("cloudflare.client_tcp_rtt", cf.clientTcpRtt);
|
|
201
|
+
return attrs;
|
|
202
|
+
}
|
|
177
203
|
function createFetchInstrumentation(config) {
|
|
178
204
|
return {
|
|
179
205
|
getInitialSpanInfo: (request) => {
|
|
180
206
|
const url = new URL(request.url);
|
|
207
|
+
const cfAttrs = config.extractCfAttributes === false ? {} : extractCfAttributes(request);
|
|
181
208
|
return {
|
|
182
209
|
name: `${request.method} ${url.pathname}`,
|
|
183
210
|
options: {
|
|
184
211
|
kind: SpanKind.SERVER,
|
|
185
212
|
attributes: {
|
|
186
213
|
"http.request.method": request.method,
|
|
187
|
-
"url.full": request.url
|
|
214
|
+
"url.full": request.url,
|
|
215
|
+
...cfAttrs
|
|
188
216
|
}
|
|
189
217
|
},
|
|
190
218
|
context: propagation.extract(context.active(), request.headers)
|