autotel-cloudflare 2.1.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/LICENSE +21 -0
- package/README.md +432 -0
- package/dist/actors.d.ts +248 -0
- package/dist/actors.js +1030 -0
- package/dist/actors.js.map +1 -0
- package/dist/agents.d.ts +219 -0
- package/dist/agents.js +276 -0
- package/dist/agents.js.map +1 -0
- package/dist/bindings.d.ts +40 -0
- package/dist/bindings.js +4 -0
- package/dist/bindings.js.map +1 -0
- package/dist/chunk-JDPN3HND.js +520 -0
- package/dist/chunk-JDPN3HND.js.map +1 -0
- package/dist/chunk-QXFYTHQF.js +298 -0
- package/dist/chunk-QXFYTHQF.js.map +1 -0
- package/dist/chunk-SKKRPS5K.js +50 -0
- package/dist/chunk-SKKRPS5K.js.map +1 -0
- package/dist/events.d.ts +1 -0
- package/dist/events.js +3 -0
- package/dist/events.js.map +1 -0
- package/dist/handlers.d.ts +121 -0
- package/dist/handlers.js +4 -0
- package/dist/handlers.js.map +1 -0
- package/dist/index.d.ts +144 -0
- package/dist/index.js +576 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -0
- package/dist/sampling.d.ts +4 -0
- package/dist/sampling.js +3 -0
- package/dist/sampling.js.map +1 -0
- package/dist/testing.d.ts +1 -0
- package/dist/testing.js +3 -0
- package/dist/testing.js.map +1 -0
- package/package.json +107 -0
- package/src/actors/alarms.ts +225 -0
- package/src/actors/index.ts +36 -0
- package/src/actors/instrument-actor.test.ts +179 -0
- package/src/actors/instrument-actor.ts +574 -0
- package/src/actors/sockets.ts +217 -0
- package/src/actors/storage.ts +263 -0
- package/src/actors/traced-handler.ts +300 -0
- package/src/actors/types.ts +98 -0
- package/src/actors.ts +50 -0
- package/src/agents/index.ts +42 -0
- package/src/agents/otel-observability.test.ts +329 -0
- package/src/agents/otel-observability.ts +465 -0
- package/src/agents/types.ts +167 -0
- package/src/agents.ts +76 -0
- package/src/bindings/bindings.ts +621 -0
- package/src/bindings/common.ts +75 -0
- package/src/bindings/index.ts +12 -0
- package/src/bindings.ts +6 -0
- package/src/events.ts +6 -0
- package/src/global/cache.test.ts +292 -0
- package/src/global/cache.ts +164 -0
- package/src/global/fetch.test.ts +344 -0
- package/src/global/fetch.ts +134 -0
- package/src/global/index.ts +7 -0
- package/src/handlers/durable-objects.test.ts +524 -0
- package/src/handlers/durable-objects.ts +250 -0
- package/src/handlers/index.ts +6 -0
- package/src/handlers/workflows.ts +318 -0
- package/src/handlers.ts +6 -0
- package/src/index.ts +57 -0
- package/src/logger.ts +6 -0
- package/src/sampling.ts +6 -0
- package/src/testing.ts +6 -0
- package/src/wrappers/index.ts +8 -0
- package/src/wrappers/instrument.integration.test.ts +468 -0
- package/src/wrappers/instrument.ts +643 -0
- package/src/wrappers/wrap-do.ts +34 -0
- package/src/wrappers/wrap-module.ts +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/actors/storage.ts","../src/actors/alarms.ts","../src/actors/sockets.ts","../src/actors/instrument-actor.ts","../src/actors/traced-handler.ts"],"names":["getTracer","trace","SpanKind","SpanStatusCode","api_context","context","createInitialiser","setConfig","propagation"],"mappings":"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","file":"actors.js","sourcesContent":["/**\n * Actor storage instrumentation\n *\n * Traces operations on actor.storage including SQL queries\n */\n\nimport { trace, SpanStatusCode, SpanKind } from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap } from '../bindings/common';\nimport type { ActorLike } from './types';\n\n/**\n * Get the tracer instance\n */\nfunction getTracer(): WorkerTracer {\n return trace.getTracer('autotel-cloudflare-actors') as WorkerTracer;\n}\n\n/**\n * Instrument Actor storage for tracing\n *\n * Captures:\n * - SQL query operations\n * - Key-value operations (if available)\n */\nexport function instrumentActorStorage(\n storage: unknown,\n actorInstance: ActorLike,\n actorClass: object,\n): unknown {\n if (!storage || typeof storage !== 'object') {\n return storage;\n }\n\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const actorName = actorInstance.name || actorClassName;\n\n const storageHandler: ProxyHandler<object> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n // Instrument SQL query method if it exists\n // The Actors Storage class has an exec method for SQL\n if (prop === 'exec' && typeof value === 'function') {\n return function instrumentedExec(\n this: unknown,\n query: string,\n ...params: unknown[]\n ): unknown {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: storage.exec`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'db.system': 'sqlite',\n 'db.operation': 'exec',\n 'db.statement': query,\n 'db.statement.params_count': params.length,\n },\n },\n (span) => {\n try {\n const result = value.call(target, query, ...params);\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 // Instrument query method (alternative name for exec)\n if (prop === 'query' && typeof value === 'function') {\n return function instrumentedQuery(\n this: unknown,\n query: string,\n ...params: unknown[]\n ): unknown {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: storage.query`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'db.system': 'sqlite',\n 'db.operation': 'query',\n 'db.statement': query,\n 'db.statement.params_count': params.length,\n },\n },\n (span) => {\n try {\n const result = value.call(target, query, ...params);\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 // Instrument get method\n if (prop === 'get' && typeof value === 'function') {\n return async function instrumentedGet(this: unknown, key: string): Promise<unknown> {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: storage.get`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'db.system': 'durable_object_storage',\n 'db.operation': 'get',\n 'db.key': key,\n },\n },\n async (span) => {\n try {\n const result = await value.call(target, key);\n span.setAttributes({\n 'db.result.found': result !== null && result !== undefined,\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 // Instrument put method\n if (prop === 'put' && typeof value === 'function') {\n return async function instrumentedPut(\n this: unknown,\n key: string,\n val: unknown,\n ): Promise<void> {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: storage.put`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'db.system': 'durable_object_storage',\n 'db.operation': 'put',\n 'db.key': key,\n 'db.value_type': typeof val,\n },\n },\n async (span) => {\n try {\n await value.call(target, key, val);\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 // Instrument delete method\n if (prop === 'delete' && typeof value === 'function') {\n return async function instrumentedDelete(this: unknown, key: string): Promise<boolean> {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: storage.delete`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'db.system': 'durable_object_storage',\n 'db.operation': 'delete',\n 'db.key': key,\n },\n },\n async (span) => {\n try {\n const result = await value.call(target, key);\n span.setAttributes({\n 'db.result.deleted': result,\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 // 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(storage, storageHandler);\n}\n","/**\n * Actor alarms instrumentation\n *\n * Traces operations on actor.alarms\n */\n\nimport { trace, SpanStatusCode, SpanKind } from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap } from '../bindings/common';\nimport type { ActorLike } from './types';\n\n/**\n * Get the tracer instance\n */\nfunction getTracer(): WorkerTracer {\n return trace.getTracer('autotel-cloudflare-actors') as WorkerTracer;\n}\n\n/**\n * Instrument Actor alarms for tracing\n *\n * Captures:\n * - set: Schedule a single alarm\n * - setMultiple: Schedule multiple alarms\n * - cancel: Cancel an alarm\n * - cancelAll: Cancel all alarms\n */\nexport function instrumentActorAlarms(\n alarms: unknown,\n actorInstance: ActorLike,\n actorClass: object,\n): unknown {\n if (!alarms || typeof alarms !== 'object') {\n return alarms;\n }\n\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const actorName = actorInstance.name || actorClassName;\n\n const alarmsHandler: ProxyHandler<object> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n // Instrument set method\n if (prop === 'set' && typeof value === 'function') {\n return async function instrumentedSet(\n this: unknown,\n ...args: unknown[]\n ): Promise<unknown> {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: alarms.set`;\n\n // Try to extract timing info from args\n const alarmAttributes: Record<string, string | number | boolean> = {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'alarm.operation': 'set',\n };\n\n // First arg might be timestamp, delay, or options\n if (args.length > 0) {\n const firstArg = args[0];\n if (typeof firstArg === 'number') {\n alarmAttributes['alarm.delay_ms'] = firstArg;\n } else if (firstArg instanceof Date) {\n alarmAttributes['alarm.scheduled_time'] = firstArg.toISOString();\n } else if (typeof firstArg === 'string') {\n // Might be a cron expression\n alarmAttributes['alarm.cron'] = firstArg;\n }\n }\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: alarmAttributes,\n },\n async (span) => {\n try {\n const result = await value.apply(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 // Instrument setMultiple method\n if (prop === 'setMultiple' && typeof value === 'function') {\n return async function instrumentedSetMultiple(\n this: unknown,\n alarmDefs: unknown[],\n ): Promise<unknown> {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: alarms.setMultiple`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'alarm.operation': 'setMultiple',\n 'alarm.count': Array.isArray(alarmDefs) ? alarmDefs.length : 0,\n },\n },\n async (span) => {\n try {\n const result = await value.call(target, alarmDefs);\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 // Instrument cancel method\n if (prop === 'cancel' && typeof value === 'function') {\n return async function instrumentedCancel(\n this: unknown,\n alarmId: string,\n ): Promise<unknown> {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: alarms.cancel`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'alarm.operation': 'cancel',\n 'alarm.id': alarmId,\n },\n },\n async (span) => {\n try {\n const result = await value.call(target, alarmId);\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 // Instrument cancelAll method\n if (prop === 'cancelAll' && typeof value === 'function') {\n return async function instrumentedCancelAll(this: unknown): Promise<unknown> {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: alarms.cancelAll`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'alarm.operation': 'cancelAll',\n },\n },\n async (span) => {\n try {\n const result = await value.call(target);\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 // 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(alarms, alarmsHandler);\n}\n","/**\n * Actor sockets instrumentation\n *\n * Traces operations on actor.sockets\n */\n\nimport { trace, SpanStatusCode, SpanKind } from '@opentelemetry/api';\nimport type { WorkerTracer } from 'autotel-edge';\nimport { wrap } from '../bindings/common';\nimport type { ActorLike } from './types';\n\n/**\n * Get the tracer instance\n */\nfunction getTracer(): WorkerTracer {\n return trace.getTracer('autotel-cloudflare-actors') as WorkerTracer;\n}\n\n/**\n * Instrument Actor sockets for tracing\n *\n * Captures:\n * - acceptWebSocket: Accept an incoming WebSocket connection\n * - broadcast: Send message to all connected sockets\n * - send: Send message to a specific socket\n */\nexport function instrumentActorSockets(\n sockets: unknown,\n actorInstance: ActorLike,\n actorClass: object,\n): unknown {\n if (!sockets || typeof sockets !== 'object') {\n return sockets;\n }\n\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const actorName = actorInstance.name || actorClassName;\n\n const socketsHandler: ProxyHandler<object> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n // Instrument acceptWebSocket method\n if (prop === 'acceptWebSocket' && typeof value === 'function') {\n return function instrumentedAcceptWebSocket(\n this: unknown,\n request: Request,\n ): unknown {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: sockets.acceptWebSocket`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.SERVER,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'websocket.operation': 'accept',\n 'url.full': request.url,\n },\n },\n (span) => {\n try {\n const result = value.call(target, request);\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 // Instrument broadcast method\n if (prop === 'broadcast' && typeof value === 'function') {\n return function instrumentedBroadcast(this: unknown, message: unknown): void {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: sockets.broadcast`;\n\n tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'websocket.operation': 'broadcast',\n 'websocket.message.type': typeof message,\n 'websocket.message.size':\n typeof message === 'string'\n ? message.length\n : message instanceof ArrayBuffer\n ? message.byteLength\n : 0,\n },\n },\n (span) => {\n try {\n value.call(target, message);\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 // Instrument send method\n if (prop === 'send' && typeof value === 'function') {\n return function instrumentedSend(this: unknown, ws: WebSocket, message: unknown): void {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: sockets.send`;\n\n tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'websocket.operation': 'send',\n 'websocket.message.type': typeof message,\n 'websocket.message.size':\n typeof message === 'string'\n ? message.length\n : message instanceof ArrayBuffer\n ? message.byteLength\n : 0,\n },\n },\n (span) => {\n try {\n value.call(target, ws, message);\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 // Instrument getConnections method (if exists)\n if (prop === 'getConnections' && typeof value === 'function') {\n return function instrumentedGetConnections(this: unknown): unknown {\n const tracer = getTracer();\n const spanName = `Actor ${actorName}: sockets.getConnections`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n 'actor.name': actorName,\n 'actor.class': actorClassName,\n 'websocket.operation': 'getConnections',\n },\n },\n (span) => {\n try {\n const result = value.call(target);\n // Try to capture connection count if result is array-like\n if (Array.isArray(result)) {\n span.setAttribute('websocket.connections.count', result.length);\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 // 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(sockets, socketsHandler);\n}\n","/**\n * Actor class instrumentation for @cloudflare/actors\n *\n * Wraps Actor lifecycle methods with OpenTelemetry tracing:\n * - onInit: Traced as 'actor.lifecycle': 'init'\n * - onRequest: Traced with full HTTP semantics\n * - onAlarm: Traced as 'actor.lifecycle': 'alarm'\n * - onPersist: Traced as 'actor.lifecycle': 'persist'\n * - WebSocket methods: Traced with socket semantics\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';\nimport type {\n ActorConfig,\n ActorConstructor,\n ActorLike,\n ActorLifecycle,\n ActorInstrumentationOptions,\n} from './types';\nimport { instrumentActorStorage } from './storage';\nimport { instrumentActorAlarms } from './alarms';\nimport { instrumentActorSockets } from './sockets';\n\n/**\n * Track cold starts per Actor class\n */\nconst coldStarts = new WeakMap<object, boolean>();\n\nfunction isColdStart(actorClass: object): boolean {\n if (!coldStarts.has(actorClass)) {\n coldStarts.set(actorClass, true);\n return true;\n }\n return false;\n}\n\n/**\n * Get the tracer instance\n */\nfunction getTracer(): WorkerTracer {\n return trace.getTracer('autotel-cloudflare-actors') as WorkerTracer;\n}\n\n/**\n * Default span name formatter\n */\nfunction defaultSpanNameFormatter(\n actorName: string,\n actorClass: string,\n lifecycle: ActorLifecycle,\n): string {\n const displayName = actorName || actorClass;\n return `Actor ${displayName}: ${lifecycle}`;\n}\n\n/**\n * Create base Actor span attributes\n */\nfunction createActorAttributes(\n actorInstance: ActorLike,\n actorClass: object,\n lifecycle: ActorLifecycle,\n): Record<string, string | boolean | number> {\n return {\n 'actor.name': actorInstance.name || 'unknown',\n 'actor.class': (actorClass as { name?: string }).name || 'Actor',\n 'actor.lifecycle': lifecycle,\n 'actor.coldstart': isColdStart(actorClass),\n ...(actorInstance.identifier && { 'actor.identifier': actorInstance.identifier }),\n };\n}\n\n/**\n * Instrument the onInit lifecycle method\n */\nfunction instrumentOnInit(\n originalMethod: () => Promise<void>,\n actorInstance: ActorLike,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): () => Promise<void> {\n return async function instrumentedOnInit(): Promise<void> {\n const tracer = getTracer();\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const spanName = options.spanNameFormatter\n ? options.spanNameFormatter(actorInstance.name || '', 'init')\n : defaultSpanNameFormatter(actorInstance.name || '', actorClassName, 'init');\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n attributes: createActorAttributes(actorInstance, actorClass, 'init'),\n },\n async (span) => {\n try {\n await originalMethod.call(actorInstance);\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 the onRequest lifecycle method\n */\nfunction instrumentOnRequest(\n originalMethod: (request: Request) => Promise<Response>,\n actorInstance: ActorLike,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): (request: Request) => Promise<Response> {\n return async function instrumentedOnRequest(request: Request): Promise<Response> {\n const tracer = getTracer();\n\n // Extract parent context from request headers\n const parentContext = propagation.extract(api_context.active(), request.headers);\n\n const url = new URL(request.url);\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const spanName = options.spanNameFormatter\n ? options.spanNameFormatter(actorInstance.name || '', 'request')\n : `Actor ${actorInstance.name || actorClassName}: ${request.method} ${url.pathname}`;\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.SERVER,\n attributes: {\n ...createActorAttributes(actorInstance, actorClass, 'request'),\n 'http.request.method': request.method,\n 'url.full': request.url,\n 'url.path': url.pathname,\n 'url.query': url.search,\n },\n },\n parentContext,\n async (span) => {\n try {\n const response = await originalMethod.call(actorInstance, 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 the onAlarm lifecycle method\n */\nfunction instrumentOnAlarm(\n originalMethod: (alarmInfo?: unknown) => Promise<void>,\n actorInstance: ActorLike,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): (alarmInfo?: unknown) => Promise<void> {\n return async function instrumentedOnAlarm(alarmInfo?: unknown): Promise<void> {\n const tracer = getTracer();\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const spanName = options.spanNameFormatter\n ? options.spanNameFormatter(actorInstance.name || '', 'alarm')\n : defaultSpanNameFormatter(actorInstance.name || '', actorClassName, 'alarm');\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n ...createActorAttributes(actorInstance, actorClass, 'alarm'),\n 'faas.trigger': 'timer',\n },\n },\n async (span) => {\n try {\n await originalMethod.call(actorInstance, alarmInfo);\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 the onPersist lifecycle method\n */\nfunction instrumentOnPersist(\n originalMethod: (key: string, value: unknown) => void,\n actorInstance: ActorLike,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): (key: string, value: unknown) => void {\n if (!options.capturePersistEvents) {\n return originalMethod;\n }\n\n return function instrumentedOnPersist(key: string, value: unknown): void {\n const tracer = getTracer();\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const spanName = options.spanNameFormatter\n ? options.spanNameFormatter(actorInstance.name || '', 'persist')\n : `Actor ${actorInstance.name || actorClassName}: persist ${key}`;\n\n tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n ...createActorAttributes(actorInstance, actorClass, 'persist'),\n 'actor.persist.key': key,\n 'actor.persist.value_type': typeof value,\n },\n },\n (span) => {\n try {\n originalMethod.call(actorInstance, key, value);\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 WebSocket lifecycle methods\n */\nfunction instrumentWebSocketConnect(\n originalMethod: (ws: WebSocket, request: Request) => void,\n actorInstance: ActorLike,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): (ws: WebSocket, request: Request) => void {\n return function instrumentedWebSocketConnect(ws: WebSocket, request: Request): void {\n const tracer = getTracer();\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const spanName = options.spanNameFormatter\n ? options.spanNameFormatter(actorInstance.name || '', 'websocket.connect')\n : defaultSpanNameFormatter(actorInstance.name || '', actorClassName, 'websocket.connect');\n\n tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.SERVER,\n attributes: {\n ...createActorAttributes(actorInstance, actorClass, 'websocket.connect'),\n 'url.full': request.url,\n },\n },\n (span) => {\n try {\n originalMethod.call(actorInstance, ws, request);\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\nfunction instrumentWebSocketMessage(\n originalMethod: (ws: WebSocket, message: unknown) => void,\n actorInstance: ActorLike,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): (ws: WebSocket, message: unknown) => void {\n return function instrumentedWebSocketMessage(ws: WebSocket, message: unknown): void {\n const tracer = getTracer();\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const spanName = options.spanNameFormatter\n ? options.spanNameFormatter(actorInstance.name || '', 'websocket.message')\n : defaultSpanNameFormatter(actorInstance.name || '', actorClassName, 'websocket.message');\n\n tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.SERVER,\n attributes: {\n ...createActorAttributes(actorInstance, actorClass, 'websocket.message'),\n 'websocket.message.type': typeof message,\n 'websocket.message.size':\n typeof message === 'string'\n ? message.length\n : message instanceof ArrayBuffer\n ? message.byteLength\n : 0,\n },\n },\n (span) => {\n try {\n originalMethod.call(actorInstance, ws, message);\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\nfunction instrumentWebSocketDisconnect(\n originalMethod: (ws: WebSocket) => void,\n actorInstance: ActorLike,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): (ws: WebSocket) => void {\n return function instrumentedWebSocketDisconnect(ws: WebSocket): void {\n const tracer = getTracer();\n const actorClassName = (actorClass as { name?: string }).name || 'Actor';\n const spanName = options.spanNameFormatter\n ? options.spanNameFormatter(actorInstance.name || '', 'websocket.disconnect')\n : defaultSpanNameFormatter(actorInstance.name || '', actorClassName, 'websocket.disconnect');\n\n tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.SERVER,\n attributes: createActorAttributes(actorInstance, actorClass, 'websocket.disconnect'),\n },\n (span) => {\n try {\n originalMethod.call(actorInstance, ws);\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 an Actor instance by wrapping all lifecycle methods\n */\nfunction instrumentActorInstance(\n actorInstance: ActorLike,\n _state: DurableObjectState,\n _env: unknown,\n actorClass: object,\n options: ActorInstrumentationOptions,\n): ActorLike {\n const instanceHandler: ProxyHandler<ActorLike> = {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n // Lifecycle methods that need instrumentation\n if (prop === 'onInit' && typeof value === 'function') {\n return instrumentOnInit(value.bind(target), target, actorClass, options);\n }\n\n if (prop === 'onRequest' && typeof value === 'function') {\n return instrumentOnRequest(value.bind(target), target, actorClass, options);\n }\n\n if (prop === 'onAlarm' && typeof value === 'function') {\n return instrumentOnAlarm(value.bind(target), target, actorClass, options);\n }\n\n if (prop === 'onPersist' && typeof value === 'function') {\n return instrumentOnPersist(value.bind(target), target, actorClass, options);\n }\n\n if (prop === 'onWebSocketConnect' && typeof value === 'function') {\n return instrumentWebSocketConnect(value.bind(target), target, actorClass, options);\n }\n\n if (prop === 'onWebSocketMessage' && typeof value === 'function') {\n return instrumentWebSocketMessage(value.bind(target), target, actorClass, options);\n }\n\n if (prop === 'onWebSocketDisconnect' && typeof value === 'function') {\n return instrumentWebSocketDisconnect(value.bind(target), target, actorClass, options);\n }\n\n // Instrument sub-components if enabled\n if (prop === 'storage' && value && options.instrumentStorage !== false) {\n return instrumentActorStorage(value, target, actorClass);\n }\n\n if (prop === 'alarms' && value && options.instrumentAlarms !== false) {\n return instrumentActorAlarms(value, target, actorClass);\n }\n\n if (prop === 'sockets' && value && options.instrumentSockets !== false) {\n return instrumentActorSockets(value, target, actorClass);\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(actorInstance, instanceHandler);\n}\n\n/**\n * Instrument an Actor class for comprehensive OpenTelemetry tracing\n *\n * This wraps the Actor class to automatically trace all lifecycle methods:\n * - onInit: Actor initialization\n * - onRequest: HTTP request handling\n * - onAlarm: Alarm triggers\n * - onPersist: Property persistence events\n * - WebSocket methods: Connection, message, disconnect\n *\n * It also optionally instruments:\n * - actor.storage: SQL queries and storage operations\n * - actor.alarms: Alarm scheduling operations\n * - actor.sockets: WebSocket operations\n *\n * @example\n * ```typescript\n * import { Actor } from '@cloudflare/actors'\n * import { instrumentActor } from 'autotel-cloudflare/actors'\n *\n * class Counter extends Actor<Env> {\n * protected onInit() {\n * console.log('Counter initialized')\n * }\n *\n * protected onRequest(request: Request) {\n * return new Response('count: 42')\n * }\n * }\n *\n * // Wrap the class\n * export const InstrumentedCounter = instrumentActor(Counter, (env: Env) => ({\n * service: { name: 'counter-actor' },\n * exporter: { url: env.OTLP_ENDPOINT },\n * actors: {\n * instrumentStorage: true,\n * capturePersistEvents: true\n * }\n * }))\n * ```\n *\n * @param actorClass - The Actor class to instrument\n * @param config - Configuration (static object or function)\n * @returns Instrumented Actor class\n */\nexport function instrumentActor<C extends ActorConstructor>(\n actorClass: C,\n config: ActorConfig | ((env: unknown, trigger?: unknown) => ActorConfig),\n): C {\n const initialiser = createInitialiser(config as ConfigurationOption);\n\n // Default options\n const defaultOptions: ActorInstrumentationOptions = {\n instrumentStorage: true,\n instrumentAlarms: true,\n instrumentSockets: true,\n capturePersistEvents: true,\n };\n\n const classHandler: ProxyHandler<C> = {\n construct(target, [state, env]: [DurableObjectState, unknown]) {\n // Get config (either static or from function)\n const resolvedConfig =\n typeof config === 'function'\n ? config(env, { id: state.id.toString(), name: state.id.name })\n : config;\n\n // Merge options with defaults\n // Handle the case where config might not have actors property\n const actorOptions =\n resolvedConfig && typeof resolvedConfig === 'object' && 'actors' in resolvedConfig\n ? (resolvedConfig as { actors?: ActorInstrumentationOptions }).actors\n : undefined;\n const options: ActorInstrumentationOptions = {\n ...defaultOptions,\n ...actorOptions,\n };\n\n // Initialize telemetry config\n const trigger = {\n id: state.id.toString(),\n name: state.id.name,\n };\n const telemetryConfig = initialiser(env, trigger);\n const context = setConfig(telemetryConfig);\n\n // Create the Actor instance within the config context\n const actorInstance = api_context.with(context, () => {\n return new target(state, env);\n }) as ActorLike;\n\n // Instrument the instance\n return instrumentActorInstance(actorInstance, state, env, actorClass, options);\n },\n };\n\n return wrap(actorClass, classHandler);\n}\n","/**\n * Traced handler wrapper for @cloudflare/actors\n *\n * Wraps the Actors handler() to provide:\n * - Root span for the entire request lifecycle\n * - Actor name extraction and correlation\n * - Request routing tracing\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 type { ActorConfig, ActorConstructor, ActorLike } from './types';\n\n/**\n * Get the tracer instance\n */\nfunction getTracer(): WorkerTracer {\n return trace.getTracer('autotel-cloudflare-actors') as WorkerTracer;\n}\n\n/**\n * Worker handler type matching @cloudflare/actors output\n */\ninterface WorkerHandler<E = unknown> {\n fetch(request: Request, env: E, ctx: ExecutionContext): Promise<Response>;\n}\n\n/**\n * Create a traced handler that combines Actor instrumentation with request tracing\n *\n * This is an all-in-one wrapper that:\n * 1. Initializes telemetry for the Worker\n * 2. Creates a root span for each incoming request\n * 3. Extracts the Actor name using `nameFromRequest`\n * 4. Instruments the Actor class with lifecycle tracing\n * 5. Routes the request to the instrumented Actor\n *\n * @example\n * ```typescript\n * import { Actor } from '@cloudflare/actors'\n * import { tracedHandler } from 'autotel-cloudflare/actors'\n *\n * class MyActor extends Actor<Env> {\n * protected onRequest(request: Request) {\n * return new Response('Hello!')\n * }\n * }\n *\n * // Export the Actor class and use tracedHandler\n * export { MyActor }\n * export default tracedHandler(MyActor, (env) => ({\n * service: { name: 'my-actor-service' },\n * exporter: { url: env.OTLP_ENDPOINT }\n * }))\n * ```\n *\n * @param actorClass - The Actor class to handle requests\n * @param config - Configuration (static object or function)\n * @returns A Worker handler with full tracing\n */\nexport function tracedHandler<E, A extends ActorLike>(\n actorClass: ActorConstructor<A> & {\n nameFromRequest?(request: Request): Promise<string | undefined>;\n configuration?(request: Request): { locationHint?: DurableObjectLocationHint };\n },\n config: ActorConfig | ((env: E, trigger?: unknown) => ActorConfig),\n): WorkerHandler<E> {\n const initialiser = createInitialiser(config as ConfigurationOption);\n\n // Note: The Actor class instrumentation happens at the DO level, not here.\n // This handler wraps the Worker entrypoint that routes to the DO.\n\n return {\n async fetch(request: Request, env: E, _ctx: ExecutionContext): Promise<Response> {\n // Initialize telemetry for this request\n const telemetryConfig = initialiser(env, { type: 'http' });\n const configContext = setConfig(telemetryConfig);\n\n // Extract parent context from request headers\n const parentContext = propagation.extract(configContext, request.headers);\n\n const tracer = getTracer();\n const url = new URL(request.url);\n const actorClassName = actorClass.name || 'Actor';\n\n // Get actor name from request (using the Actor's static method if available)\n let actorName: string | undefined;\n try {\n if (actorClass.nameFromRequest) {\n actorName = await actorClass.nameFromRequest(request);\n }\n } catch {\n actorName = undefined;\n }\n\n const spanName = `${actorClassName} handler: ${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 'url.path': url.pathname,\n 'url.query': url.search,\n 'actor.class': actorClassName,\n ...(actorName && { 'actor.name': actorName }),\n 'faas.trigger': 'http',\n },\n },\n parentContext,\n async (span) => {\n try {\n // Get Actor stub using the same pattern as @cloudflare/actors handler()\n const envObj = env as Record<string, DurableObjectNamespace>;\n\n // Find the binding name for this Actor class\n const bindingName = Object.keys(envObj).find((key) => {\n const binding = (env as Record<string, unknown>).__DURABLE_OBJECT_BINDINGS as\n | Record<string, { class_name?: string }>\n | undefined;\n return key === actorClassName || binding?.[key]?.class_name === actorClassName;\n });\n\n if (!bindingName) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `No Durable Object binding found for ${actorClassName}`,\n });\n return Response.json(\n {\n error: 'Configuration Error',\n message: `No Durable Object binding found for actor class ${actorClassName}`,\n },\n { status: 500, headers: { 'Content-Type': 'application/json' } },\n );\n }\n\n const namespace = envObj[bindingName];\n const idString = actorName || 'default';\n\n // Get location hint if available\n const locationHint = actorClass.configuration?.(request)?.locationHint;\n\n // Get the Durable Object stub\n const stub = namespace.getByName(idString, { locationHint });\n\n // Set the name on the stub (as @cloudflare/actors does)\n if ('setName' in stub && typeof stub.setName === 'function') {\n (stub as unknown as { setName(id: string): void }).setName(idString);\n }\n\n // Inject trace context into the request for propagation to the DO\n const headers = new Headers(request.headers);\n propagation.inject(api_context.active(), headers);\n\n // Create a new request with the injected headers\n const tracedRequest = new Request(request.url, {\n method: request.method,\n headers,\n body: request.body,\n redirect: request.redirect,\n });\n\n // Forward the request to the Durable Object\n const response = await stub.fetch(tracedRequest);\n\n span.setAttributes({\n 'http.response.status_code': response.status,\n 'actor.name': idString,\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\n return Response.json(\n {\n error: 'Internal Server Error',\n message: error instanceof Error ? error.message : 'Unknown error',\n },\n { status: 500, headers: { 'Content-Type': 'application/json' } },\n );\n } finally {\n span.end();\n }\n },\n );\n },\n };\n}\n\n/**\n * Alternative: Create a handler wrapper that uses the existing @cloudflare/actors handler\n *\n * This is useful if you want to use the original handler() but add tracing around it.\n *\n * @example\n * ```typescript\n * import { Actor, handler } from '@cloudflare/actors'\n * import { wrapHandler } from 'autotel-cloudflare/actors'\n *\n * class MyActor extends Actor<Env> {}\n *\n * export { MyActor }\n * export default wrapHandler(handler(MyActor), (env) => ({\n * service: { name: 'my-service' }\n * }))\n * ```\n */\nexport function wrapHandler<E>(\n originalHandler: WorkerHandler<E>,\n config: ActorConfig | ((env: E, trigger?: unknown) => ActorConfig),\n): WorkerHandler<E> {\n const initialiser = createInitialiser(config as ConfigurationOption);\n\n return {\n async fetch(request: Request, env: E, ctx: ExecutionContext): Promise<Response> {\n // Initialize telemetry for this request\n const telemetryConfig = initialiser(env, { type: 'http' });\n const configContext = setConfig(telemetryConfig);\n\n // Extract parent context from request headers\n const parentContext = propagation.extract(configContext, request.headers);\n\n const tracer = getTracer();\n const url = new URL(request.url);\n\n return tracer.startActiveSpan(\n `Worker: ${request.method} ${url.pathname}`,\n {\n kind: SpanKind.SERVER,\n attributes: {\n 'http.request.method': request.method,\n 'url.full': request.url,\n 'url.path': url.pathname,\n 'url.query': url.search,\n 'faas.trigger': 'http',\n },\n },\n parentContext,\n async (span) => {\n try {\n // Inject trace context into request\n const headers = new Headers(request.headers);\n propagation.inject(api_context.active(), headers);\n\n const tracedRequest = new Request(request.url, {\n method: request.method,\n headers,\n body: request.body,\n redirect: request.redirect,\n });\n\n const response = await originalHandler.fetch(tracedRequest, env, ctx);\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"]}
|
package/dist/agents.d.ts
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { ConfigurationOption } from 'autotel-edge';
|
|
2
|
+
import { Attributes } from '@opentelemetry/api';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Type definitions for Cloudflare Agents SDK observability integration
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Base event structure from Agents SDK (mirrors agents/src/observability/base.ts)
|
|
10
|
+
*/
|
|
11
|
+
interface BaseAgentEvent<T extends string, Payload extends Record<string, unknown> = Record<string, unknown>> {
|
|
12
|
+
type: T;
|
|
13
|
+
/** Unique identifier for the event */
|
|
14
|
+
id: string;
|
|
15
|
+
/** Human-readable message for logging */
|
|
16
|
+
displayMessage: string;
|
|
17
|
+
/** Event payload with type-specific data */
|
|
18
|
+
payload: Payload & Record<string, unknown>;
|
|
19
|
+
/** Timestamp in milliseconds since epoch */
|
|
20
|
+
timestamp: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Agent-specific observability events
|
|
24
|
+
*/
|
|
25
|
+
type AgentObservabilityEvent = BaseAgentEvent<'state:update', Record<string, unknown>> | BaseAgentEvent<'rpc', {
|
|
26
|
+
method: string;
|
|
27
|
+
streaming?: boolean;
|
|
28
|
+
}> | BaseAgentEvent<'message:request' | 'message:response', Record<string, unknown>> | BaseAgentEvent<'message:clear'> | BaseAgentEvent<'schedule:create' | 'schedule:execute' | 'schedule:cancel', {
|
|
29
|
+
callback: string;
|
|
30
|
+
id: string;
|
|
31
|
+
}> | BaseAgentEvent<'destroy'> | BaseAgentEvent<'connect', {
|
|
32
|
+
connectionId: string;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* MCP-specific observability events
|
|
36
|
+
*/
|
|
37
|
+
type MCPObservabilityEvent = BaseAgentEvent<'mcp:client:preconnect', {
|
|
38
|
+
serverId: string;
|
|
39
|
+
}> | BaseAgentEvent<'mcp:client:connect', {
|
|
40
|
+
url: string;
|
|
41
|
+
transport: string;
|
|
42
|
+
state: string;
|
|
43
|
+
error?: string;
|
|
44
|
+
}> | BaseAgentEvent<'mcp:client:authorize', {
|
|
45
|
+
serverId: string;
|
|
46
|
+
authUrl: string;
|
|
47
|
+
clientId?: string;
|
|
48
|
+
}> | BaseAgentEvent<'mcp:client:discover', Record<string, unknown>>;
|
|
49
|
+
/**
|
|
50
|
+
* Union of all observability event types
|
|
51
|
+
*/
|
|
52
|
+
type ObservabilityEvent = AgentObservabilityEvent | MCPObservabilityEvent;
|
|
53
|
+
/**
|
|
54
|
+
* Observability interface from Agents SDK
|
|
55
|
+
*/
|
|
56
|
+
interface Observability {
|
|
57
|
+
/**
|
|
58
|
+
* Emit an event for the Agent's observability implementation to handle.
|
|
59
|
+
* @param event - The event to emit
|
|
60
|
+
* @param ctx - The execution context of the invocation (optional)
|
|
61
|
+
*/
|
|
62
|
+
emit(event: ObservabilityEvent, ctx?: DurableObjectState): void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Agent-specific instrumentation options
|
|
66
|
+
*/
|
|
67
|
+
interface AgentInstrumentationOptions {
|
|
68
|
+
/**
|
|
69
|
+
* Whether to create spans for RPC calls
|
|
70
|
+
* @default true
|
|
71
|
+
*/
|
|
72
|
+
traceRpc?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Whether to create spans for schedule operations
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
traceSchedule?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Whether to create spans for MCP operations
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
traceMcp?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Whether to create spans for state updates
|
|
85
|
+
* @default false (can be noisy)
|
|
86
|
+
*/
|
|
87
|
+
traceStateUpdates?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Whether to create spans for message events
|
|
90
|
+
* @default true
|
|
91
|
+
*/
|
|
92
|
+
traceMessages?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Whether to create spans for connect/destroy lifecycle events
|
|
95
|
+
* @default true
|
|
96
|
+
*/
|
|
97
|
+
traceLifecycle?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Custom attribute extractor for events
|
|
100
|
+
*/
|
|
101
|
+
attributeExtractor?: (event: ObservabilityEvent) => Attributes;
|
|
102
|
+
/**
|
|
103
|
+
* Custom span name formatter
|
|
104
|
+
*/
|
|
105
|
+
spanNameFormatter?: (event: ObservabilityEvent) => string;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Configuration for OtelObservability
|
|
109
|
+
*/
|
|
110
|
+
type OtelObservabilityConfig = ConfigurationOption & {
|
|
111
|
+
/**
|
|
112
|
+
* Agent-specific instrumentation options
|
|
113
|
+
*/
|
|
114
|
+
agents?: AgentInstrumentationOptions;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Semantic attributes for Agent spans
|
|
118
|
+
*/
|
|
119
|
+
interface AgentSpanAttributes {
|
|
120
|
+
'agent.event.type': string;
|
|
121
|
+
'agent.event.id': string;
|
|
122
|
+
'agent.rpc.method'?: string;
|
|
123
|
+
'agent.rpc.streaming'?: boolean;
|
|
124
|
+
'agent.schedule.callback'?: string;
|
|
125
|
+
'agent.schedule.id'?: string;
|
|
126
|
+
'agent.connection.id'?: string;
|
|
127
|
+
'agent.mcp.server_id'?: string;
|
|
128
|
+
'agent.mcp.url'?: string;
|
|
129
|
+
'agent.mcp.transport'?: string;
|
|
130
|
+
'agent.mcp.state'?: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* OpenTelemetry-based Observability implementation for Cloudflare Agents SDK
|
|
135
|
+
*
|
|
136
|
+
* Converts Agent events into OpenTelemetry spans for distributed tracing.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* import { Agent } from 'agents'
|
|
141
|
+
* import { createOtelObservability } from 'autotel-cloudflare/agents'
|
|
142
|
+
*
|
|
143
|
+
* class MyAgent extends Agent<Env> {
|
|
144
|
+
* observability = createOtelObservability({
|
|
145
|
+
* service: { name: 'my-agent' },
|
|
146
|
+
* exporter: { url: env.OTLP_ENDPOINT }
|
|
147
|
+
* })
|
|
148
|
+
*
|
|
149
|
+
* @callable()
|
|
150
|
+
* async doSomething() {
|
|
151
|
+
* // This RPC call will be automatically traced
|
|
152
|
+
* return 'done'
|
|
153
|
+
* }
|
|
154
|
+
* }
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* OpenTelemetry-based Observability implementation
|
|
160
|
+
*
|
|
161
|
+
* Implements the Agents SDK Observability interface and converts
|
|
162
|
+
* events into OpenTelemetry spans.
|
|
163
|
+
*/
|
|
164
|
+
declare class OtelObservability implements Observability {
|
|
165
|
+
private config;
|
|
166
|
+
private options;
|
|
167
|
+
private initialized;
|
|
168
|
+
constructor(config: OtelObservabilityConfig);
|
|
169
|
+
/**
|
|
170
|
+
* Initialize the tracer provider (called lazily on first emit)
|
|
171
|
+
*/
|
|
172
|
+
private initialize;
|
|
173
|
+
/**
|
|
174
|
+
* Emit an observability event
|
|
175
|
+
*
|
|
176
|
+
* Converts the event to an OpenTelemetry span based on the event type.
|
|
177
|
+
*/
|
|
178
|
+
emit(event: ObservabilityEvent, ctx?: DurableObjectState): void;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Create an OtelObservability instance
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```typescript
|
|
185
|
+
* import { Agent } from 'agents'
|
|
186
|
+
* import { createOtelObservability } from 'autotel-cloudflare/agents'
|
|
187
|
+
*
|
|
188
|
+
* class MyAgent extends Agent<Env> {
|
|
189
|
+
* observability = createOtelObservability({
|
|
190
|
+
* service: { name: 'my-agent' },
|
|
191
|
+
* exporter: { url: env.OTLP_ENDPOINT }
|
|
192
|
+
* })
|
|
193
|
+
* }
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
declare function createOtelObservability(config: OtelObservabilityConfig): OtelObservability;
|
|
197
|
+
/**
|
|
198
|
+
* Create an OtelObservability instance with environment-based config
|
|
199
|
+
*
|
|
200
|
+
* Use this when you need to access environment variables for configuration.
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* import { Agent } from 'agents'
|
|
205
|
+
* import { createOtelObservabilityFromEnv } from 'autotel-cloudflare/agents'
|
|
206
|
+
*
|
|
207
|
+
* class MyAgent extends Agent<Env> {
|
|
208
|
+
* observability?: OtelObservability
|
|
209
|
+
*
|
|
210
|
+
* constructor(state: DurableObjectState, env: Env) {
|
|
211
|
+
* super(state, env)
|
|
212
|
+
* this.observability = createOtelObservabilityFromEnv(env)
|
|
213
|
+
* }
|
|
214
|
+
* }
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
declare function createOtelObservabilityFromEnv(env: Record<string, unknown>, options?: AgentInstrumentationOptions): OtelObservability;
|
|
218
|
+
|
|
219
|
+
export { type AgentInstrumentationOptions, type AgentObservabilityEvent, type AgentSpanAttributes, type MCPObservabilityEvent, type Observability, type ObservabilityEvent, OtelObservability, type OtelObservabilityConfig, createOtelObservability, createOtelObservabilityFromEnv };
|