@inference-net/otel-cf-workers 2.2.0 → 2.3.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/index.d.ts +31 -18
- package/dist/index.js +123 -68
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/buffer.ts","../src/sampling.ts","../src/types.ts","../src/wrap.ts","../src/constants.ts","../src/exporter.ts","../src/spanprocessor.ts","../src/logs/logprocessor.ts","../src/config.ts","../src/context.ts","../src/span.ts","../src/tracer.ts","../src/provider.ts","../src/logs/logrecord.ts","../src/logs/logger.ts","../src/logs/provider.ts","../src/instrumentation/user-agent.ts","../src/instrumentation/universal-attributes.ts","../src/instrumentation/fetch.ts","../src/instrumentation/cache.ts","../src/instrumentation/queue.ts","../src/instrumentation/kv.ts","../src/instrumentation/service.ts","../src/instrumentation/d1.ts","../src/instrumentation/analytics-engine.ts","../src/instrumentation/r2.ts","../src/instrumentation/images.ts","../src/instrumentation/rate-limit.ts","../src/instrumentation/env.ts","../src/instrumentation/do-storage.ts","../src/instrumentation/rpc-context.ts","../src/instrumentation/do.ts","../src/instrumentation/scheduled.ts","../src/instrumentation/version.ts","../src/instrumentation/common.ts","../src/instrumentation/email.ts","../src/sdk.ts","../src/multiexporter.ts","../src/logs/transport.ts"],"sourcesContent":["//@ts-ignore\nimport { Buffer } from 'node:buffer'\n//@ts-ignore\nglobalThis.Buffer = Buffer\n","import { TraceFlags, SpanStatusCode } from '@opentelemetry/api'\nimport { ParentBasedSampler, ReadableSpan, Sampler, TraceIdRatioBasedSampler } from '@opentelemetry/sdk-trace-base'\nimport { ParentRatioSamplingConfig } from './types'\n\nexport interface LocalTrace {\n\treadonly traceId: string\n\treadonly localRootSpan: ReadableSpan\n\treadonly spans: ReadableSpan[]\n}\n\nexport type TailSampleFn = (traceInfo: LocalTrace) => boolean\n\nexport function multiTailSampler(samplers: TailSampleFn[]): TailSampleFn {\n\treturn (traceInfo) => {\n\t\treturn samplers.reduce((result, sampler) => result || sampler(traceInfo), false)\n\t}\n}\n\nexport const isHeadSampled: TailSampleFn = (traceInfo) => {\n\tconst localRootSpan = traceInfo.localRootSpan\n\treturn (localRootSpan.spanContext().traceFlags & TraceFlags.SAMPLED) === TraceFlags.SAMPLED\n}\n\nexport const isRootErrorSpan: TailSampleFn = (traceInfo) => {\n\tconst localRootSpan = traceInfo.localRootSpan\n\treturn localRootSpan.status.code === SpanStatusCode.ERROR\n}\n\nexport function createSampler(conf: ParentRatioSamplingConfig): Sampler {\n\tconst ratioSampler = new TraceIdRatioBasedSampler(conf.ratio)\n\tif (typeof conf.acceptRemote === 'boolean' && !conf.acceptRemote) {\n\t\treturn new ParentBasedSampler({\n\t\t\troot: ratioSampler,\n\t\t\tremoteParentSampled: ratioSampler,\n\t\t\tremoteParentNotSampled: ratioSampler,\n\t\t})\n\t} else {\n\t\treturn new ParentBasedSampler({ root: ratioSampler })\n\t}\n}\n","import { Attributes, Context, SpanOptions, TextMapPropagator, Span } from '@opentelemetry/api'\nimport { ReadableSpan, Sampler, SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport { OTLPExporterConfig } from './exporter'\nimport { FetchHandlerConfig, FetcherConfig } from './instrumentation/fetch'\nimport { TailSampleFn } from './sampling'\nimport { LogTransport, LogRecordProcessor, BatchConfig as LogBatchConfig } from './logs/types'\n\nexport type OrPromise<T extends any> = T | Promise<T>\n\nexport type ResolveConfigFn<Env = any> = (env: Env, trigger: Trigger) => WorkerOtelConfig\nexport type ConfigurationOption = WorkerOtelConfig | ResolveConfigFn\n\nexport type PostProcessorFn = (spans: ReadableSpan[]) => ReadableSpan[]\n\nexport type ExporterConfig = OTLPExporterConfig | SpanExporter\n\nexport interface InitialSpanInfo {\n\tname: string\n\toptions: SpanOptions\n\tcontext?: Context\n}\n\nexport interface HandlerInstrumentation<T extends Trigger, R extends any> {\n\tgetInitialSpanInfo: (trigger: T) => InitialSpanInfo\n\tgetAttributesFromResult?: (result: Awaited<R>) => Attributes\n\tinstrumentTrigger?: (trigger: T) => T\n\texecutionSucces?: (span: Span, trigger: T, result: Awaited<R>) => void\n\texecutionFailed?: (span: Span, trigger: T, error?: any) => void\n}\n\nexport type TraceFlushableSpanProcessor = SpanProcessor & { forceFlush: (traceId?: string) => Promise<void> }\n\nexport interface HandlerConfig {\n\tfetch?: FetchHandlerConfig\n}\n\nexport interface ServiceConfig {\n\tname: string\n\tnamespace?: string\n\tversion?: string\n}\n\nexport interface ParentRatioSamplingConfig {\n\tacceptRemote?: boolean\n\tratio: number\n}\n\ntype HeadSamplerConf = Sampler | ParentRatioSamplingConfig\nexport interface SamplingConfig<HS extends HeadSamplerConf = HeadSamplerConf> {\n\theadSampler?: HS\n\ttailSampler?: TailSampleFn\n}\n\nexport interface InstrumentationOptions {\n\tinstrumentGlobalFetch?: boolean\n\tinstrumentGlobalCache?: boolean\n}\n\nexport type BatchStrategy = 'trace' | 'immediate' | 'size'\n\nexport interface TraceBatchConfig {\n\tstrategy?: BatchStrategy\n\tmaxQueueSize?: number\n\tmaxExportBatchSize?: number\n}\n\ninterface TraceConfigBase {\n\thandlers?: HandlerConfig\n\tfetch?: FetcherConfig\n\tpostProcessor?: PostProcessorFn\n\tsampling?: SamplingConfig\n\tinstrumentation?: InstrumentationOptions\n\tbatching?: TraceBatchConfig\n}\n\ninterface TraceConfigExporter extends TraceConfigBase {\n\texporter: ExporterConfig\n}\n\ninterface TraceConfigSpanProcessors extends TraceConfigBase {\n\tspanProcessors: SpanProcessor | SpanProcessor[]\n}\n\nexport type TraceConfig = TraceConfigExporter | TraceConfigSpanProcessors\n\nexport function isSpanProcessorConfig(config: TraceConfig): config is TraceConfigSpanProcessors {\n\treturn !!(config as TraceConfigSpanProcessors).spanProcessors\n}\n\nexport interface ResolvedTraceConfig extends TraceConfigBase {\n\thandlers: Required<HandlerConfig>\n\tfetch: Required<FetcherConfig>\n\tpostProcessor: PostProcessorFn\n\tsampling: Required<SamplingConfig<Sampler>>\n\tspanProcessors: SpanProcessor[]\n\tinstrumentation: InstrumentationOptions\n\tbatching: TraceBatchConfig\n}\n\nexport interface LogsInstrumentationOptions {\n\tinstrumentConsole?: boolean\n}\n\nexport interface LogsConfig {\n\ttransports?: LogTransport[]\n\tbatching?: LogBatchConfig\n\tinstrumentation?: LogsInstrumentationOptions\n\tlevel?: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'\n}\n\nexport interface ResolvedLogsConfig {\n\tprocessors: LogRecordProcessor[]\n\tinstrumentation: LogsInstrumentationOptions\n\tlevel: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'\n}\n\nexport interface WorkerOtelConfig {\n\tservice: ServiceConfig\n\ttrace?: TraceConfig\n\tlogs?: LogsConfig\n\tpropagator?: TextMapPropagator\n}\n\nexport interface DOConstructorTrigger {\n\tid: string\n\tname?: string\n}\n\nexport type Trigger =\n\t| Request\n\t| MessageBatch\n\t| ScheduledController\n\t| DOConstructorTrigger\n\t| 'do-alarm'\n\t| 'do-rpc'\n\t| ForwardableEmailMessage\n","const unwrapSymbol = Symbol('unwrap')\n\ntype Wrapped<T> = { [unwrapSymbol]: T } & T\n\nexport function isWrapped<T>(item: T): item is Wrapped<T> {\n\treturn item && !!(item as Wrapped<T>)[unwrapSymbol]\n}\n\nexport function isProxyable(item: any) {\n\treturn (item !== null && typeof item === 'object') || typeof item === 'function'\n}\n\nexport function wrap<T extends object>(item: T, handler: ProxyHandler<T>, autoPassthrough: boolean = true): T {\n\tif (isWrapped(item) || !isProxyable(item)) {\n\t\treturn item\n\t}\n\tconst proxyHandler = Object.assign({}, handler)\n\tproxyHandler.get = (target, prop, receiver) => {\n\t\tif (prop === unwrapSymbol) {\n\t\t\treturn item\n\t\t} else {\n\t\t\tif (handler.get) {\n\t\t\t\treturn handler.get(target, prop, receiver)\n\t\t\t} else if (prop === 'bind') {\n\t\t\t\treturn () => receiver\n\t\t\t} else if (autoPassthrough) {\n\t\t\t\treturn passthroughGet(target, prop)\n\t\t\t}\n\t\t}\n\t}\n\tproxyHandler.apply = (target, thisArg, argArray) => {\n\t\tif (handler.apply) {\n\t\t\treturn handler.apply(unwrap(target), unwrap(thisArg), argArray)\n\t\t}\n\t}\n\treturn new Proxy(item, proxyHandler)\n}\n\nexport function unwrap<T extends object>(item: T): T {\n\tif (item && isWrapped(item)) {\n\t\treturn item[unwrapSymbol]\n\t} else {\n\t\treturn item\n\t}\n}\n\nexport function passthroughGet(target: any, prop: string | symbol, thisArg?: any) {\n\tconst unwrappedTarget = unwrap(target)\n\tthisArg = unwrap(thisArg) || unwrappedTarget\n\tconst value = Reflect.get(unwrappedTarget, prop)\n\tif (typeof value === 'function') {\n\t\tif (value.constructor.name === 'RpcProperty') {\n\t\t\treturn (...args: unknown[]) => unwrappedTarget[prop](...args)\n\t\t}\n\t\treturn value.bind(thisArg)\n\t} else {\n\t\treturn value\n\t}\n}\n","// note (harry): These constants are injected at build time by Vite\ndeclare const __PACKAGE_VERSION__: string\ndeclare const __PACKAGE_NAME__: string\n\nexport const PACKAGE_VERSION = __PACKAGE_VERSION__\nexport const PACKAGE_NAME = __PACKAGE_NAME__\n\n/**\n * Cloudflare-specific OpenTelemetry attribute keys\n * Aligned with official Cloudflare Workers telemetry specification\n */\n\n// ============================================================================\n// Universal Attributes (all spans)\n// ============================================================================\n\nexport const ATTR_CLOUD_PROVIDER = 'cloud.provider'\nexport const ATTR_CLOUD_PLATFORM = 'cloud.platform'\nexport const ATTR_CLOUDFLARE_COLO = 'cloudflare.colo'\nexport const ATTR_CLOUDFLARE_SCRIPT_NAME = 'cloudflare.script_name'\nexport const ATTR_CLOUDFLARE_SCRIPT_TAGS = 'cloudflare.script_tags'\nexport const ATTR_CLOUDFLARE_SCRIPT_VERSION_ID = 'cloudflare.script_version.id'\nexport const ATTR_TELEMETRY_SDK_NAME = 'telemetry.sdk.name'\nexport const ATTR_TELEMETRY_SDK_LANGUAGE = 'telemetry.sdk.language'\n\n// ============================================================================\n// Root Span Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_RAY_ID = 'cloudflare.ray_id'\nexport const ATTR_CLOUDFLARE_HANDLER_TYPE = 'cloudflare.handler_type'\nexport const ATTR_CLOUDFLARE_ENTRYPOINT = 'cloudflare.entrypoint'\nexport const ATTR_CLOUDFLARE_EXECUTION_MODEL = 'cloudflare.execution_model'\nexport const ATTR_CLOUDFLARE_OUTCOME = 'cloudflare.outcome'\nexport const ATTR_CLOUDFLARE_CPU_TIME_MS = 'cloudflare.cpu_time_ms'\nexport const ATTR_CLOUDFLARE_WALL_TIME_MS = 'cloudflare.wall_time_ms'\n\n// ============================================================================\n// HTTP / Fetch Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_VERIFIED_BOT_CATEGORY = 'cloudflare.verified_bot_category'\nexport const ATTR_CLOUDFLARE_ASN = 'cloudflare.asn'\nexport const ATTR_CLOUDFLARE_RESPONSE_TTFB_MS = 'cloudflare.response.time_to_first_byte_ms'\n\n// Geo attributes\nexport const ATTR_GEO_TIMEZONE = 'geo.timezone'\nexport const ATTR_GEO_CONTINENT_CODE = 'geo.continent.code'\nexport const ATTR_GEO_COUNTRY_CODE = 'geo.country.code'\nexport const ATTR_GEO_LOCALITY_NAME = 'geo.locality.name'\nexport const ATTR_GEO_LOCALITY_REGION = 'geo.locality.region'\n\n// User agent attributes\nexport const ATTR_USER_AGENT_OS_NAME = 'user_agent.os.name'\nexport const ATTR_USER_AGENT_OS_VERSION = 'user_agent.os.version'\nexport const ATTR_USER_AGENT_BROWSER_NAME = 'user_agent.browser.name'\nexport const ATTR_USER_AGENT_BROWSER_MAJOR_VERSION = 'user_agent.browser.major_version'\nexport const ATTR_USER_AGENT_BROWSER_VERSION = 'user_agent.browser.version'\nexport const ATTR_USER_AGENT_ENGINE_NAME = 'user_agent.engine.name'\nexport const ATTR_USER_AGENT_ENGINE_VERSION = 'user_agent.engine.version'\nexport const ATTR_USER_AGENT_DEVICE_TYPE = 'user_agent.device.type'\nexport const ATTR_USER_AGENT_DEVICE_VENDOR = 'user_agent.device.vendor'\nexport const ATTR_USER_AGENT_DEVICE_MODEL = 'user_agent.device.model'\n\n// HTTP headers\nexport const ATTR_HTTP_REQUEST_HEADER_CONTENT_TYPE = 'http.request.header.content-type'\nexport const ATTR_HTTP_REQUEST_HEADER_CONTENT_LENGTH = 'http.request.header.content-length'\nexport const ATTR_HTTP_REQUEST_HEADER_ACCEPT = 'http.request.header.accept'\nexport const ATTR_HTTP_REQUEST_HEADER_ACCEPT_ENCODING = 'http.request.header.accept-encoding'\nexport const ATTR_HTTP_REQUEST_HEADER_ACCEPT_LANGUAGE = 'http.request.header.accept-language'\n\n// ============================================================================\n// Scheduled Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_SCHEDULED_TIME = 'cloudflare.scheduled_time'\n\n// ============================================================================\n// Queue Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_QUEUE_NAME = 'cloudflare.queue.name'\nexport const ATTR_CLOUDFLARE_QUEUE_BATCH_SIZE = 'cloudflare.queue.batch_size'\n\n// ============================================================================\n// Email Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_EMAIL_FROM = 'cloudflare.email.from'\nexport const ATTR_CLOUDFLARE_EMAIL_TO = 'cloudflare.email.to'\nexport const ATTR_CLOUDFLARE_EMAIL_SIZE = 'cloudflare.email.size'\n\n// ============================================================================\n// Binding Attributes (Common)\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_BINDING_TYPE = 'cloudflare.binding.type'\nexport const ATTR_CLOUDFLARE_BINDING_NAME = 'cloudflare.binding.name'\nexport const ATTR_DB_SYSTEM_NAME = 'db.system.name'\nexport const ATTR_DB_OPERATION_NAME = 'db.operation.name'\n\n// ============================================================================\n// D1 Database Attributes\n// ============================================================================\n\nexport const ATTR_DB_QUERY_TEXT = 'db.query.text'\nexport const ATTR_DB_OPERATION_BATCH_SIZE = 'db.operation.batch.size'\n\nexport const ATTR_CLOUDFLARE_D1_QUERY_BOOKMARK = 'cloudflare.d1.query.bookmark'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_BOOKMARK = 'cloudflare.d1.response.bookmark'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SIZE_AFTER = 'cloudflare.d1.response.size_after'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_READ = 'cloudflare.d1.response.rows_read'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_WRITTEN = 'cloudflare.d1.response.rows_written'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_LAST_ROW_ID = 'cloudflare.d1.response.last_row_id'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_CHANGED_DB = 'cloudflare.d1.response.changed_db'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_CHANGES = 'cloudflare.d1.response.changes'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SERVED_BY_REGION = 'cloudflare.d1.response.served_by_region'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SERVED_BY_PRIMARY = 'cloudflare.d1.response.served_by_primary'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SQL_DURATION_MS = 'cloudflare.d1.response.sql_duration_ms'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_TOTAL_ATTEMPTS = 'cloudflare.d1.response.total_attempts'\n\n// ============================================================================\n// KV Namespace Attributes\n// ============================================================================\n\n// Query attributes\nexport const ATTR_CLOUDFLARE_KV_QUERY_KEYS = 'cloudflare.kv.query.keys'\nexport const ATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT = 'cloudflare.kv.query.keys.count'\nexport const ATTR_CLOUDFLARE_KV_QUERY_TYPE = 'cloudflare.kv.query.type'\nexport const ATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL = 'cloudflare.kv.query.cache_ttl'\nexport const ATTR_CLOUDFLARE_KV_QUERY_VALUE_TYPE = 'cloudflare.kv.query.value_type'\nexport const ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION = 'cloudflare.kv.query.expiration'\nexport const ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION_TTL = 'cloudflare.kv.query.expiration_ttl'\nexport const ATTR_CLOUDFLARE_KV_QUERY_METADATA = 'cloudflare.kv.query.metadata'\nexport const ATTR_CLOUDFLARE_KV_QUERY_PAYLOAD_SIZE = 'cloudflare.kv.query.payload.size'\nexport const ATTR_CLOUDFLARE_KV_QUERY_PREFIX = 'cloudflare.kv.query.prefix'\nexport const ATTR_CLOUDFLARE_KV_QUERY_LIMIT = 'cloudflare.kv.query.limit'\nexport const ATTR_CLOUDFLARE_KV_QUERY_CURSOR = 'cloudflare.kv.query.cursor'\n\n// Response attributes\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_SIZE = 'cloudflare.kv.response.size'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_RETURNED_ROWS = 'cloudflare.kv.response.returned_rows'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_METADATA = 'cloudflare.kv.response.metadata'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS = 'cloudflare.kv.response.cache_status'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_LIST_COMPLETE = 'cloudflare.kv.response.list_complete'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_CURSOR = 'cloudflare.kv.response.cursor'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_EXPIRATION = 'cloudflare.kv.response.expiration'\n\n// ============================================================================\n// R2 Storage Attributes\n// ============================================================================\n\n// Query attributes\nexport const ATTR_CLOUDFLARE_R2_QUERY_KEY = 'cloudflare.r2.query.key'\nexport const ATTR_CLOUDFLARE_R2_QUERY_PREFIX = 'cloudflare.r2.query.prefix'\nexport const ATTR_CLOUDFLARE_R2_QUERY_LIMIT = 'cloudflare.r2.query.limit'\nexport const ATTR_CLOUDFLARE_R2_QUERY_DELIMITER = 'cloudflare.r2.query.delimiter'\nexport const ATTR_CLOUDFLARE_R2_QUERY_START_AFTER = 'cloudflare.r2.query.start_after'\nexport const ATTR_CLOUDFLARE_R2_QUERY_INCLUDE = 'cloudflare.r2.query.include'\nexport const ATTR_CLOUDFLARE_R2_QUERY_RANGE = 'cloudflare.r2.query.range'\nexport const ATTR_CLOUDFLARE_R2_QUERY_OFFSET = 'cloudflare.r2.query.offset'\nexport const ATTR_CLOUDFLARE_R2_QUERY_LENGTH = 'cloudflare.r2.query.length'\nexport const ATTR_CLOUDFLARE_R2_QUERY_SUFFIX = 'cloudflare.r2.query.suffix'\nexport const ATTR_CLOUDFLARE_R2_QUERY_ONLY_IF = 'cloudflare.r2.query.only_if'\n\n// Put operation attributes\nexport const ATTR_CLOUDFLARE_R2_PUT_HTTP_METADATA = 'cloudflare.r2.put.http_metadata'\nexport const ATTR_CLOUDFLARE_R2_PUT_CUSTOM_METADATA = 'cloudflare.r2.put.custom_metadata'\nexport const ATTR_CLOUDFLARE_R2_PUT_MD5 = 'cloudflare.r2.put.md5'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA1 = 'cloudflare.r2.put.sha1'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA256 = 'cloudflare.r2.put.sha256'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA384 = 'cloudflare.r2.put.sha384'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA512 = 'cloudflare.r2.put.sha512'\nexport const ATTR_CLOUDFLARE_R2_PUT_STORAGE_CLASS = 'cloudflare.r2.put.storage_class'\n\n// Response attributes\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_SIZE = 'cloudflare.r2.response.size'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_ETAG = 'cloudflare.r2.response.etag'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_VERSION = 'cloudflare.r2.response.version'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_UPLOADED = 'cloudflare.r2.response.uploaded'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_TYPE =\n\t'cloudflare.r2.response.http_metadata.content_type'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_LANGUAGE =\n\t'cloudflare.r2.response.http_metadata.content_language'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_DISPOSITION =\n\t'cloudflare.r2.response.http_metadata.content_disposition'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_ENCODING =\n\t'cloudflare.r2.response.http_metadata.content_encoding'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_CONTROL =\n\t'cloudflare.r2.response.http_metadata.cache_control'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_EXPIRY =\n\t'cloudflare.r2.response.http_metadata.cache_expiry'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CUSTOM_METADATA_KEYS = 'cloudflare.r2.response.custom_metadata.keys'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_RANGE = 'cloudflare.r2.response.range'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_STORAGE_CLASS = 'cloudflare.r2.response.storage_class'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_MD5 = 'cloudflare.r2.response.checksums.md5'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA1 = 'cloudflare.r2.response.checksums.sha1'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA256 = 'cloudflare.r2.response.checksums.sha256'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA384 = 'cloudflare.r2.response.checksums.sha384'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA512 = 'cloudflare.r2.response.checksums.sha512'\n\n// List operation attributes\nexport const ATTR_CLOUDFLARE_R2_LIST_TRUNCATED = 'cloudflare.r2.list.truncated'\nexport const ATTR_CLOUDFLARE_R2_LIST_OBJECTS_COUNT = 'cloudflare.r2.list.objects.count'\nexport const ATTR_CLOUDFLARE_R2_LIST_DELIMITED_PREFIXES_COUNT = 'cloudflare.r2.list.delimited_prefixes.count'\nexport const ATTR_CLOUDFLARE_R2_LIST_CURSOR = 'cloudflare.r2.list.cursor'\n\n// Multipart upload attributes\nexport const ATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID = 'cloudflare.r2.multipart.upload_id'\nexport const ATTR_CLOUDFLARE_R2_MULTIPART_PART_NUMBER = 'cloudflare.r2.multipart.part_number'\nexport const ATTR_CLOUDFLARE_R2_MULTIPART_PARTS_COUNT = 'cloudflare.r2.multipart.parts.count'\n\n// ============================================================================\n// Cache API Attributes\n// ============================================================================\n\nexport const ATTR_CACHE_CONTROL_EXPIRATION = 'cache_control.expiration'\nexport const ATTR_CACHE_CONTROL_REVALIDATION = 'cache_control.revalidation'\n\n// ============================================================================\n// Durable Object Storage (KV API) Attributes\n// ============================================================================\n\n// Query attributes\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS = 'cloudflare.durable_object.kv.query.keys'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT = 'cloudflare.durable_object.kv.query.keys.count'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_START = 'cloudflare.durable_object.kv.query.start'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_START_AFTER = 'cloudflare.durable_object.kv.query.startAfter'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_END = 'cloudflare.durable_object.kv.query.end'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_PREFIX = 'cloudflare.durable_object.kv.query.prefix'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_REVERSE = 'cloudflare.durable_object.kv.query.reverse'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_LIMIT = 'cloudflare.durable_object.kv.query.limit'\n\n// Response attributes\nexport const ATTR_CLOUDFLARE_DO_KV_RESPONSE_DELETED_COUNT = 'cloudflare.durable_object.kv.response.deleted_count'\n\n// Custom attributes (not in CF spec but useful)\nexport const ATTR_CLOUDFLARE_DO_ALLOW_CONCURRENCY = 'cloudflare.durable_object.allow_concurrency'\nexport const ATTR_CLOUDFLARE_DO_ALLOW_UNCONFIRMED = 'cloudflare.durable_object.allow_unconfirmed'\nexport const ATTR_CLOUDFLARE_DO_NO_CACHE = 'cloudflare.durable_object.no_cache'\n\n// ============================================================================\n// Durable Object SQL Storage Attributes (for future implementation)\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_DO_SQL_QUERY_BINDINGS = 'cloudflare.durable_object.query.bindings'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_READ = 'cloudflare.durable_object.response.rows_read'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_WRITTEN = 'cloudflare.durable_object.response.rows_written'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_DB_SIZE = 'cloudflare.durable_object.response.db_size'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_STATEMENT_COUNT = 'cloudflare.durable_object.response.statement_count'\n\n// ============================================================================\n// Images Binding Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_IMAGES_KEY = 'cloudflare.images.key'\nexport const ATTR_CLOUDFLARE_IMAGES_VARIANT = 'cloudflare.images.variant'\nexport const ATTR_CLOUDFLARE_IMAGES_VARIANTS_COUNT = 'cloudflare.images.variants.count'\nexport const ATTR_CLOUDFLARE_IMAGES_UPLOADED = 'cloudflare.images.uploaded'\nexport const ATTR_CLOUDFLARE_IMAGES_RESPONSE_ID = 'cloudflare.images.response.id'\nexport const ATTR_CLOUDFLARE_IMAGES_RESPONSE_FILENAME = 'cloudflare.images.response.filename'\nexport const ATTR_CLOUDFLARE_IMAGES_METADATA_KEYS = 'cloudflare.images.metadata.keys'\nexport const ATTR_CLOUDFLARE_IMAGES_REQUIRE_SIGNED_URLS = 'cloudflare.images.require_signed_urls'\n\n// ============================================================================\n// Rate Limiting Binding Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_RATE_LIMIT_KEY = 'cloudflare.rate_limit.key'\nexport const ATTR_CLOUDFLARE_RATE_LIMIT_ALLOWED = 'cloudflare.rate_limit.allowed'\nexport const ATTR_CLOUDFLARE_RATE_LIMIT_SUCCESS = 'cloudflare.rate_limit.success'\n\n// ============================================================================\n// RPC Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_JSRPC_METHOD = 'cloudflare.jsrpc.method'\nexport const ATTR_RPC_SYSTEM = 'rpc.system'\nexport const ATTR_RPC_SERVICE = 'rpc.service'\nexport const ATTR_RPC_METHOD = 'rpc.method'\n\n// ============================================================================\n// OTLP Exporter Constants (shared by traces and logs)\n// ============================================================================\n\nexport const DEFAULT_OTLP_HEADERS: Record<string, string> = {\n\taccept: 'application/json',\n\t'content-type': 'application/json',\n\t'user-agent': `Cloudflare Worker ${PACKAGE_NAME} v${PACKAGE_VERSION}`,\n}\n\nexport const DEFAULT_TRACE_ENDPOINT = '/v1/traces'\nexport const DEFAULT_LOGS_ENDPOINT = '/v1/logs'\n\n// ============================================================================\n// Log Severity Levels (OpenTelemetry standard)\n// ============================================================================\n\nexport const SEVERITY_NUMBERS = {\n\tTRACE: 1,\n\tTRACE2: 2,\n\tTRACE3: 3,\n\tTRACE4: 4,\n\tDEBUG: 5,\n\tDEBUG2: 6,\n\tDEBUG3: 7,\n\tDEBUG4: 8,\n\tINFO: 9,\n\tINFO2: 10,\n\tINFO3: 11,\n\tINFO4: 12,\n\tWARN: 13,\n\tWARN2: 14,\n\tWARN3: 15,\n\tWARN4: 16,\n\tERROR: 17,\n\tERROR2: 18,\n\tERROR3: 19,\n\tERROR4: 20,\n\tFATAL: 21,\n\tFATAL2: 22,\n\tFATAL3: 23,\n\tFATAL4: 24,\n} as const\n\nexport type SeverityNumber = (typeof SEVERITY_NUMBERS)[keyof typeof SEVERITY_NUMBERS]\n","import { ExportResult, ExportResultCode } from '@opentelemetry/core'\nimport { OTLPExporterError } from '@opentelemetry/otlp-exporter-base'\nimport { JsonTraceSerializer } from '@opentelemetry/otlp-transformer'\nimport { SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { unwrap } from './wrap'\nimport { DEFAULT_OTLP_HEADERS } from './constants'\n\nexport interface OTLPExporterConfig {\n\turl: string\n\theaders?: Record<string, string>\n}\n\nexport class OTLPExporter implements SpanExporter {\n\tprivate headers: Record<string, string>\n\tprivate url: string\n\tconstructor(config: OTLPExporterConfig) {\n\t\tthis.url = config.url\n\t\tthis.headers = Object.assign({}, DEFAULT_OTLP_HEADERS, config.headers)\n\t}\n\n\texport(items: any[], resultCallback: (result: ExportResult) => void): void {\n\t\tthis._export(items)\n\t\t\t.then(() => {\n\t\t\t\tresultCallback({ code: ExportResultCode.SUCCESS })\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tresultCallback({ code: ExportResultCode.FAILED, error })\n\t\t\t})\n\t}\n\n\tprivate _export(items: any[]): Promise<unknown> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tthis.send(items, resolve, reject)\n\t\t\t} catch (e) {\n\t\t\t\treject(e)\n\t\t\t}\n\t\t})\n\t}\n\n\tsend(items: any[], onSuccess: () => void, onError: (error: OTLPExporterError) => void): void {\n\t\tconst decoder = new TextDecoder()\n\t\tconst exportMessage = JsonTraceSerializer.serializeRequest(items)\n\n\t\tconst body = decoder.decode(exportMessage)\n\t\tconst params: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.headers,\n\t\t\tbody,\n\t\t}\n\n\t\tunwrap(fetch)(this.url, params)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tonSuccess()\n\t\t\t\t} else {\n\t\t\t\t\tonError(new OTLPExporterError(`Exporter received a statusCode: ${response.status}`))\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tonError(new OTLPExporterError(`Exception during export: ${error.toString()}`, error.code, error.stack))\n\t\t\t})\n\t}\n\n\tasync shutdown(): Promise<void> {}\n}\n","import { Context, Span } from '@opentelemetry/api'\nimport { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { ExportResultCode } from '@opentelemetry/core'\nimport { getActiveConfig } from './config'\nimport { TraceFlushableSpanProcessor } from './types'\nimport { TailSampleFn } from './sampling'\n\nfunction getSampler(): TailSampleFn {\n\tconst conf = getActiveConfig()\n\tif (!conf) {\n\t\tconsole.log('Could not find config for sampling, sending everything by default')\n\t}\n\treturn conf ? conf.sampling.tailSampler : () => true\n}\n\nclass TraceState {\n\tprivate unexportedSpans: ReadableSpan[] = []\n\tprivate inprogressSpans = new Set<string>()\n\tprivate exporter: SpanExporter\n\tprivate exportPromises: Promise<void>[] = []\n\tprivate localRootSpan?: ReadableSpan\n\tprivate traceDecision?: boolean\n\n\tconstructor(exporter: SpanExporter) {\n\t\tthis.exporter = exporter\n\t}\n\n\taddSpan(span: Span): void {\n\t\tconst readableSpan = span as unknown as ReadableSpan\n\t\tthis.localRootSpan = this.localRootSpan || readableSpan\n\t\tthis.unexportedSpans.push(readableSpan)\n\t\tthis.inprogressSpans.add(span.spanContext().spanId)\n\t}\n\n\tendSpan(span: ReadableSpan): void {\n\t\tthis.inprogressSpans.delete(span.spanContext().spanId)\n\t\tif (this.inprogressSpans.size === 0) {\n\t\t\tthis.flush()\n\t\t}\n\t}\n\n\tsample() {\n\t\tif (this.traceDecision === undefined && this.unexportedSpans.length > 0) {\n\t\t\tconst sampler = getSampler()\n\t\t\tthis.traceDecision = sampler({\n\t\t\t\ttraceId: this.localRootSpan!.spanContext().traceId,\n\t\t\t\tlocalRootSpan: this.localRootSpan!,\n\t\t\t\tspans: this.unexportedSpans,\n\t\t\t})\n\t\t}\n\t\tthis.unexportedSpans = this.traceDecision ? this.unexportedSpans : []\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.unexportedSpans.length > 0) {\n\t\t\tconst unfinishedSpans = this.unexportedSpans.filter((span) => this.isSpanInProgress(span)) as unknown as Span[]\n\t\t\tfor (const span of unfinishedSpans) {\n\t\t\t\tconsole.log(`Span ${span.spanContext().spanId} was not ended properly`)\n\t\t\t\tspan.end()\n\t\t\t}\n\t\t\tthis.sample()\n\t\t\tthis.exportPromises.push(this.exportSpans(this.unexportedSpans))\n\t\t\tthis.unexportedSpans = []\n\t\t}\n\t\tif (this.exportPromises.length > 0) {\n\t\t\tawait Promise.allSettled(this.exportPromises)\n\t\t}\n\t}\n\n\tprivate isSpanInProgress(span: ReadableSpan) {\n\t\treturn this.inprogressSpans.has(span.spanContext().spanId)\n\t}\n\n\tprivate async exportSpans(spans: ReadableSpan[]): Promise<void> {\n\t\tawait scheduler.wait(1)\n\t\tconst promise = new Promise<void>((resolve, reject) => {\n\t\t\tthis.exporter.export(spans, (result) => {\n\t\t\t\tif (result.code === ExportResultCode.SUCCESS) {\n\t\t\t\t\tresolve()\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('exporting spans failed! ' + result.error)\n\t\t\t\t\treject(result.error)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t\tawait promise\n\t}\n}\n\ntype traceId = string\nexport class BatchTraceSpanProcessor implements TraceFlushableSpanProcessor {\n\tprivate traces: Record<traceId, TraceState> = {}\n\n\tconstructor(private exporter: SpanExporter) {}\n\n\tgetTraceState(traceId: string): TraceState {\n\t\tconst traceState = this.traces[traceId] || new TraceState(this.exporter)\n\t\tthis.traces[traceId] = traceState\n\t\treturn traceState\n\t}\n\n\tonStart(span: Span, _parentContext: Context): void {\n\t\tconst traceId = span.spanContext().traceId\n\t\tthis.getTraceState(traceId).addSpan(span)\n\t}\n\n\tonEnd(span: ReadableSpan): void {\n\t\tconst traceId = span.spanContext().traceId\n\t\tthis.getTraceState(traceId).endSpan(span)\n\t}\n\n\tasync forceFlush(traceId?: traceId): Promise<void> {\n\t\tif (traceId) {\n\t\t\tawait this.getTraceState(traceId).flush()\n\t\t} else {\n\t\t\tconst promises = Object.values(this.traces).map((traceState: TraceState) => traceState.flush)\n\t\t\tawait Promise.allSettled(promises)\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.forceFlush()\n\t}\n}\n","import { Context } from '@opentelemetry/api'\nimport { ExportResultCode } from '@opentelemetry/core'\nimport { LogRecordProcessor, LogTransport, ReadableLogRecord, BatchConfig } from './types'\n\n/**\n * Immediate Log Record Processor\n * Exports each log record immediately without batching\n */\nexport class ImmediateLogRecordProcessor implements LogRecordProcessor {\n\tprivate transport: LogTransport\n\tprivate exportPromises: Promise<void>[] = []\n\n\tconstructor(transport: LogTransport) {\n\t\tthis.transport = transport\n\t}\n\n\tonEmit(logRecord: ReadableLogRecord, _context: Context): void {\n\t\tthis.exportPromises.push(this.exportLog(logRecord))\n\t}\n\n\tprivate async exportLog(logRecord: ReadableLogRecord): Promise<void> {\n\t\tawait scheduler.wait(1)\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.transport.export([logRecord], (result) => {\n\t\t\t\tif (result.code === ExportResultCode.SUCCESS) {\n\t\t\t\t\tresolve()\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to export log:', result.error)\n\t\t\t\t\treject(result.error)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tif (this.exportPromises.length > 0) {\n\t\t\tawait Promise.allSettled(this.exportPromises)\n\t\t\tthis.exportPromises = []\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.forceFlush()\n\t\tawait this.transport.shutdown()\n\t}\n}\n\n/**\n * Batch Size Log Record Processor\n * Batches log records up to a maximum queue size before exporting\n */\nexport class BatchSizeLogRecordProcessor implements LogRecordProcessor {\n\tprivate transport: LogTransport\n\tprivate logRecords: ReadableLogRecord[] = []\n\tprivate exportPromises: Promise<void>[] = []\n\tprivate maxQueueSize: number\n\tprivate maxExportBatchSize: number\n\n\tconstructor(transport: LogTransport, config?: BatchConfig) {\n\t\tthis.transport = transport\n\t\tthis.maxQueueSize = config?.maxQueueSize ?? 512\n\t\tthis.maxExportBatchSize = config?.maxExportBatchSize ?? this.maxQueueSize\n\t}\n\n\tonEmit(logRecord: ReadableLogRecord, _context: Context): void {\n\t\tthis.logRecords.push(logRecord)\n\n\t\t// Auto-flush if queue is full\n\t\tif (this.logRecords.length >= this.maxQueueSize) {\n\t\t\tthis.exportPromises.push(this.export())\n\t\t}\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tif (this.logRecords.length > 0) {\n\t\t\tthis.exportPromises.push(this.export())\n\t\t}\n\n\t\tif (this.exportPromises.length > 0) {\n\t\t\tawait Promise.allSettled(this.exportPromises)\n\t\t\tthis.exportPromises = []\n\t\t}\n\t}\n\n\tprivate async export(): Promise<void> {\n\t\t// Take up to maxExportBatchSize records\n\t\tconst batch = this.logRecords.splice(0, this.maxExportBatchSize)\n\n\t\tif (batch.length === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tawait scheduler.wait(1)\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.transport.export(batch, (result) => {\n\t\t\t\tif (result.code === ExportResultCode.SUCCESS) {\n\t\t\t\t\tresolve()\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to export logs:', result.error)\n\t\t\t\t\treject(result.error)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.forceFlush()\n\t\tawait this.transport.shutdown()\n\t}\n}\n\n/**\n * Multi-Transport Log Record Processor\n * Sends log records to multiple transports in parallel\n */\nexport class MultiTransportLogRecordProcessor implements LogRecordProcessor {\n\tprivate processors: LogRecordProcessor[]\n\n\tconstructor(transports: LogTransport[], config?: BatchConfig) {\n\t\t// Create a processor for each transport\n\t\tthis.processors = transports.map((transport) => {\n\t\t\treturn createLogProcessor(transport, config)\n\t\t})\n\t}\n\n\tonEmit(logRecord: ReadableLogRecord, context: Context): void {\n\t\t// Send to all processors\n\t\tthis.processors.forEach((p) => p.onEmit(logRecord, context))\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tawait Promise.allSettled(this.processors.map((p) => p.forceFlush()))\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait Promise.allSettled(this.processors.map((p) => p.shutdown()))\n\t}\n}\n\n/**\n * Factory function to create a log processor based on strategy\n */\nexport function createLogProcessor(transport: LogTransport, config?: BatchConfig): LogRecordProcessor {\n\tconst strategy = config?.strategy ?? 'size'\n\n\tswitch (strategy) {\n\t\tcase 'immediate':\n\t\t\treturn new ImmediateLogRecordProcessor(transport)\n\t\tcase 'size':\n\t\t\treturn new BatchSizeLogRecordProcessor(transport, config)\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown batch strategy: ${strategy}`)\n\t}\n}\n","import { context } from '@opentelemetry/api'\nimport {\n\tExporterConfig,\n\tisSpanProcessorConfig,\n\tParentRatioSamplingConfig,\n\tResolvedTraceConfig,\n\tTraceConfig,\n\tTrigger,\n\tWorkerOtelConfig,\n\tResolvedLogsConfig,\n\tLogsConfig,\n} from './types'\nimport { ReadableSpan, Sampler, SpanExporter } from '@opentelemetry/sdk-trace-base'\n\nimport { OTLPExporter } from './exporter'\nimport { multiTailSampler, isHeadSampled, isRootErrorSpan, createSampler } from './sampling'\nimport { BatchTraceSpanProcessor } from './spanprocessor'\nimport { MultiTransportLogRecordProcessor } from './logs/logprocessor'\n\nconst traceConfigSymbol = Symbol('Otel Workers Tracing Configuration')\nconst logsConfigSymbol = Symbol('Otel Workers Logs Configuration')\n\nexport interface ResolvedConfig {\n\ttrace?: ResolvedTraceConfig\n\tlogs?: ResolvedLogsConfig\n}\n\nexport type Initialiser = (env: Record<string, unknown>, trigger: Trigger) => ResolvedConfig\n\nexport function setConfig(config: ResolvedConfig, ctx = context.active()) {\n\tlet newCtx = ctx\n\tif (config.trace) {\n\t\tnewCtx = newCtx.setValue(traceConfigSymbol, config.trace)\n\t}\n\tif (config.logs) {\n\t\tnewCtx = newCtx.setValue(logsConfigSymbol, config.logs)\n\t}\n\treturn newCtx\n}\n\nexport function getActiveConfig(): ResolvedTraceConfig | undefined {\n\tconst config = context.active().getValue(traceConfigSymbol) as ResolvedTraceConfig\n\treturn config || undefined\n}\n\nexport function getActiveLogsConfig(): ResolvedLogsConfig | undefined {\n\tconst config = context.active().getValue(logsConfigSymbol) as ResolvedLogsConfig\n\treturn config || undefined\n}\n\nfunction isSpanExporter(exporterConfig: ExporterConfig): exporterConfig is SpanExporter {\n\treturn !!(exporterConfig as SpanExporter).export\n}\n\nfunction isSampler(sampler: Sampler | ParentRatioSamplingConfig): sampler is Sampler {\n\treturn !!(sampler as Sampler).shouldSample\n}\n\nexport function parseConfig(supplied: WorkerOtelConfig): ResolvedConfig {\n\tconst config: ResolvedConfig = {}\n\n\t// Parse trace config if provided\n\tif (supplied.trace) {\n\t\tconfig.trace = parseTraceConfig(supplied.trace, supplied.propagator)\n\t}\n\n\t// Parse logs config if provided\n\tif (supplied.logs) {\n\t\tconfig.logs = parseLogsConfig(supplied.logs)\n\t}\n\n\treturn config\n}\n\nfunction parseTraceConfig(supplied: TraceConfig, propagator?: any): ResolvedTraceConfig {\n\tif (isSpanProcessorConfig(supplied)) {\n\t\tconst headSampleConf = supplied.sampling?.headSampler || { ratio: 1 }\n\t\tconst headSampler = isSampler(headSampleConf) ? headSampleConf : createSampler(headSampleConf)\n\t\tconst spanProcessors = Array.isArray(supplied.spanProcessors) ? supplied.spanProcessors : [supplied.spanProcessors]\n\t\tif (spanProcessors.length === 0) {\n\t\t\tconsole.log(\n\t\t\t\t'Warning! You must either specify an exporter or your own SpanProcessor(s)/Exporter combination in the open-telemetry configuration.',\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\tfetch: {\n\t\t\t\tincludeTraceContext: supplied.fetch?.includeTraceContext ?? true,\n\t\t\t},\n\t\t\thandlers: {\n\t\t\t\tfetch: {\n\t\t\t\t\tacceptTraceContext: supplied.handlers?.fetch?.acceptTraceContext ?? true,\n\t\t\t\t},\n\t\t\t},\n\t\t\tpostProcessor: supplied.postProcessor || ((spans: ReadableSpan[]) => spans),\n\t\t\tsampling: {\n\t\t\t\theadSampler,\n\t\t\t\ttailSampler: supplied.sampling?.tailSampler || multiTailSampler([isHeadSampled, isRootErrorSpan]),\n\t\t\t},\n\t\t\tspanProcessors,\n\t\t\tinstrumentation: {\n\t\t\t\tinstrumentGlobalCache: supplied.instrumentation?.instrumentGlobalCache ?? true,\n\t\t\t\tinstrumentGlobalFetch: supplied.instrumentation?.instrumentGlobalFetch ?? true,\n\t\t\t},\n\t\t\tbatching: {\n\t\t\t\tstrategy: supplied.batching?.strategy ?? 'trace',\n\t\t\t\tmaxQueueSize: supplied.batching?.maxQueueSize,\n\t\t\t\tmaxExportBatchSize: supplied.batching?.maxExportBatchSize,\n\t\t\t},\n\t\t}\n\t} else {\n\t\tconst exporter = isSpanExporter(supplied.exporter) ? supplied.exporter : new OTLPExporter(supplied.exporter)\n\t\tconst spanProcessors = [new BatchTraceSpanProcessor(exporter)]\n\t\tconst newConfig = Object.assign({}, supplied, { exporter: undefined, spanProcessors }) as TraceConfig\n\t\treturn parseTraceConfig(newConfig, propagator)\n\t}\n}\n\nfunction parseLogsConfig(supplied: LogsConfig): ResolvedLogsConfig {\n\tconst processors =\n\t\tsupplied.transports && supplied.transports.length > 0\n\t\t\t? [new MultiTransportLogRecordProcessor(supplied.transports, supplied.batching)]\n\t\t\t: []\n\n\treturn {\n\t\tprocessors,\n\t\tinstrumentation: {\n\t\t\tinstrumentConsole: supplied.instrumentation?.instrumentConsole ?? false,\n\t\t},\n\t\tlevel: supplied.level ?? 'info',\n\t}\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContextManager, Context, ROOT_CONTEXT } from '@opentelemetry/api'\n//@ts-ignore\nimport { AsyncLocalStorage } from 'node:async_hooks'\n//@ts-ignore\nimport { EventEmitter } from 'node:events'\n\ntype Func<T> = (...args: unknown[]) => T\n\n/**\n * Store a map for each event of all original listeners and their \"patched\"\n * version. So when a listener is removed by the user, the corresponding\n * patched function will be also removed.\n */\ninterface PatchMap {\n\t[name: string]: WeakMap<Func<void>, Func<void>>\n}\n\nconst ADD_LISTENER_METHODS = [\n\t'addListener' as const,\n\t'on' as const,\n\t'once' as const,\n\t'prependListener' as const,\n\t'prependOnceListener' as const,\n]\n\nabstract class AbstractAsyncHooksContextManager implements ContextManager {\n\tabstract active(): Context\n\n\tabstract with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n\t\tcontext: Context,\n\t\tfn: F,\n\t\tthisArg?: ThisParameterType<F>,\n\t\t...args: A\n\t): ReturnType<F>\n\n\tabstract enable(): this\n\n\tabstract disable(): this\n\n\t/**\n\t * Binds a the certain context or the active one to the target function and then returns the target\n\t * @param context A context (span) to be bind to target\n\t * @param target a function or event emitter. When target or one of its callbacks is called,\n\t * the provided context will be used as the active context for the duration of the call.\n\t */\n\tbind<T>(context: Context, target: T): T {\n\t\tif (target instanceof EventEmitter) {\n\t\t\treturn this._bindEventEmitter(context, target)\n\t\t}\n\n\t\tif (typeof target === 'function') {\n\t\t\treturn this._bindFunction(context, target)\n\t\t}\n\t\treturn target\n\t}\n\n\tprivate _bindFunction<T extends Function>(context: Context, target: T): T {\n\t\tconst manager = this\n\t\tconst contextWrapper = function (this: never, ...args: unknown[]) {\n\t\t\treturn manager.with(context, () => target.apply(this, args))\n\t\t}\n\t\tObject.defineProperty(contextWrapper, 'length', {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\twritable: false,\n\t\t\tvalue: target.length,\n\t\t})\n\t\t/**\n\t\t * It isn't possible to tell Typescript that contextWrapper is the same as T\n\t\t * so we forced to cast as any here.\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\treturn contextWrapper as any\n\t}\n\n\t/**\n\t * By default, EventEmitter call their callback with their context, which we do\n\t * not want, instead we will bind a specific context to all callbacks that\n\t * go through it.\n\t * @param context the context we want to bind\n\t * @param ee EventEmitter an instance of EventEmitter to patch\n\t */\n\tprivate _bindEventEmitter<T extends EventEmitter>(context: Context, ee: T): T {\n\t\tconst map = this._getPatchMap(ee)\n\t\tif (map !== undefined) return ee\n\t\tthis._createPatchMap(ee)\n\n\t\t// patch methods that add a listener to propagate context\n\t\tADD_LISTENER_METHODS.forEach((methodName) => {\n\t\t\tif (ee[methodName] === undefined) return\n\t\t\tee[methodName] = this._patchAddListener(ee, ee[methodName], context)\n\t\t})\n\t\t// patch methods that remove a listener\n\t\tif (typeof ee.removeListener === 'function') {\n\t\t\tee.removeListener = this._patchRemoveListener(ee, ee.removeListener)\n\t\t}\n\t\tif (typeof ee.off === 'function') {\n\t\t\tee.off = this._patchRemoveListener(ee, ee.off)\n\t\t}\n\t\t// patch method that remove all listeners\n\t\tif (typeof ee.removeAllListeners === 'function') {\n\t\t\tee.removeAllListeners = this._patchRemoveAllListeners(ee, ee.removeAllListeners)\n\t\t}\n\t\treturn ee\n\t}\n\n\t/**\n\t * Patch methods that remove a given listener so that we match the \"patched\"\n\t * version of that listener (the one that propagate context).\n\t * @param ee EventEmitter instance\n\t * @param original reference to the patched method\n\t */\n\tprivate _patchRemoveListener(ee: EventEmitter, original: Function) {\n\t\tconst contextManager = this\n\t\treturn function (this: never, event: string, listener: Func<void>) {\n\t\t\tconst events = contextManager._getPatchMap(ee)?.[event]\n\t\t\tif (events === undefined) {\n\t\t\t\treturn original.call(this, event, listener)\n\t\t\t}\n\t\t\tconst patchedListener = events.get(listener)\n\t\t\treturn original.call(this, event, patchedListener || listener)\n\t\t}\n\t}\n\n\t/**\n\t * Patch methods that remove all listeners so we remove our\n\t * internal references for a given event.\n\t * @param ee EventEmitter instance\n\t * @param original reference to the patched method\n\t */\n\tprivate _patchRemoveAllListeners(ee: EventEmitter, original: Function) {\n\t\tconst contextManager = this\n\t\treturn function (this: never, event: string) {\n\t\t\tconst map = contextManager._getPatchMap(ee)\n\t\t\tif (map !== undefined) {\n\t\t\t\tif (arguments.length === 0) {\n\t\t\t\t\tcontextManager._createPatchMap(ee)\n\t\t\t\t} else if (map[event] !== undefined) {\n\t\t\t\t\tdelete map[event]\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn original.apply(this, arguments)\n\t\t}\n\t}\n\n\t/**\n\t * Patch methods on an event emitter instance that can add listeners so we\n\t * can force them to propagate a given context.\n\t * @param ee EventEmitter instance\n\t * @param original reference to the patched method\n\t * @param [context] context to propagate when calling listeners\n\t */\n\tprivate _patchAddListener(ee: EventEmitter, original: Function, context: Context) {\n\t\tconst contextManager = this\n\t\treturn function (this: never, event: string, listener: Func<void>) {\n\t\t\t/**\n\t\t\t * This check is required to prevent double-wrapping the listener.\n\t\t\t * The implementation for ee.once wraps the listener and calls ee.on.\n\t\t\t * Without this check, we would wrap that wrapped listener.\n\t\t\t * This causes an issue because ee.removeListener depends on the onceWrapper\n\t\t\t * to properly remove the listener. If we wrap their wrapper, we break\n\t\t\t * that detection.\n\t\t\t */\n\t\t\tif (contextManager._wrapped) {\n\t\t\t\treturn original.call(this, event, listener)\n\t\t\t}\n\t\t\tlet map = contextManager._getPatchMap(ee)\n\t\t\tif (map === undefined) {\n\t\t\t\tmap = contextManager._createPatchMap(ee)\n\t\t\t}\n\t\t\tlet listeners = map[event]\n\t\t\tif (listeners === undefined) {\n\t\t\t\tlisteners = new WeakMap()\n\t\t\t\tmap[event] = listeners\n\t\t\t}\n\t\t\tconst patchedListener = contextManager.bind(context, listener)\n\t\t\t// store a weak reference of the user listener to ours\n\t\t\tlisteners.set(listener, patchedListener)\n\n\t\t\t/**\n\t\t\t * See comment at the start of this function for the explanation of this property.\n\t\t\t */\n\t\t\tcontextManager._wrapped = true\n\t\t\ttry {\n\t\t\t\treturn original.call(this, event, patchedListener)\n\t\t\t} finally {\n\t\t\t\tcontextManager._wrapped = false\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _createPatchMap(ee: EventEmitter): PatchMap {\n\t\tconst map = Object.create(null)\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t;(ee as any)[this._kOtListeners] = map\n\t\treturn map\n\t}\n\tprivate _getPatchMap(ee: EventEmitter): PatchMap | undefined {\n\t\treturn (ee as never)[this._kOtListeners]\n\t}\n\n\tprivate readonly _kOtListeners = Symbol('OtListeners')\n\tprivate _wrapped = false\n}\n\nexport class AsyncLocalStorageContextManager extends AbstractAsyncHooksContextManager {\n\tprivate _asyncLocalStorage: AsyncLocalStorage<Context>\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis._asyncLocalStorage = new AsyncLocalStorage()\n\t}\n\n\tactive(): Context {\n\t\treturn this._asyncLocalStorage.getStore() ?? ROOT_CONTEXT\n\t}\n\n\twith<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n\t\tcontext: Context,\n\t\tfn: F,\n\t\tthisArg?: ThisParameterType<F>,\n\t\t...args: A\n\t): ReturnType<F> {\n\t\tconst cb = thisArg == null ? fn : fn.bind(thisArg)\n\t\treturn this._asyncLocalStorage.run(context, cb as never, ...args)\n\t}\n\n\tenable(): this {\n\t\treturn this\n\t}\n\n\tdisable(): this {\n\t\tthis._asyncLocalStorage.disable()\n\t\treturn this\n\t}\n}\n","import {\n\tAttributes,\n\tAttributeValue,\n\tException,\n\tHrTime,\n\tLink,\n\tSpan,\n\tSpanContext,\n\tSpanKind,\n\tSpanStatus,\n\tSpanStatusCode,\n\tTimeInput,\n} from '@opentelemetry/api'\nimport {\n\thrTimeDuration,\n\tInstrumentationScope,\n\tisAttributeValue,\n\tisTimeInput,\n\tsanitizeAttributes,\n} from '@opentelemetry/core'\nimport { Resource } from '@opentelemetry/resources'\nimport { ReadableSpan, TimedEvent } from '@opentelemetry/sdk-trace-base'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\n\ntype OnSpanEnd = (span: Span) => void\n\ninterface SpanInit {\n\tattributes: unknown\n\tname: string\n\tonEnd: OnSpanEnd\n\tresource: Resource\n\tspanContext: SpanContext\n\tparentSpanContext?: SpanContext\n\tlinks?: Link[]\n\tparentSpanId?: string\n\tspanKind?: SpanKind\n\tstartTime?: TimeInput\n}\n\nfunction transformExceptionAttributes(exception: Exception): Attributes {\n\tconst attributes: Attributes = {}\n\tif (typeof exception === 'string') {\n\t\tattributes[SemanticAttributes.EXCEPTION_MESSAGE] = exception\n\t} else {\n\t\tif (exception.code) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_TYPE] = exception.code.toString()\n\t\t} else if (exception.name) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_TYPE] = exception.name\n\t\t}\n\t\tif (exception.message) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_MESSAGE] = exception.message\n\t\t}\n\t\tif (exception.stack) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_STACKTRACE] = exception.stack\n\t\t}\n\t}\n\treturn attributes\n}\n\nfunction millisToHr(millis: number): HrTime {\n\treturn [Math.trunc(millis / 1000), (millis % 1000) * 1e6]\n}\n\nfunction getHrTime(input?: TimeInput): HrTime {\n\tconst now = Date.now()\n\tif (!input) {\n\t\treturn millisToHr(now)\n\t} else if (input instanceof Date) {\n\t\treturn millisToHr(input.getTime())\n\t} else if (typeof input === 'number') {\n\t\t//TODO: do something with performance.now something\n\t\treturn millisToHr(input)\n\t} else if (Array.isArray(input)) {\n\t\treturn input\n\t}\n\n\tconst v: never = input\n\tthrow new Error(`unreachable value: ${JSON.stringify(v)}`)\n}\n\n// previously exported from OTel, now private\nfunction isAttributeKey(key: unknown): key is string {\n\treturn typeof key === 'string' && key.length > 0\n}\n\nexport class SpanImpl implements Span, ReadableSpan {\n\tname: string\n\tprivate readonly _spanContext: SpanContext\n\tprivate readonly onEnd: OnSpanEnd\n\treadonly parentSpanId?: string\n\treadonly parentSpanContext?: SpanContext | undefined\n\treadonly kind: SpanKind\n\treadonly attributes: Attributes\n\tstatus: SpanStatus = {\n\t\tcode: SpanStatusCode.UNSET,\n\t}\n\tendTime: HrTime = [0, 0]\n\tprivate _duration: HrTime = [0, 0]\n\treadonly startTime: HrTime\n\treadonly events: TimedEvent[] = []\n\treadonly links: Link[]\n\treadonly resource: Resource\n\tinstrumentationScope: InstrumentationScope = { name: '@inference-net/otel-cf-workers' }\n\tprivate _ended: boolean = false\n\tprivate _droppedAttributesCount: number = 0\n\tprivate _droppedEventsCount: number = 0\n\tprivate _droppedLinksCount: number = 0\n\n\tconstructor(init: SpanInit) {\n\t\tthis.name = init.name\n\t\tthis._spanContext = init.spanContext\n\t\tthis.parentSpanId = init.parentSpanId\n\t\tthis.parentSpanContext = init.parentSpanContext\n\t\tthis.kind = init.spanKind || SpanKind.INTERNAL\n\t\tthis.attributes = sanitizeAttributes(init.attributes)\n\t\tthis.startTime = getHrTime(init.startTime)\n\t\tthis.links = init.links || []\n\t\tthis.resource = init.resource\n\t\tthis.onEnd = init.onEnd\n\t}\n\n\taddLink(link: Link): this {\n\t\tthis.links.push(link)\n\t\treturn this\n\t}\n\taddLinks(links: Link[]): this {\n\t\tthis.links.push(...links)\n\t\treturn this\n\t}\n\n\tspanContext(): SpanContext {\n\t\treturn this._spanContext\n\t}\n\n\tsetAttribute(key: string, value?: AttributeValue): this {\n\t\tif (isAttributeKey(key) && isAttributeValue(value)) {\n\t\t\tthis.attributes[key] = value\n\t\t}\n\t\treturn this\n\t}\n\n\tsetAttributes(attributes: Attributes): this {\n\t\tfor (const [key, value] of Object.entries(attributes)) {\n\t\t\tthis.setAttribute(key, value)\n\t\t}\n\t\treturn this\n\t}\n\n\taddEvent(name: string, attributesOrStartTime?: Attributes | TimeInput, startTime?: TimeInput): this {\n\t\tif (isTimeInput(attributesOrStartTime)) {\n\t\t\tstartTime = attributesOrStartTime\n\t\t\tattributesOrStartTime = undefined\n\t\t}\n\n\t\tconst attributes = sanitizeAttributes(attributesOrStartTime)\n\t\tconst time = getHrTime(startTime)\n\t\tthis.events.push({ name, attributes, time })\n\t\treturn this\n\t}\n\n\tsetStatus(status: SpanStatus): this {\n\t\tthis.status = status\n\t\treturn this\n\t}\n\n\tupdateName(name: string): this {\n\t\tthis.name = name\n\t\treturn this\n\t}\n\n\tend(endTime?: TimeInput): void {\n\t\tif (this._ended) {\n\t\t\treturn\n\t\t}\n\t\tthis._ended = true\n\t\tthis.endTime = getHrTime(endTime)\n\t\tthis._duration = hrTimeDuration(this.startTime, this.endTime)\n\t\tthis.onEnd(this)\n\t}\n\n\tisRecording(): boolean {\n\t\treturn !this._ended\n\t}\n\n\trecordException(exception: Exception, time?: TimeInput): void {\n\t\tconst attributes = transformExceptionAttributes(exception)\n\t\tthis.addEvent('exception', attributes, time)\n\t}\n\n\tget duration(): HrTime {\n\t\treturn this._duration\n\t}\n\n\tget ended(): boolean {\n\t\treturn this._ended\n\t}\n\n\tget droppedAttributesCount(): number {\n\t\treturn this._droppedAttributesCount\n\t}\n\n\tget droppedEventsCount(): number {\n\t\treturn this._droppedEventsCount\n\t}\n\n\tget droppedLinksCount(): number {\n\t\treturn this._droppedLinksCount\n\t}\n}\n","import {\n\tAttributes,\n\tTracer,\n\tTraceFlags,\n\tSpan,\n\tSpanKind,\n\tSpanOptions,\n\tContext,\n\tcontext as api_context,\n\ttrace,\n\tSpanContext,\n} from '@opentelemetry/api'\nimport { sanitizeAttributes } from '@opentelemetry/core'\nimport { Resource } from '@opentelemetry/resources'\nimport { SpanProcessor, RandomIdGenerator, ReadableSpan, SamplingDecision } from '@opentelemetry/sdk-trace-base'\n\nimport { SpanImpl } from './span'\nimport { getActiveConfig } from './config'\nimport { TraceFlushableSpanProcessor } from './types'\n\nenum NewTraceFlags {\n\tRANDOM_TRACE_ID_SET = 2,\n\tRANDOM_TRACE_ID_UNSET = 0,\n}\n\ntype NewTraceFlagValues = NewTraceFlags.RANDOM_TRACE_ID_SET | NewTraceFlags.RANDOM_TRACE_ID_UNSET\n\nconst idGenerator: RandomIdGenerator = new RandomIdGenerator()\n\nlet withNextSpanAttributes: Attributes\n\nfunction getFlagAt(flagSequence: number, position: number): number {\n\treturn ((flagSequence >> (position - 1)) & 1) * position\n}\n\nexport class WorkerTracer implements Tracer {\n\tprivate readonly spanProcessors: TraceFlushableSpanProcessor[]\n\tprivate readonly resource: Resource\n\tconstructor(spanProcessors: SpanProcessor[], resource: Resource) {\n\t\tthis.spanProcessors = spanProcessors\n\t\tthis.resource = resource\n\t}\n\n\tasync forceFlush(traceId?: string) {\n\t\tconst promises = this.spanProcessors.map(async (spanProcessor) => {\n\t\t\tawait spanProcessor.forceFlush(traceId)\n\t\t})\n\t\tawait Promise.allSettled(promises)\n\t}\n\n\taddToResource(extra: Resource) {\n\t\tthis.resource.merge(extra)\n\t}\n\n\tstartSpan(name: string, options: SpanOptions = {}, context = api_context.active()): Span {\n\t\tif (options.root) {\n\t\t\tcontext = trace.deleteSpan(context)\n\t\t}\n\n\t\tconst config = getActiveConfig()\n\t\tif (!config) throw new Error('Config is undefined. This is a bug in the instrumentation logic')\n\n\t\tconst parentSpanContext = trace.getSpan(context)?.spanContext()\n\t\tconst { traceId, randomTraceFlag } = getTraceInfo(parentSpanContext)\n\n\t\tconst spanKind = options.kind || SpanKind.INTERNAL\n\t\tconst sanitisedAttrs = sanitizeAttributes(options.attributes)\n\t\tconst sampler = config.sampling.headSampler\n\t\tconst samplingDecision = sampler.shouldSample(context, traceId, name, spanKind, sanitisedAttrs, [])\n\t\tconst { decision, traceState, attributes: attrs } = samplingDecision\n\n\t\tconst attributes = Object.assign({}, options.attributes, attrs, withNextSpanAttributes)\n\t\twithNextSpanAttributes = {}\n\n\t\tconst spanId = idGenerator.generateSpanId()\n\t\tconst parentSpanId = parentSpanContext?.spanId\n\n\t\tconst sampleFlag = decision === SamplingDecision.RECORD_AND_SAMPLED ? TraceFlags.SAMPLED : TraceFlags.NONE\n\t\tconst traceFlags = sampleFlag + randomTraceFlag\n\t\tconst spanContext = { traceId, spanId, traceFlags, traceState }\n\n\t\tconst span = new SpanImpl({\n\t\t\tattributes: sanitizeAttributes(attributes),\n\t\t\tname,\n\t\t\tonEnd: (span) => {\n\t\t\t\tthis.spanProcessors.forEach((sp) => {\n\t\t\t\t\tsp.onEnd(span as unknown as ReadableSpan)\n\t\t\t\t})\n\t\t\t},\n\t\t\tresource: this.resource,\n\t\t\tspanContext,\n\t\t\tparentSpanContext,\n\t\t\tparentSpanId,\n\t\t\tspanKind,\n\t\t\tstartTime: options.startTime,\n\t\t})\n\t\tthis.spanProcessors.forEach((sp) => {\n\t\t\t//Do not get me started on the idosyncracies of the Otel JS libraries.\n\t\t\t//@ts-ignore\n\t\t\tsp.onStart(span, context)\n\t\t})\n\t\treturn span\n\t}\n\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(name: string, fn: F): ReturnType<F>\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(name: string, options: SpanOptions, fn: F): ReturnType<F>\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(\n\t\tname: string,\n\t\toptions: SpanOptions,\n\t\tcontext: Context,\n\t\tfn: F,\n\t): ReturnType<F>\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(name: string, ...args: unknown[]): ReturnType<F> {\n\t\tconst options = args.length > 1 ? (args[0] as SpanOptions) : undefined\n\t\tconst parentContext = args.length > 2 ? (args[1] as Context) : api_context.active()\n\t\tconst fn = args[args.length - 1] as F\n\n\t\tconst span = this.startSpan(name, options, parentContext)\n\t\tconst contextWithSpanSet = trace.setSpan(parentContext, span)\n\n\t\treturn api_context.with(contextWithSpanSet, fn, undefined, span)\n\t}\n}\n\nexport function withNextSpan(attrs: Attributes) {\n\twithNextSpanAttributes = Object.assign({}, withNextSpanAttributes, attrs)\n}\n\nfunction getTraceInfo(parentSpanContext?: SpanContext): { traceId: string; randomTraceFlag: NewTraceFlagValues } {\n\tif (parentSpanContext && trace.isSpanContextValid(parentSpanContext)) {\n\t\tconst { traceId, traceFlags } = parentSpanContext\n\t\treturn { traceId, randomTraceFlag: getFlagAt(traceFlags, 2) }\n\t} else {\n\t\treturn { traceId: idGenerator.generateTraceId(), randomTraceFlag: NewTraceFlags.RANDOM_TRACE_ID_SET }\n\t}\n}\n","import { context, trace, Tracer, TracerOptions, TracerProvider } from '@opentelemetry/api'\n\nimport { SpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport { Resource } from '@opentelemetry/resources'\n\nimport { AsyncLocalStorageContextManager } from './context'\nimport { WorkerTracer } from './tracer'\n\n/**\n * Register this TracerProvider for use with the OpenTelemetry API.\n * Undefined values may be replaced with defaults, and\n * null values will be skipped.\n *\n * @param config Configuration object for SDK registration\n */\nexport class WorkerTracerProvider implements TracerProvider {\n\tprivate spanProcessors: SpanProcessor[]\n\tprivate resource: Resource\n\tprivate tracers: Record<string, Tracer> = {}\n\n\tconstructor(spanProcessors: SpanProcessor[], resource: Resource) {\n\t\tthis.spanProcessors = spanProcessors\n\t\tthis.resource = resource\n\t}\n\n\tgetTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n\t\tconst key = `${name}@${version || ''}:${options?.schemaUrl || ''}`\n\t\tif (!this.tracers[key]) {\n\t\t\tthis.tracers[key] = new WorkerTracer(this.spanProcessors, this.resource)\n\t\t}\n\t\treturn this.tracers[key]!\n\t}\n\n\tregister(): void {\n\t\ttrace.setGlobalTracerProvider(this)\n\t\tcontext.setGlobalContextManager(new AsyncLocalStorageContextManager())\n\t}\n}\n","import { HrTime, TimeInput, trace } from '@opentelemetry/api'\nimport { InstrumentationScope, sanitizeAttributes } from '@opentelemetry/core'\nimport { Resource } from '@opentelemetry/resources'\nimport { LogAttributes, LogBody, ReadableLogRecord } from './types'\nimport { SeverityNumber } from '../constants'\n\nfunction millisToHr(millis: number): HrTime {\n\treturn [Math.trunc(millis / 1000), (millis % 1000) * 1e6]\n}\n\nfunction getHrTime(input?: TimeInput): HrTime {\n\tconst now = Date.now()\n\tif (!input) {\n\t\treturn millisToHr(now)\n\t} else if (input instanceof Date) {\n\t\treturn millisToHr(input.getTime())\n\t} else if (typeof input === 'number') {\n\t\treturn millisToHr(input)\n\t} else if (Array.isArray(input)) {\n\t\treturn input\n\t}\n\n\tconst v: never = input\n\tthrow new Error(`unreachable value: ${JSON.stringify(v)}`)\n}\n\nexport interface LogRecordInit {\n\tseverityNumber?: SeverityNumber\n\tseverityText?: string\n\tbody?: LogBody\n\tattributes?: LogAttributes\n\ttimestamp?: TimeInput\n\tobservedTimestamp?: TimeInput\n\ttraceId?: string\n\tspanId?: string\n\ttraceFlags?: number\n\tresource: Resource\n\tinstrumentationScope?: InstrumentationScope\n}\n\nexport class LogRecordImpl implements ReadableLogRecord {\n\treadonly timeUnixNano: HrTime\n\treadonly observedTimeUnixNano: HrTime\n\treadonly severityNumber?: SeverityNumber\n\treadonly severityText?: string\n\treadonly body?: LogBody\n\treadonly attributes: LogAttributes\n\treadonly traceId?: string\n\treadonly spanId?: string\n\treadonly traceFlags?: number\n\treadonly resource: Resource\n\treadonly instrumentationScope: InstrumentationScope\n\treadonly droppedAttributesCount: number = 0\n\n\tconstructor(init: LogRecordInit) {\n\t\tthis.timeUnixNano = getHrTime(init.timestamp)\n\t\tthis.observedTimeUnixNano = getHrTime(init.observedTimestamp)\n\t\tthis.severityNumber = init.severityNumber\n\t\tthis.severityText = init.severityText\n\t\tthis.body = init.body\n\t\tthis.attributes = sanitizeAttributes(init.attributes || {})\n\t\tthis.resource = init.resource\n\t\tthis.instrumentationScope = init.instrumentationScope || {\n\t\t\tname: '@inference-net/otel-cf-workers',\n\t\t}\n\n\t\t// Auto-inject trace context from active span if not provided\n\t\tconst activeSpan = trace.getActiveSpan()\n\t\tif (activeSpan && !init.traceId) {\n\t\t\tconst spanContext = activeSpan.spanContext()\n\t\t\tthis.traceId = spanContext.traceId\n\t\t\tthis.spanId = spanContext.spanId\n\t\t\tthis.traceFlags = spanContext.traceFlags\n\t\t} else {\n\t\t\tthis.traceId = init.traceId\n\t\t\tthis.spanId = init.spanId\n\t\t\tthis.traceFlags = init.traceFlags\n\t\t}\n\t}\n}\n","import { context as api_context } from '@opentelemetry/api'\nimport { Resource } from '@opentelemetry/resources'\nimport { Logger, LogAttributes, LogRecordProcessor, LogRecord } from './types'\nimport { LogRecordImpl } from './logrecord'\nimport { SEVERITY_NUMBERS } from '../constants'\n\nexport class WorkerLogger implements Logger {\n\tprivate readonly processors: LogRecordProcessor[]\n\tprivate readonly resource: Resource\n\tprivate readonly name: string\n\tprivate readonly version?: string\n\tprivate readonly inheritedAttributes: LogAttributes\n\tprivate readonly minSeverity: number\n\n\tconstructor(\n\t\tname: string,\n\t\tprocessors: LogRecordProcessor[],\n\t\tresource: Resource,\n\t\tversion?: string,\n\t\tinheritedAttributes?: LogAttributes,\n\t\tminLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' = 'info',\n\t) {\n\t\tthis.name = name\n\t\tthis.processors = processors\n\t\tthis.resource = resource\n\t\tthis.version = version\n\t\tthis.inheritedAttributes = inheritedAttributes || {}\n\t\tthis.minSeverity = this.levelToSeverity(minLevel)\n\t}\n\n\tprivate levelToSeverity(level: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'): number {\n\t\tswitch (level) {\n\t\t\tcase 'trace':\n\t\t\t\treturn SEVERITY_NUMBERS.TRACE\n\t\t\tcase 'debug':\n\t\t\t\treturn SEVERITY_NUMBERS.DEBUG\n\t\t\tcase 'info':\n\t\t\t\treturn SEVERITY_NUMBERS.INFO\n\t\t\tcase 'warn':\n\t\t\t\treturn SEVERITY_NUMBERS.WARN\n\t\t\tcase 'error':\n\t\t\t\treturn SEVERITY_NUMBERS.ERROR\n\t\t\tcase 'fatal':\n\t\t\t\treturn SEVERITY_NUMBERS.FATAL\n\t\t}\n\t}\n\n\tprivate shouldEmit(severityNumber: number): boolean {\n\t\treturn severityNumber >= this.minSeverity\n\t}\n\n\temit(logRecord: Partial<LogRecord>): void {\n\t\t// Merge inherited attributes with log-specific attributes\n\t\tconst mergedAttributes = {\n\t\t\t...this.inheritedAttributes,\n\t\t\t...(logRecord.attributes || {}),\n\t\t}\n\n\t\tconst record = new LogRecordImpl({\n\t\t\t...logRecord,\n\t\t\tattributes: mergedAttributes,\n\t\t\tresource: this.resource,\n\t\t\tinstrumentationScope: {\n\t\t\t\tname: this.name,\n\t\t\t\tversion: this.version,\n\t\t\t},\n\t\t})\n\n\t\tconst context = api_context.active()\n\t\tthis.processors.forEach((processor) => {\n\t\t\tprocessor.onEmit(record, context)\n\t\t})\n\t}\n\n\ttrace(message: string, attributes?: LogAttributes): void {\n\t\tif (!this.shouldEmit(SEVERITY_NUMBERS.TRACE)) return\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.TRACE,\n\t\t\tseverityText: 'TRACE',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\tdebug(message: string, attributes?: LogAttributes): void {\n\t\tif (!this.shouldEmit(SEVERITY_NUMBERS.DEBUG)) return\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.DEBUG,\n\t\t\tseverityText: 'DEBUG',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\tinfo(message: string, attributes?: LogAttributes): void {\n\t\tif (!this.shouldEmit(SEVERITY_NUMBERS.INFO)) return\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.INFO,\n\t\t\tseverityText: 'INFO',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\twarn(message: string, attributes?: LogAttributes): void {\n\t\tif (!this.shouldEmit(SEVERITY_NUMBERS.WARN)) return\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.WARN,\n\t\t\tseverityText: 'WARN',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\terror(message: string | Error, attributes?: LogAttributes): void {\n\t\tif (!this.shouldEmit(SEVERITY_NUMBERS.ERROR)) return\n\n\t\tlet body: string\n\t\tlet attrs: LogAttributes = { ...attributes }\n\n\t\tif (message instanceof Error) {\n\t\t\tbody = message.message\n\t\t\tattrs = {\n\t\t\t\t...attrs,\n\t\t\t\t'exception.type': message.name,\n\t\t\t\t'exception.message': message.message,\n\t\t\t\t'exception.stacktrace': message.stack,\n\t\t\t}\n\t\t} else {\n\t\t\tbody = message\n\t\t}\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.ERROR,\n\t\t\tseverityText: 'ERROR',\n\t\t\tbody,\n\t\t\tattributes: attrs,\n\t\t})\n\t}\n\n\tfatal(message: string, attributes?: LogAttributes): void {\n\t\tif (!this.shouldEmit(SEVERITY_NUMBERS.FATAL)) return\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.FATAL,\n\t\t\tseverityText: 'FATAL',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tconst promises = this.processors.map((p) => p.forceFlush())\n\t\tawait Promise.allSettled(promises)\n\t}\n\n\t/**\n\t * Create a child logger that inherits attributes from this logger\n\t * Child attributes are merged with parent attributes (child takes precedence)\n\t */\n\tchild(attributes: LogAttributes): Logger {\n\t\tconst mergedAttributes = {\n\t\t\t...this.inheritedAttributes,\n\t\t\t...attributes,\n\t\t}\n\n\t\t// Convert minSeverity back to level for child logger\n\t\tlet minLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' = 'info'\n\t\tif (this.minSeverity <= SEVERITY_NUMBERS.TRACE) minLevel = 'trace'\n\t\telse if (this.minSeverity <= SEVERITY_NUMBERS.DEBUG) minLevel = 'debug'\n\t\telse if (this.minSeverity <= SEVERITY_NUMBERS.INFO) minLevel = 'info'\n\t\telse if (this.minSeverity <= SEVERITY_NUMBERS.WARN) minLevel = 'warn'\n\t\telse if (this.minSeverity <= SEVERITY_NUMBERS.ERROR) minLevel = 'error'\n\t\telse minLevel = 'fatal'\n\n\t\treturn new WorkerLogger(this.name, this.processors, this.resource, this.version, mergedAttributes, minLevel)\n\t}\n}\n","import { Resource } from '@opentelemetry/resources'\nimport { Logger, LoggerOptions, LoggerProvider, LogRecordProcessor } from './types'\nimport { WorkerLogger } from './logger'\n\n// Global logger provider singleton\nlet globalLoggerProvider: LoggerProvider | undefined\n\nexport function setGlobalLoggerProvider(provider: LoggerProvider): void {\n\tglobalLoggerProvider = provider\n}\n\nexport function getGlobalLoggerProvider(): LoggerProvider {\n\treturn globalLoggerProvider || new NoopLoggerProvider()\n}\n\nexport class WorkerLoggerProvider implements LoggerProvider {\n\tprivate loggers: Map<string, Logger> = new Map()\n\tprivate processors: LogRecordProcessor[]\n\tprivate resource: Resource\n\tprivate minLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'\n\n\tconstructor(\n\t\tprocessors: LogRecordProcessor[],\n\t\tresource: Resource,\n\t\tminLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal' = 'info',\n\t) {\n\t\tthis.processors = processors\n\t\tthis.resource = resource\n\t\tthis.minLevel = minLevel\n\t}\n\n\tgetLogger(name: string, version?: string, options?: LoggerOptions): Logger {\n\t\tconst key = `${name}@${version || ''}:${options?.schemaUrl || ''}`\n\t\tif (!this.loggers.has(key)) {\n\t\t\tthis.loggers.set(key, new WorkerLogger(name, this.processors, this.resource, version, undefined, this.minLevel))\n\t\t}\n\t\treturn this.loggers.get(key)!\n\t}\n\n\tregister(): void {\n\t\tsetGlobalLoggerProvider(this)\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait Promise.allSettled(this.processors.map((p) => p.shutdown()))\n\t}\n}\n\n// Noop implementations for when logs are not configured\nclass NoopLogger implements Logger {\n\temit(): void {}\n\ttrace(): void {}\n\tdebug(): void {}\n\tinfo(): void {}\n\twarn(): void {}\n\terror(): void {}\n\tfatal(): void {}\n\tasync forceFlush(): Promise<void> {}\n\tchild(): Logger {\n\t\treturn this\n\t}\n}\n\nclass NoopLoggerProvider implements LoggerProvider {\n\tprivate logger = new NoopLogger()\n\n\tgetLogger(): Logger {\n\t\treturn this.logger\n\t}\n\n\tregister(): void {}\n\n\tasync shutdown(): Promise<void> {}\n}\n\n// Convenience function to get a logger from the global provider\nexport function getLogger(name: string, version?: string, options?: LoggerOptions): Logger {\n\treturn getGlobalLoggerProvider().getLogger(name, version, options)\n}\n","import { Attributes, AttributeValue } from '@opentelemetry/api'\nimport {\n\tATTR_USER_AGENT_BROWSER_NAME,\n\tATTR_USER_AGENT_BROWSER_VERSION,\n\tATTR_USER_AGENT_BROWSER_MAJOR_VERSION,\n\tATTR_USER_AGENT_OS_NAME,\n\tATTR_USER_AGENT_OS_VERSION,\n\tATTR_USER_AGENT_ENGINE_NAME,\n\tATTR_USER_AGENT_ENGINE_VERSION,\n\tATTR_USER_AGENT_DEVICE_TYPE,\n\tATTR_USER_AGENT_DEVICE_VENDOR,\n\tATTR_USER_AGENT_DEVICE_MODEL,\n} from '../constants'\n\nfunction isValidAttributeValue(value: unknown): value is AttributeValue {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n}\n\n/**\n * Parse user agent attributes from Request.cf\n * Cloudflare provides pre-parsed user agent data via the cf property\n */\nexport function gatherUserAgentAttributes(request: Request): Attributes {\n\tconst attrs: Attributes = {}\n\n\t// Request.cf might not be available in all contexts\n\tif (!request.cf) {\n\t\treturn attrs\n\t}\n\n\tconst cfData = request.cf as Record<string, unknown>\n\n\t// Browser information\n\tif (cfData['browser']) {\n\t\tconst browser = cfData['browser'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(browser['name'])) attrs[ATTR_USER_AGENT_BROWSER_NAME] = browser['name']\n\t\tif (isValidAttributeValue(browser['version'])) attrs[ATTR_USER_AGENT_BROWSER_VERSION] = browser['version']\n\t\tif (isValidAttributeValue(browser['major'])) attrs[ATTR_USER_AGENT_BROWSER_MAJOR_VERSION] = browser['major']\n\t}\n\n\t// OS information\n\tif (cfData['os']) {\n\t\tconst os = cfData['os'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(os['name'])) attrs[ATTR_USER_AGENT_OS_NAME] = os['name']\n\t\tif (isValidAttributeValue(os['version'])) attrs[ATTR_USER_AGENT_OS_VERSION] = os['version']\n\t}\n\n\t// Engine information\n\tif (cfData['engine']) {\n\t\tconst engine = cfData['engine'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(engine['name'])) attrs[ATTR_USER_AGENT_ENGINE_NAME] = engine['name']\n\t\tif (isValidAttributeValue(engine['version'])) attrs[ATTR_USER_AGENT_ENGINE_VERSION] = engine['version']\n\t}\n\n\t// Device information\n\tif (cfData['device']) {\n\t\tconst device = cfData['device'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(device['type'])) attrs[ATTR_USER_AGENT_DEVICE_TYPE] = device['type']\n\t\tif (isValidAttributeValue(device['vendor'])) attrs[ATTR_USER_AGENT_DEVICE_VENDOR] = device['vendor']\n\t\tif (isValidAttributeValue(device['model'])) attrs[ATTR_USER_AGENT_DEVICE_MODEL] = device['model']\n\t}\n\n\treturn attrs\n}\n","import { Attributes } from '@opentelemetry/api'\nimport {\n\tATTR_CLOUD_PROVIDER,\n\tATTR_CLOUD_PLATFORM,\n\tATTR_CLOUDFLARE_COLO,\n\tATTR_CLOUDFLARE_SCRIPT_NAME,\n\tATTR_CLOUDFLARE_RAY_ID,\n\tATTR_CLOUDFLARE_HANDLER_TYPE,\n\tATTR_CLOUDFLARE_EXECUTION_MODEL,\n\tATTR_TELEMETRY_SDK_NAME,\n\tATTR_TELEMETRY_SDK_LANGUAGE,\n\tPACKAGE_NAME,\n} from '../constants'\n\n/**\n * Gather universal attributes that should be present on all spans\n */\nexport function gatherUniversalAttributes(serviceName?: string): Attributes {\n\treturn {\n\t\t[ATTR_CLOUD_PROVIDER]: 'cloudflare',\n\t\t[ATTR_CLOUD_PLATFORM]: 'cloudflare.workers',\n\t\t[ATTR_TELEMETRY_SDK_NAME]: PACKAGE_NAME,\n\t\t[ATTR_TELEMETRY_SDK_LANGUAGE]: 'javascript',\n\t\t[ATTR_CLOUDFLARE_SCRIPT_NAME]: serviceName,\n\t}\n}\n\n/**\n * Gather root span attributes for HTTP fetch handlers\n */\nexport function gatherRootSpanAttributes(\n\trequest: Request,\n\thandlerType: 'fetch' | 'scheduled' | 'queue' | 'email' | 'alarm',\n\texecutionModel: 'stateless' | 'stateful' = 'stateless',\n): Attributes {\n\tconst attrs: Attributes = {\n\t\t[ATTR_CLOUDFLARE_HANDLER_TYPE]: handlerType,\n\t\t[ATTR_CLOUDFLARE_EXECUTION_MODEL]: executionModel,\n\t}\n\n\t// Ray ID from headers (for HTTP requests)\n\tconst rayId = request.headers?.get('cf-ray')\n\tif (rayId) {\n\t\tattrs[ATTR_CLOUDFLARE_RAY_ID] = rayId\n\t}\n\n\t// Colo from request.cf\n\tif (request.cf?.colo) {\n\t\tattrs[ATTR_CLOUDFLARE_COLO] = request.cf.colo as string\n\t}\n\n\treturn attrs\n}\n","import {\n\ttrace,\n\tSpanOptions,\n\tSpanKind,\n\tpropagation,\n\tcontext as api_context,\n\tAttributes,\n\tContext,\n\tSpan,\n\tException,\n\tSpanStatusCode,\n} from '@opentelemetry/api'\nimport { getActiveConfig } from '../config'\nimport { wrap } from '../wrap'\nimport { HandlerInstrumentation, OrPromise, ResolvedTraceConfig } from '../types'\nimport { ReadableSpan } from '@opentelemetry/sdk-trace-base'\nimport { gatherUserAgentAttributes } from './user-agent'\nimport { gatherRootSpanAttributes } from './universal-attributes'\nimport {\n\tATTR_CLOUDFLARE_ASN,\n\tATTR_CLOUDFLARE_VERIFIED_BOT_CATEGORY,\n\tATTR_GEO_TIMEZONE,\n\tATTR_GEO_CONTINENT_CODE,\n\tATTR_GEO_COUNTRY_CODE,\n\tATTR_GEO_LOCALITY_NAME,\n\tATTR_GEO_LOCALITY_REGION,\n\tATTR_HTTP_REQUEST_HEADER_ACCEPT,\n\tATTR_HTTP_REQUEST_HEADER_ACCEPT_ENCODING,\n\tATTR_HTTP_REQUEST_HEADER_ACCEPT_LANGUAGE,\n\tATTR_HTTP_REQUEST_HEADER_CONTENT_TYPE,\n\tATTR_HTTP_REQUEST_HEADER_CONTENT_LENGTH,\n} from '../constants'\n\ntype IncomingRequest = Parameters<ExportedHandlerFetchHandler>[0]\n\nexport type IncludeTraceContextFn = (request: Request) => boolean\nexport interface FetcherConfig {\n\tincludeTraceContext?: boolean | IncludeTraceContextFn\n}\n\nexport type AcceptTraceContextFn = (request: Request) => boolean\nexport interface FetchHandlerConfig {\n\t/**\n\t * Whether to enable context propagation for incoming requests to `fetch`.\n\t * This enables or disables distributed tracing from W3C Trace Context headers.\n\t * @default true\n\t */\n\tacceptTraceContext?: boolean | AcceptTraceContextFn\n}\n\nconst netKeysFromCF = new Set(['colo', 'country', 'request_priority', 'tls_cipher', 'tls_version', 'asn', 'tcp_rtt'])\n\nconst camelToSnakeCase = (s: string): string => {\n\treturn s.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`)\n}\n\nconst gatherOutgoingCfAttributes = (cf: RequestInitCfProperties): Attributes => {\n\tconst attrs: Record<string, string | number> = {}\n\tObject.keys(cf).forEach((key) => {\n\t\tconst value = cf[key]\n\t\tconst destKey = camelToSnakeCase(key)\n\t\tif (!netKeysFromCF.has(destKey)) {\n\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\tattrs[`cf.${destKey}`] = value\n\t\t\t} else {\n\t\t\t\tattrs[`cf.${destKey}`] = JSON.stringify(value)\n\t\t\t}\n\t\t}\n\t})\n\treturn attrs\n}\n\nexport function gatherRequestAttributes(request: Request): Attributes {\n\tconst attrs: Attributes = {}\n\tconst headers = request.headers\n\n\t// HTTP method and protocol\n\tattrs['http.request.method'] = request.method.toUpperCase()\n\tattrs['network.protocol.name'] = 'http'\n\tif (request.cf?.httpProtocol) {\n\t\tattrs['network.protocol.version'] = request.cf.httpProtocol as string\n\t}\n\n\t// Request headers\n\tconst contentLength = headers.get('content-length')\n\tif (contentLength) {\n\t\tattrs['http.request.body.size'] = parseInt(contentLength, 10)\n\t\tattrs[ATTR_HTTP_REQUEST_HEADER_CONTENT_LENGTH] = contentLength\n\t}\n\n\tconst userAgent = headers.get('user-agent')\n\tif (userAgent) attrs['user_agent.original'] = userAgent\n\n\tconst contentType = headers.get('content-type')\n\tif (contentType) {\n\t\tattrs['http.mime_type'] = contentType\n\t\tattrs[ATTR_HTTP_REQUEST_HEADER_CONTENT_TYPE] = contentType\n\t}\n\n\tconst accept = headers.get('accept')\n\tif (accept) attrs[ATTR_HTTP_REQUEST_HEADER_ACCEPT] = accept\n\n\tconst acceptEncoding = headers.get('accept-encoding')\n\tif (acceptEncoding) {\n\t\tattrs['http.accepts'] = acceptEncoding\n\t\tattrs[ATTR_HTTP_REQUEST_HEADER_ACCEPT_ENCODING] = acceptEncoding\n\t}\n\n\tconst acceptLanguage = headers.get('accept-language')\n\tif (acceptLanguage) attrs[ATTR_HTTP_REQUEST_HEADER_ACCEPT_LANGUAGE] = acceptLanguage\n\n\t// URL attributes\n\tconst u = new URL(request.url)\n\tattrs['url.full'] = `${u.protocol}//${u.host}${u.pathname}${u.search}`\n\tattrs['server.address'] = u.host\n\tattrs['url.scheme'] = u.protocol.replace(':', '')\n\tattrs['url.path'] = u.pathname\n\tif (u.search) attrs['url.query'] = u.search\n\n\t// Server port\n\tif (u.port) {\n\t\tattrs['server.port'] = parseInt(u.port, 10)\n\t} else {\n\t\tattrs['server.port'] = u.protocol === 'https:' ? 443 : 80\n\t}\n\n\treturn attrs\n}\n\nexport function gatherResponseAttributes(response: Response): Attributes {\n\tconst attrs: Record<string, string | number> = {}\n\tattrs['http.response.status_code'] = response.status\n\tif (response.headers.get('content-length')! == null) {\n\t\tattrs['http.response.body.size'] = response.headers.get('content-length')!\n\t}\n\tattrs['http.mime_type'] = response.headers.get('content-type')!\n\treturn attrs\n}\n\nexport function gatherIncomingCfAttributes(request: Request): Attributes {\n\tconst attrs: Attributes = {}\n\n\tif (!request.cf) {\n\t\treturn attrs\n\t}\n\n\t// Network attributes\n\tif (request.cf.colo) attrs['net.colo'] = request.cf.colo as string\n\tif (request.cf.country) attrs['net.country'] = request.cf.country as string\n\tif (request.cf.requestPriority) attrs['net.request_priority'] = request.cf.requestPriority as string\n\tif (request.cf.tlsCipher) attrs['net.tls_cipher'] = request.cf.tlsCipher as string\n\tif (request.cf.tlsVersion) attrs['net.tls_version'] = request.cf.tlsVersion as string\n\tif (request.cf.asn) attrs[ATTR_CLOUDFLARE_ASN] = request.cf.asn as number\n\tif (request.cf.clientTcpRtt) attrs['net.tcp_rtt'] = request.cf.clientTcpRtt as number\n\n\t// Geo attributes\n\tif (request.cf.timezone) attrs[ATTR_GEO_TIMEZONE] = request.cf.timezone as string\n\tif (request.cf.continent) attrs[ATTR_GEO_CONTINENT_CODE] = request.cf.continent as string\n\tif (request.cf.country) attrs[ATTR_GEO_COUNTRY_CODE] = request.cf.country as string\n\tif (request.cf.city) attrs[ATTR_GEO_LOCALITY_NAME] = request.cf.city as string\n\tif (request.cf.region) attrs[ATTR_GEO_LOCALITY_REGION] = request.cf.region as string\n\n\t// Bot detection\n\t// @ts-expect-error - verifiedBotCategory may not be typed yet\n\tif (request.cf.verifiedBotCategory) attrs[ATTR_CLOUDFLARE_VERIFIED_BOT_CATEGORY] = request.cf.verifiedBotCategory\n\n\treturn attrs\n}\n\nexport function getParentContextFromHeaders(headers: Headers): Context {\n\treturn propagation.extract(api_context.active(), headers, {\n\t\tget(headers, key) {\n\t\t\treturn headers.get(key) || undefined\n\t\t},\n\t\tkeys(headers) {\n\t\t\treturn [...headers.keys()]\n\t\t},\n\t})\n}\n\nfunction getParentContextFromRequest(request: Request) {\n\tconst workerConfig = getActiveConfig()\n\n\tif (workerConfig === undefined) {\n\t\treturn api_context.active()\n\t}\n\n\tconst acceptTraceContext =\n\t\ttypeof workerConfig.handlers.fetch.acceptTraceContext === 'function'\n\t\t\t? workerConfig.handlers.fetch.acceptTraceContext(request)\n\t\t\t: (workerConfig.handlers.fetch.acceptTraceContext ?? true)\n\treturn acceptTraceContext ? getParentContextFromHeaders(request.headers) : api_context.active()\n}\n\nfunction updateSpanNameOnRoute(span: Span, request: IncomingRequest, result?: Response) {\n\tconst readable = span as unknown as ReadableSpan & { attributes?: Attributes }\n\tconst route = readable.attributes?.['http.route']\n\tif (route) {\n\t\tconst method = request.method.toUpperCase()\n\t\tspan.updateName(`${method} ${route}`)\n\t}\n\t// Set span status based on HTTP response status code\n\tif (result) {\n\t\tif (result.status >= 400) {\n\t\t\tspan.setStatus({\n\t\t\t\tcode: SpanStatusCode.ERROR,\n\t\t\t\tmessage: `HTTP ${result.status}: ${result.statusText}`,\n\t\t\t})\n\t\t} else {\n\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t}\n\t}\n}\n\nexport const fetchInstrumentation: HandlerInstrumentation<IncomingRequest, OrPromise<Response>> = {\n\tgetInitialSpanInfo: (request) => {\n\t\tconst spanContext = getParentContextFromRequest(request)\n\t\tconst attributes = {\n\t\t\t['faas.trigger']: 'http',\n\t\t\t['faas.invocation_id']: request.headers.get('cf-ray') ?? undefined,\n\t\t}\n\t\tObject.assign(attributes, gatherRequestAttributes(request))\n\t\tObject.assign(attributes, gatherIncomingCfAttributes(request))\n\t\tObject.assign(attributes, gatherRootSpanAttributes(request, 'fetch'))\n\t\tObject.assign(attributes, gatherUserAgentAttributes(request))\n\t\tconst method = request.method.toUpperCase()\n\t\tconst url = new URL(request.url)\n\t\tconst route = url.pathname\n\t\treturn {\n\t\t\tname: `${method} ${route}`,\n\t\t\toptions: {\n\t\t\t\tattributes,\n\t\t\t\tkind: SpanKind.SERVER,\n\t\t\t},\n\t\t\tcontext: spanContext,\n\t\t}\n\t},\n\tgetAttributesFromResult: (response) => {\n\t\tconst attrs = gatherResponseAttributes(response)\n\t\tattrs['http.status_code'] = response.status\n\t\tattrs['http.status_text'] = response.statusText\n\t\treturn attrs\n\t},\n\texecutionSucces: updateSpanNameOnRoute,\n\texecutionFailed: updateSpanNameOnRoute,\n}\n\ntype getFetchConfig = (config: ResolvedTraceConfig) => FetcherConfig\nexport function instrumentClientFetch(\n\tfetchFn: Fetcher['fetch'],\n\tconfigFn: getFetchConfig,\n\tattrs?: Attributes,\n): Fetcher['fetch'] {\n\tconst handler: ProxyHandler<Fetcher['fetch']> = {\n\t\tapply: (target, thisArg, argArray): Response | Promise<Response> => {\n\t\t\tconst request = new Request(argArray[0], argArray[1])\n\t\t\tif (!request.url.startsWith('http')) {\n\t\t\t\treturn Reflect.apply(target, thisArg, argArray)\n\t\t\t}\n\n\t\t\tconst workerConfig = getActiveConfig()\n\t\t\tif (!workerConfig) {\n\t\t\t\treturn Reflect.apply(target, thisArg, [request])\n\t\t\t}\n\t\t\tconst config = configFn(workerConfig)\n\n\t\t\tconst tracer = trace.getTracer('fetcher')\n\t\t\tconst options: SpanOptions = { kind: SpanKind.CLIENT, attributes: attrs }\n\n\t\t\tconst host = new URL(request.url).host\n\t\t\tconst method = request.method.toUpperCase()\n\t\t\tconst spanName = typeof attrs?.['name'] === 'string' ? attrs?.['name'] : `fetch ${method} ${host}`\n\t\t\tconst promise = tracer.startActiveSpan(spanName, options, async (span) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst includeTraceContext =\n\t\t\t\t\t\ttypeof config.includeTraceContext === 'function'\n\t\t\t\t\t\t\t? config.includeTraceContext(request)\n\t\t\t\t\t\t\t: config.includeTraceContext\n\t\t\t\t\tif (includeTraceContext ?? true) {\n\t\t\t\t\t\tpropagation.inject(api_context.active(), request.headers, {\n\t\t\t\t\t\t\tset: (h, k, v) => h.set(k, typeof v === 'string' ? v : String(v)),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tspan.setAttributes(gatherRequestAttributes(request))\n\t\t\t\t\tif (request.cf) span.setAttributes(gatherOutgoingCfAttributes(request.cf))\n\t\t\t\t\tconst response = await Reflect.apply(target, thisArg, [request])\n\t\t\t\t\tspan.setAttributes(gatherResponseAttributes(response))\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t'http.status_code': response.status,\n\t\t\t\t\t\t'http.status_text': response.statusText,\n\t\t\t\t\t})\n\t\t\t\t\t// Set span status based on HTTP status code\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\tcode: SpanStatusCode.ERROR,\n\t\t\t\t\t\t\tmessage: `HTTP ${response.status}: ${response.statusText}`,\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t}\n\t\t\t\t\treturn response\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\tthrow error\n\t\t\t\t} finally {\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn promise\n\t\t},\n\t}\n\treturn wrap(fetchFn, handler, true)\n}\n\nexport function instrumentGlobalFetch(): void {\n\t//@ts-ignore For some reason the node types are imported and complain.\n\tglobalThis.fetch = instrumentClientFetch(globalThis.fetch, (config) => config.fetch)\n}\n","import { SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\n\ntype CacheFns = Cache[keyof Cache]\n\nconst tracer = trace.getTracer('cache instrumentation')\n\nfunction sanitiseURL(url: string): string {\n\tconst u = new URL(url)\n\treturn `${u.protocol}//${u.host}${u.pathname}${u.search}`\n}\n\nfunction instrumentFunction<T extends CacheFns>(fn: T, cacheName: string, op: string): T {\n\tconst handler: ProxyHandler<typeof fn> = {\n\t\tasync apply(target, thisArg, argArray) {\n\t\t\tconst attributes = {\n\t\t\t\t'cache.name': cacheName,\n\t\t\t\t'http.url': argArray[0].url ? sanitiseURL(argArray[0].url) : undefined,\n\t\t\t\t'cache.operation': op,\n\t\t\t}\n\t\t\tconst options: SpanOptions = { kind: SpanKind.CLIENT, attributes }\n\t\t\treturn tracer.startActiveSpan(`Cache ${cacheName} ${op}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tif (op === 'match') {\n\t\t\t\t\tspan.setAttribute('cache.hit', !!result)\n\t\t\t\t}\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nfunction instrumentCache(cache: Cache, cacheName: string): Cache {\n\tconst handler: ProxyHandler<typeof cache> = {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'delete' || prop === 'match' || prop === 'put') {\n\t\t\t\tconst fn = Reflect.get(target, prop).bind(target)\n\t\t\t\treturn instrumentFunction(fn, cacheName, prop)\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(cache, handler)\n}\n\nfunction instrumentOpen(openFn: CacheStorage['open']): CacheStorage['open'] {\n\tconst handler: ProxyHandler<typeof openFn> = {\n\t\tasync apply(target, thisArg, argArray) {\n\t\t\tconst cacheName = argArray[0]\n\t\t\tconst cache = await Reflect.apply(target, thisArg, argArray)\n\t\t\treturn instrumentCache(cache, cacheName)\n\t\t},\n\t}\n\treturn wrap(openFn, handler)\n}\n\nfunction _instrumentGlobalCache() {\n\tconst handler: ProxyHandler<typeof caches> = {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'default') {\n\t\t\t\tconst cache = target.default\n\t\t\t\treturn instrumentCache(cache, 'default')\n\t\t\t} else if (prop === 'open') {\n\t\t\t\tconst openFn = Reflect.get(target, prop).bind(target)\n\t\t\t\treturn instrumentOpen(openFn)\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\t//@ts-ignore\n\tglobalThis.caches = wrap(caches, handler)\n}\n\nexport function instrumentGlobalCache() {\n\treturn _instrumentGlobalCache()\n}\n","import { trace, SpanKind, Attributes, Span } from '@opentelemetry/api'\nimport { unwrap, wrap } from '../wrap'\nimport { HandlerInstrumentation, InitialSpanInfo, OrPromise } from '../types'\nimport { ATTR_FAAS_TRIGGER, FAAS_TRIGGER_VALUE_PUBSUB } from '@opentelemetry/semantic-conventions/incubating'\nimport { ATTR_CLOUDFLARE_QUEUE_NAME, ATTR_CLOUDFLARE_QUEUE_BATCH_SIZE } from '../constants'\n\ntype QueueHandler = ExportedHandlerQueueHandler<unknown, unknown>\nexport type QueueHandlerArgs = Parameters<QueueHandler>\n\nclass MessageStatusCount {\n\tsucceeded = 0\n\tfailed = 0\n\timplicitly_acked = 0\n\timplicitly_retried = 0\n\treadonly total: number\n\n\tconstructor(total: number) {\n\t\tthis.total = total\n\t}\n\n\tack() {\n\t\tthis.succeeded = this.succeeded + 1\n\t}\n\n\tackRemaining() {\n\t\tthis.implicitly_acked = this.total - this.succeeded - this.failed\n\t\tthis.succeeded = this.total - this.failed\n\t}\n\n\tretry() {\n\t\tthis.failed = this.failed + 1\n\t}\n\n\tretryRemaining() {\n\t\tthis.implicitly_retried = this.total - this.succeeded - this.failed\n\t\tthis.failed = this.total - this.succeeded\n\t}\n\n\ttoAttributes(): Attributes {\n\t\treturn {\n\t\t\t'queue.messages_count': this.total,\n\t\t\t'queue.messages_success': this.succeeded,\n\t\t\t'queue.messages_failed': this.failed,\n\t\t\t'queue.batch_success': this.succeeded === this.total,\n\t\t\t'queue.implicitly_acked': this.implicitly_acked,\n\t\t\t'queue.implicitly_retried': this.implicitly_retried,\n\t\t}\n\t}\n}\n\nconst addEvent = (name: string, msg?: Message) => {\n\tconst attrs: Attributes = {}\n\tif (msg) {\n\t\tattrs['queue.message_id'] = msg.id\n\t\tattrs['queue.message_timestamp'] = msg.timestamp.toISOString()\n\t}\n\ttrace.getActiveSpan()?.addEvent(name, attrs)\n}\n\nconst proxyQueueMessage = <Q>(msg: Message<Q>, count: MessageStatusCount): Message<Q> => {\n\tconst msgHandler: ProxyHandler<Message<Q>> = {\n\t\tget: (target, prop) => {\n\t\t\tif (prop === 'ack') {\n\t\t\t\tconst ackFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(ackFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('messageAck', msg)\n\t\t\t\t\t\tcount.ack()\n\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tReflect.apply(fnTarget, msg, [])\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} else if (prop === 'retry') {\n\t\t\t\tconst retryFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(retryFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('messageRetry', msg)\n\t\t\t\t\t\tcount.retry()\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tconst result = Reflect.apply(fnTarget, msg, [])\n\t\t\t\t\t\treturn result\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop, msg)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(msg, msgHandler)\n}\n\nconst proxyMessageBatch = (batch: MessageBatch, count: MessageStatusCount) => {\n\tconst batchHandler: ProxyHandler<MessageBatch> = {\n\t\tget: (target, prop) => {\n\t\t\tif (prop === 'messages') {\n\t\t\t\tconst messages = Reflect.get(target, prop)\n\t\t\t\tconst messagesHandler: ProxyHandler<MessageBatch['messages']> = {\n\t\t\t\t\tget: (target, prop) => {\n\t\t\t\t\t\tif (typeof prop === 'string' && !isNaN(parseInt(prop))) {\n\t\t\t\t\t\t\tconst message = Reflect.get(target, prop)\n\t\t\t\t\t\t\treturn proxyQueueMessage(message, count)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\treturn wrap(messages, messagesHandler)\n\t\t\t} else if (prop === 'ackAll') {\n\t\t\t\tconst ackFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(ackFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('ackAll')\n\t\t\t\t\t\tcount.ackRemaining()\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tReflect.apply(fnTarget, batch, [])\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} else if (prop === 'retryAll') {\n\t\t\t\tconst retryFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(retryFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('retryAll')\n\t\t\t\t\t\tcount.retryRemaining()\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tReflect.apply(fnTarget, batch, [])\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop)\n\t\t},\n\t}\n\treturn wrap(batch, batchHandler)\n}\n\nexport class QueueInstrumentation implements HandlerInstrumentation<MessageBatch, OrPromise<void>> {\n\tprivate count?: MessageStatusCount\n\n\tgetInitialSpanInfo(batch: MessageBatch): InitialSpanInfo {\n\t\treturn {\n\t\t\tname: `queueHandler ${batch.queue}`,\n\t\t\toptions: {\n\t\t\t\tattributes: {\n\t\t\t\t\t[ATTR_FAAS_TRIGGER]: FAAS_TRIGGER_VALUE_PUBSUB,\n\t\t\t\t\t[ATTR_CLOUDFLARE_QUEUE_NAME]: batch.queue,\n\t\t\t\t\t[ATTR_CLOUDFLARE_QUEUE_BATCH_SIZE]: batch.messages.length,\n\t\t\t\t},\n\t\t\t\tkind: SpanKind.CONSUMER,\n\t\t\t},\n\t\t}\n\t}\n\n\tinstrumentTrigger(batch: MessageBatch): MessageBatch {\n\t\tthis.count = new MessageStatusCount(batch.messages.length)\n\t\treturn proxyMessageBatch(batch, this.count)\n\t}\n\n\texecutionSucces(span: Span) {\n\t\tif (this.count) {\n\t\t\tthis.count.ackRemaining()\n\t\t\tspan.setAttributes(this.count.toAttributes())\n\t\t}\n\t}\n\n\texecutionFailed(span: Span) {\n\t\tif (this.count) {\n\t\t\tthis.count.retryRemaining()\n\t\t\tspan.setAttributes(this.count.toAttributes())\n\t\t}\n\t}\n}\n\nfunction instrumentQueueSend(fn: Queue<unknown>['send'], name: string): Queue<unknown>['send'] {\n\tconst tracer = trace.getTracer('queueSender')\n\tconst handler: ProxyHandler<Queue<unknown>['send']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\treturn tracer.startActiveSpan(`Queues ${name} send`, async (span) => {\n\t\t\t\tspan.setAttribute('queue.operation', 'send')\n\t\t\t\tawait Reflect.apply(target, unwrap(thisArg), argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nfunction instrumentQueueSendBatch(fn: Queue<unknown>['sendBatch'], name: string): Queue<unknown>['sendBatch'] {\n\tconst tracer = trace.getTracer('queueSender')\n\tconst handler: ProxyHandler<Queue<unknown>['sendBatch']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\treturn tracer.startActiveSpan(`Queues ${name} sendBatch`, async (span) => {\n\t\t\t\tspan.setAttribute('queue.operation', 'sendBatch')\n\t\t\t\tawait Reflect.apply(target, unwrap(thisArg), argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentQueueSender(queue: Queue<unknown>, name: string) {\n\tconst queueHandler: ProxyHandler<Queue<unknown>> = {\n\t\tget: (target, prop) => {\n\t\t\tif (prop === 'send') {\n\t\t\t\tconst sendFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentQueueSend(sendFn, name)\n\t\t\t} else if (prop === 'sendBatch') {\n\t\t\t\tconst sendFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentQueueSendBatch(sendFn, name)\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(queue, queueHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_CLOUDFLARE_KV_QUERY_KEYS,\n\tATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT,\n\tATTR_CLOUDFLARE_KV_QUERY_TYPE,\n\tATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL,\n\tATTR_CLOUDFLARE_KV_QUERY_VALUE_TYPE,\n\tATTR_CLOUDFLARE_KV_QUERY_EXPIRATION,\n\tATTR_CLOUDFLARE_KV_QUERY_EXPIRATION_TTL,\n\tATTR_CLOUDFLARE_KV_QUERY_METADATA,\n\tATTR_CLOUDFLARE_KV_QUERY_PREFIX,\n\tATTR_CLOUDFLARE_KV_QUERY_LIMIT,\n\tATTR_CLOUDFLARE_KV_QUERY_CURSOR,\n\tATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS,\n\tATTR_CLOUDFLARE_KV_RESPONSE_LIST_COMPLETE,\n\tATTR_CLOUDFLARE_KV_RESPONSE_CURSOR,\n\tATTR_CLOUDFLARE_KV_RESPONSE_METADATA,\n} from '../constants'\n\ntype ExtraAttributeFn = (argArray: any[], result: any) => Attributes\n\nconst dbSystem = 'Cloudflare KV'\n\nconst KVAttributes: Record<string | symbol, ExtraAttributeFn> = {\n\tdelete(_argArray) {\n\t\treturn {}\n\t},\n\tget(argArray) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts = argArray[1]\n\t\tif (typeof opts === 'string') {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts\n\t\t} else if (typeof opts === 'object') {\n\t\t\tif (opts.type) attrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts.type\n\t\t\tif (opts.cacheTtl) attrs[ATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL] = opts.cacheTtl\n\t\t}\n\t\treturn attrs\n\t},\n\tgetWithMetadata(argArray, result) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts = argArray[1]\n\t\tif (typeof opts === 'string') {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts\n\t\t} else if (typeof opts === 'object') {\n\t\t\tif (opts.type) attrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts.type\n\t\t\tif (opts.cacheTtl) attrs[ATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL] = opts.cacheTtl\n\t\t}\n\n\t\tconst kvResult = result as KVNamespaceGetWithMetadataResult<any, any>\n\t\tif (kvResult.metadata !== null && kvResult.metadata !== undefined) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_METADATA] = JSON.stringify(kvResult.metadata)\n\t\t}\n\t\tif (kvResult.cacheStatus) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS] = kvResult.cacheStatus\n\t\t}\n\t\treturn attrs\n\t},\n\tlist(argArray, result) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts: KVNamespaceListOptions = argArray[0] || {}\n\t\tif (opts.cursor) attrs[ATTR_CLOUDFLARE_KV_QUERY_CURSOR] = opts.cursor\n\t\tif (opts.limit) attrs[ATTR_CLOUDFLARE_KV_QUERY_LIMIT] = opts.limit\n\t\tif (opts.prefix) attrs[ATTR_CLOUDFLARE_KV_QUERY_PREFIX] = opts.prefix\n\n\t\tconst kvResult = result as KVNamespaceListResult<any, any>\n\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_LIST_COMPLETE] = kvResult.list_complete\n\t\tif (!kvResult.list_complete && kvResult.cursor) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_CURSOR] = kvResult.cursor\n\t\t}\n\t\tif (kvResult.cacheStatus) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS] = kvResult.cacheStatus\n\t\t}\n\t\treturn attrs\n\t},\n\tput(argArray) {\n\t\tconst attrs: Attributes = {}\n\t\tconst value = argArray[1]\n\t\tif (value !== undefined) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_VALUE_TYPE] = typeof value\n\t\t}\n\t\tif (argArray.length > 2 && argArray[2]) {\n\t\t\tconst options = argArray[2] as KVNamespacePutOptions\n\t\t\tif (options.expiration) attrs[ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION] = options.expiration\n\t\t\tif (options.expirationTtl) attrs[ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION_TTL] = options.expirationTtl\n\t\t\tif (options.metadata !== undefined) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_METADATA] = JSON.stringify(options.metadata)\n\t\t\t}\n\t\t}\n\t\treturn attrs\n\t},\n}\n\nfunction instrumentKVFn(fn: Function, name: string, operation: string) {\n\tconst tracer = trace.getTracer('KV')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'KV',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[SemanticAttributes.DB_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`KV ${name} ${operation}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tconst extraAttrsFn = KVAttributes[operation]\n\t\t\t\tconst extraAttrs = extraAttrsFn ? extraAttrsFn(argArray, result) : {}\n\t\t\t\tspan.setAttributes(extraAttrs)\n\n\t\t\t\t// Add key/keys attributes\n\t\t\t\tif (operation === 'list') {\n\t\t\t\t\t// No specific key for list operations\n\t\t\t\t} else if (Array.isArray(argArray[0])) {\n\t\t\t\t\t// Multi-key operation\n\t\t\t\t\tconst keys = argArray[0] as string[]\n\t\t\t\t\tif (keys.length > 0 && keys[0]) {\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS, keys[0])\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT, keys.length)\n\t\t\t\t\t}\n\t\t\t\t} else if (argArray[0] && typeof argArray[0] === 'string') {\n\t\t\t\t\t// Single key operation\n\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS, argArray[0])\n\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT, 1)\n\t\t\t\t}\n\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentKV(kv: KVNamespace, name: string): KVNamespace {\n\tconst kvHandler: ProxyHandler<KVNamespace> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\treturn instrumentKVFn(fn, name, operation)\n\t\t},\n\t}\n\treturn wrap(kv, kvHandler)\n}\n","import { passthroughGet, wrap } from '../wrap'\nimport { instrumentClientFetch } from './fetch'\n\nexport function instrumentServiceBinding(fetcher: Fetcher, envName: string): Fetcher {\n\tconst fetcherHandler: ProxyHandler<Fetcher> = {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'fetch') {\n\t\t\t\tconst fetcher = Reflect.get(target, prop)\n\t\t\t\tconst attrs = {\n\t\t\t\t\tname: `Service Binding ${envName}`,\n\t\t\t\t}\n\t\t\t\treturn instrumentClientFetch(fetcher, () => ({ includeTraceContext: true }), attrs)\n\t\t\t} else {\n\t\t\t\treturn passthroughGet(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(fetcher, fetcherHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, SpanStatusCode, Exception, trace } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_DB_QUERY_TEXT,\n\tATTR_DB_OPERATION_BATCH_SIZE,\n\tATTR_CLOUDFLARE_D1_RESPONSE_SIZE_AFTER,\n\tATTR_CLOUDFLARE_D1_RESPONSE_ROWS_READ,\n\tATTR_CLOUDFLARE_D1_RESPONSE_ROWS_WRITTEN,\n\tATTR_CLOUDFLARE_D1_RESPONSE_SQL_DURATION_MS,\n\tATTR_CLOUDFLARE_D1_RESPONSE_LAST_ROW_ID,\n\tATTR_CLOUDFLARE_D1_RESPONSE_CHANGED_DB,\n\tATTR_CLOUDFLARE_D1_RESPONSE_CHANGES,\n} from '../constants'\n\nconst dbSystem = 'Cloudflare D1'\n\n// We need to peak into D1 \"internals\" to instrument batch queries\n// See: https://github.com/cloudflare/workerd/blob/5d27f8f7f1f9b584f673d2f11c9032f5a776ec55/src/cloudflare/internal/d1-api.ts#L173\ninterface D1StatementInternals {\n\tstatement: string\n\tparams: unknown[]\n}\n\nfunction metaAttributes(meta: D1Meta): Attributes {\n\treturn {\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_READ]: meta.rows_read,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_WRITTEN]: meta.rows_written,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_SQL_DURATION_MS]: meta.duration,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_SIZE_AFTER]: meta.size_after,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_LAST_ROW_ID]: meta.last_row_id,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_CHANGED_DB]: meta.changed_db,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_CHANGES]: meta.changes,\n\t}\n}\nfunction spanOptions(dbName: string, operation: string, sql?: string): SpanOptions {\n\tconst attributes: Attributes = {\n\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'D1',\n\t\t[SemanticAttributes.DB_NAME]: dbName,\n\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t}\n\tif (sql) {\n\t\tattributes[ATTR_DB_QUERY_TEXT] = sql\n\t}\n\treturn {\n\t\tkind: SpanKind.CLIENT,\n\t\tattributes,\n\t}\n}\n\nfunction instrumentD1StatementFn(fn: Function, dbName: string, operation: string, sql: string) {\n\tconst tracer = trace.getTracer('D1')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tif (operation === 'bind') {\n\t\t\t\tconst newStmt = Reflect.apply(target, thisArg, argArray) as D1PreparedStatement\n\t\t\t\treturn instrumentD1PreparedStatement(newStmt, dbName, sql)\n\t\t\t}\n\n\t\t\tconst options = spanOptions(dbName, operation, sql)\n\t\t\treturn tracer.startActiveSpan(`${dbName} ${operation}`, options, async (span) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\t\tif (operation === 'all' || operation === 'run') {\n\t\t\t\t\t\tspan.setAttributes(metaAttributes((result as D1Result).meta))\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\treturn result\n\t\t\t\t} catch (error) {\n\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\tthrow error\n\t\t\t\t} finally {\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nfunction instrumentD1PreparedStatement(\n\tstmt: D1PreparedStatement,\n\tdbName: string,\n\tstatement: string,\n): D1PreparedStatement {\n\tconst statementHandler: ProxyHandler<D1PreparedStatement> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\tif (typeof fn === 'function') {\n\t\t\t\treturn instrumentD1StatementFn(fn, dbName, operation, statement)\n\t\t\t}\n\t\t\treturn fn\n\t\t},\n\t}\n\treturn wrap(stmt, statementHandler)\n}\n\nexport function instrumentD1Fn(fn: Function, dbName: string, operation: string) {\n\tconst tracer = trace.getTracer('D1')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tif (operation === 'prepare') {\n\t\t\t\tconst sql = argArray[0] as string\n\t\t\t\tconst stmt = Reflect.apply(target, thisArg, argArray) as D1PreparedStatement\n\t\t\t\treturn instrumentD1PreparedStatement(stmt, dbName, sql)\n\t\t\t} else if (operation === 'exec') {\n\t\t\t\tconst sql = argArray[0] as string\n\t\t\t\tconst options = spanOptions(dbName, operation, sql)\n\t\t\t\treturn tracer.startActiveSpan(`${dbName} ${operation}`, options, async (span) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else if (operation === 'batch') {\n\t\t\t\t// Create span for each statement, requires peeaking into D1 internals ...\n\t\t\t\tconst statements = argArray[0] as D1StatementInternals[]\n\t\t\t\treturn tracer.startActiveSpan(`${dbName} ${operation}`, async (span) => {\n\t\t\t\t\t// Add batch size attribute\n\t\t\t\t\tspan.setAttribute(ATTR_DB_OPERATION_BATCH_SIZE, statements.length)\n\n\t\t\t\t\t// Create a span per query in the batch\n\t\t\t\t\tconst subSpans = statements.map((s) =>\n\t\t\t\t\t\ttracer.startSpan(`${dbName} ${operation} > query`, spanOptions(dbName, operation, s.statement)),\n\t\t\t\t\t)\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as D1Result[]\n\t\t\t\t\t\tresult.forEach((r, i) => subSpans[i]?.setAttributes(metaAttributes(r.meta)))\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tsubSpans.forEach((s) => s.end())\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\treturn Reflect.apply(target, thisArg, argArray)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentD1(database: D1Database, dbName: string): D1Database {\n\tconst dbHandler: ProxyHandler<D1Database> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\tif (typeof fn === 'function') {\n\t\t\t\treturn instrumentD1Fn(fn, dbName, operation)\n\t\t\t}\n\t\t\treturn fn\n\t\t},\n\t}\n\treturn wrap(database, dbHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { wrap } from '../wrap'\n\ntype ExtraAttributeFn = (argArray: any[], result: any) => Attributes\n\nconst dbSystem = 'Cloudflare Analytics Engine'\n\nconst AEAttributes: Record<string | symbol, ExtraAttributeFn> = {\n\twriteDataPoint(argArray) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts = argArray[0]\n\t\tif (typeof opts === 'object') {\n\t\t\tattrs['db.cf.ae.indexes'] = opts.indexes.length\n\t\t\tattrs['db.cf.ae.index'] = (opts.indexes[0] as ArrayBuffer | string).toString()\n\t\t\tattrs['db.cf.ae.doubles'] = opts.doubles.length\n\t\t\tattrs['db.cf.ae.blobs'] = opts.blobs.length\n\t\t}\n\t\treturn attrs\n\t},\n}\n\nfunction instrumentAEFn(fn: Function, name: string, operation: string) {\n\tconst tracer = trace.getTracer('AnalyticsEngine')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\tbinding_type: 'AnalyticsEngine',\n\t\t\t\t[SemanticAttributes.DB_NAME]: name,\n\t\t\t\t[SemanticAttributes.DB_SYSTEM]: dbSystem,\n\t\t\t\t[SemanticAttributes.DB_OPERATION]: operation,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Analytics Engine ${name} ${operation}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tconst extraAttrsFn = AEAttributes[operation]\n\t\t\t\tconst extraAttrs = extraAttrsFn ? extraAttrsFn(argArray, result) : {}\n\t\t\t\tspan.setAttributes(extraAttrs)\n\t\t\t\tspan.setAttribute(SemanticAttributes.DB_STATEMENT, `${operation} ${argArray[0]}`)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentAnalyticsEngineDataset(\n\tdataset: AnalyticsEngineDataset,\n\tname: string,\n): AnalyticsEngineDataset {\n\tconst datasetHandler: ProxyHandler<AnalyticsEngineDataset> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\treturn instrumentAEFn(fn, name, operation)\n\t\t},\n\t}\n\treturn wrap(dataset, datasetHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_DB_QUERY_TEXT,\n\tATTR_CLOUDFLARE_R2_QUERY_KEY,\n\tATTR_CLOUDFLARE_R2_QUERY_PREFIX,\n\tATTR_CLOUDFLARE_R2_QUERY_LIMIT,\n\tATTR_CLOUDFLARE_R2_QUERY_DELIMITER,\n\tATTR_CLOUDFLARE_R2_QUERY_START_AFTER,\n\tATTR_CLOUDFLARE_R2_QUERY_INCLUDE,\n\tATTR_CLOUDFLARE_R2_QUERY_OFFSET,\n\tATTR_CLOUDFLARE_R2_QUERY_LENGTH,\n\tATTR_CLOUDFLARE_R2_QUERY_SUFFIX,\n\tATTR_CLOUDFLARE_R2_QUERY_ONLY_IF,\n\tATTR_CLOUDFLARE_R2_PUT_HTTP_METADATA,\n\tATTR_CLOUDFLARE_R2_PUT_CUSTOM_METADATA,\n\tATTR_CLOUDFLARE_R2_PUT_MD5,\n\tATTR_CLOUDFLARE_R2_PUT_SHA1,\n\tATTR_CLOUDFLARE_R2_PUT_SHA256,\n\tATTR_CLOUDFLARE_R2_PUT_SHA384,\n\tATTR_CLOUDFLARE_R2_PUT_SHA512,\n\tATTR_CLOUDFLARE_R2_PUT_STORAGE_CLASS,\n\tATTR_CLOUDFLARE_R2_RESPONSE_SIZE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_ETAG,\n\tATTR_CLOUDFLARE_R2_RESPONSE_VERSION,\n\tATTR_CLOUDFLARE_R2_RESPONSE_UPLOADED,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_TYPE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_LANGUAGE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_DISPOSITION,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_ENCODING,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_CONTROL,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_EXPIRY,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CUSTOM_METADATA_KEYS,\n\tATTR_CLOUDFLARE_R2_RESPONSE_RANGE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_STORAGE_CLASS,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_MD5,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA1,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA256,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA384,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA512,\n\tATTR_CLOUDFLARE_R2_LIST_TRUNCATED,\n\tATTR_CLOUDFLARE_R2_LIST_OBJECTS_COUNT,\n\tATTR_CLOUDFLARE_R2_LIST_DELIMITED_PREFIXES_COUNT,\n\tATTR_CLOUDFLARE_R2_LIST_CURSOR,\n\tATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID,\n} from '../constants'\n\nconst dbSystem = 'Cloudflare R2'\n\n// Helper to add object metadata attributes\nfunction addObjectMetadata(attrs: Attributes, obj: R2Object | R2ObjectBody | null): void {\n\tif (!obj) return\n\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_SIZE] = obj.size\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_ETAG] = obj.etag\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_VERSION] = obj.version\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_UPLOADED] = obj.uploaded.toISOString()\n\n\t// HTTP Metadata\n\tif (obj.httpMetadata) {\n\t\tif (obj.httpMetadata.contentType) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_TYPE] = obj.httpMetadata.contentType\n\t\t}\n\t\tif (obj.httpMetadata.contentLanguage) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_LANGUAGE] = obj.httpMetadata.contentLanguage\n\t\t}\n\t\tif (obj.httpMetadata.contentDisposition) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_DISPOSITION] = obj.httpMetadata.contentDisposition\n\t\t}\n\t\tif (obj.httpMetadata.contentEncoding) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_ENCODING] = obj.httpMetadata.contentEncoding\n\t\t}\n\t\tif (obj.httpMetadata.cacheControl) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_CONTROL] = obj.httpMetadata.cacheControl\n\t\t}\n\t\tif (obj.httpMetadata.cacheExpiry) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_EXPIRY] = obj.httpMetadata.cacheExpiry.toISOString()\n\t\t}\n\t}\n\n\t// Custom Metadata\n\tif (obj.customMetadata && Object.keys(obj.customMetadata).length > 0) {\n\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CUSTOM_METADATA_KEYS] = Object.keys(obj.customMetadata).join(',')\n\t}\n\n\t// Range\n\tif (obj.range) {\n\t\tif ('offset' in obj.range && 'length' in obj.range) {\n\t\t\tconst offset = obj.range.offset ?? 0\n\t\t\tconst length = obj.range.length ?? 0\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_RANGE] = `${offset}-${offset + length - 1}`\n\t\t} else if ('suffix' in obj.range) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_RANGE] = `suffix-${obj.range.suffix}`\n\t\t}\n\t}\n\n\t// Storage Class\n\tif (obj.storageClass) {\n\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_STORAGE_CLASS] = obj.storageClass\n\t}\n\n\t// Checksums\n\tif (obj.checksums) {\n\t\tif (obj.checksums.md5) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_MD5] = Array.from(new Uint8Array(obj.checksums.md5))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha1) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA1] = Array.from(new Uint8Array(obj.checksums.sha1))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha256) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA256] = Array.from(new Uint8Array(obj.checksums.sha256))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha384) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA384] = Array.from(new Uint8Array(obj.checksums.sha384))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha512) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA512] = Array.from(new Uint8Array(obj.checksums.sha512))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t}\n}\n\n// HEAD operation\nfunction instrumentHead(fn: R2Bucket['head'], name: string): R2Bucket['head'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['head']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'head',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} head`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2Object | null\n\t\t\t\taddObjectMetadata(attributes, result)\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// GET operation\nfunction instrumentGet(fn: R2Bucket['get'], name: string): R2Bucket['get'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['get']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst getOptions = argArray[1] as R2GetOptions | undefined\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'get',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\n\t\t\t// Capture get options\n\t\t\tif (getOptions) {\n\t\t\t\tif (getOptions.range) {\n\t\t\t\t\tif ('offset' in getOptions.range) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_OFFSET] = getOptions.range.offset\n\t\t\t\t\t\tif ('length' in getOptions.range) {\n\t\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_LENGTH] = getOptions.range.length\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ('suffix' in getOptions.range) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_SUFFIX] = getOptions.range.suffix\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (getOptions.onlyIf) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_ONLY_IF] = JSON.stringify(getOptions.onlyIf)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} get`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2ObjectBody | null\n\t\t\t\taddObjectMetadata(attributes, result)\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// PUT operation\nfunction instrumentPut(fn: R2Bucket['put'], name: string): R2Bucket['put'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['put']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst putOptions = argArray[2] as R2PutOptions | undefined\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'put',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\n\t\t\t// Capture put options\n\t\t\tif (putOptions) {\n\t\t\t\tif (putOptions.httpMetadata) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_HTTP_METADATA] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.customMetadata) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_CUSTOM_METADATA] = Object.keys(putOptions.customMetadata).join(',')\n\t\t\t\t}\n\t\t\t\tif (putOptions.md5) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_MD5] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha1) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA1] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha256) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA256] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha384) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA384] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha512) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA512] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.storageClass) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_STORAGE_CLASS] = putOptions.storageClass\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} put`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2Object\n\t\t\t\taddObjectMetadata(attributes, result)\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// DELETE operation\nfunction instrumentDelete(fn: R2Bucket['delete'], name: string): R2Bucket['delete'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['delete']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst keys = argArray[0] as string | string[]\n\t\t\tconst isArray = Array.isArray(keys)\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'delete',\n\t\t\t}\n\n\t\t\tif (isArray) {\n\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\tattributes[ATTR_DB_QUERY_TEXT] = keys[0]\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_KEY] = keys[0]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattributes[ATTR_DB_QUERY_TEXT] = keys\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_KEY] = keys\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} delete`, options, async (span) => {\n\t\t\t\tawait Reflect.apply(target, thisArg, argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// LIST operation\nfunction instrumentList(fn: R2Bucket['list'], name: string): R2Bucket['list'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['list']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst listOptions = argArray[0] as R2ListOptions | undefined\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'list',\n\t\t\t}\n\n\t\t\t// Capture list options\n\t\t\tif (listOptions) {\n\t\t\t\tif (listOptions.prefix) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_PREFIX] = listOptions.prefix\n\t\t\t\t}\n\t\t\t\tif (listOptions.limit) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_LIMIT] = listOptions.limit\n\t\t\t\t}\n\t\t\t\tif (listOptions.delimiter) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_DELIMITER] = listOptions.delimiter\n\t\t\t\t}\n\t\t\t\tif (listOptions.startAfter) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_START_AFTER] = listOptions.startAfter\n\t\t\t\t}\n\t\t\t\tif (listOptions.include) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_INCLUDE] = listOptions.include.join(',')\n\t\t\t\t}\n\t\t\t\tif (listOptions.cursor) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_CURSOR] = listOptions.cursor\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} list`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2Objects\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_TRUNCATED] = result.truncated\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_OBJECTS_COUNT] = result.objects.length\n\t\t\t\tif (result.delimitedPrefixes) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_DELIMITED_PREFIXES_COUNT] = result.delimitedPrefixes.length\n\t\t\t\t}\n\t\t\t\tif (result.truncated && 'cursor' in result && result.cursor) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_CURSOR] = result.cursor\n\t\t\t\t}\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// CREATE MULTIPART UPLOAD operation\nfunction instrumentCreateMultipartUpload(\n\tfn: R2Bucket['createMultipartUpload'],\n\tname: string,\n): R2Bucket['createMultipartUpload'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['createMultipartUpload']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'createMultipartUpload',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} createMultipartUpload`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2MultipartUpload\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID] = result.uploadId\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// RESUME MULTIPART UPLOAD operation\nfunction instrumentResumeMultipartUpload(\n\tfn: R2Bucket['resumeMultipartUpload'],\n\tname: string,\n): R2Bucket['resumeMultipartUpload'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['resumeMultipartUpload']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst uploadId = argArray[1] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'resumeMultipartUpload',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID]: uploadId,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} resumeMultipartUpload`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2MultipartUpload\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentR2Bucket(bucket: R2Bucket, name: string): R2Bucket {\n\tconst bucketHandler: ProxyHandler<R2Bucket> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Don't instrument non-function properties\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (operation) {\n\t\t\t\tcase 'head':\n\t\t\t\t\treturn instrumentHead(fn, name)\n\t\t\t\tcase 'get':\n\t\t\t\t\treturn instrumentGet(fn, name)\n\t\t\t\tcase 'put':\n\t\t\t\t\treturn instrumentPut(fn, name)\n\t\t\t\tcase 'delete':\n\t\t\t\t\treturn instrumentDelete(fn, name)\n\t\t\t\tcase 'list':\n\t\t\t\t\treturn instrumentList(fn, name)\n\t\t\t\tcase 'createMultipartUpload':\n\t\t\t\t\treturn instrumentCreateMultipartUpload(fn, name)\n\t\t\t\tcase 'resumeMultipartUpload':\n\t\t\t\t\treturn instrumentResumeMultipartUpload(fn, name)\n\t\t\t\tdefault:\n\t\t\t\t\t// Don't instrument unknown methods\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(bucket, bucketHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_CLOUDFLARE_IMAGES_KEY,\n\tATTR_CLOUDFLARE_IMAGES_VARIANTS_COUNT,\n\tATTR_CLOUDFLARE_IMAGES_UPLOADED,\n\tATTR_CLOUDFLARE_IMAGES_RESPONSE_ID,\n\tATTR_CLOUDFLARE_IMAGES_RESPONSE_FILENAME,\n\tATTR_CLOUDFLARE_IMAGES_METADATA_KEYS,\n\tATTR_CLOUDFLARE_IMAGES_REQUIRE_SIGNED_URLS,\n} from '../constants'\n\n// Note: Since Images binding isn't in @cloudflare/workers-types yet,\n// we'll use generic types and duck-typing detection\ntype ImagesBinding = {\n\tget: (key: string) => Promise<unknown>\n\tlist: (options?: unknown) => Promise<unknown>\n\tdelete: (key: string) => Promise<void>\n\t[key: string]: unknown\n}\n\n// Instrument GET operation\nfunction instrumentImagesGet(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('images')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'Images',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_CLOUDFLARE_IMAGES_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Images ${name} get`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as any\n\n\t\t\t\t// Add response metadata if available\n\t\t\t\tif (result && typeof result === 'object') {\n\t\t\t\t\tif (result.id) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_RESPONSE_ID] = result.id\n\t\t\t\t\t}\n\t\t\t\t\tif (result.filename) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_RESPONSE_FILENAME] = result.filename\n\t\t\t\t\t}\n\t\t\t\t\tif (result.uploaded) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_UPLOADED] = result.uploaded\n\t\t\t\t\t}\n\t\t\t\t\tif (result.metadata && typeof result.metadata === 'object') {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_METADATA_KEYS] = Object.keys(result.metadata).join(',')\n\t\t\t\t\t}\n\t\t\t\t\tif (result.variants && Array.isArray(result.variants)) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_VARIANTS_COUNT] = result.variants.length\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof result.requireSignedURLs === 'boolean') {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_REQUIRE_SIGNED_URLS] = result.requireSignedURLs\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// Instrument LIST operation\nfunction instrumentImagesList(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('images')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'Images',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Images ${name} list`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as any\n\n\t\t\t\t// Add count of images returned\n\t\t\t\tif (result && typeof result === 'object' && Array.isArray(result.images)) {\n\t\t\t\t\tspan.setAttribute('cloudflare.images.list.count', result.images.length)\n\t\t\t\t}\n\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// Instrument DELETE operation\nfunction instrumentImagesDelete(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('images')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'Images',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_CLOUDFLARE_IMAGES_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Images ${name} delete`, options, async (span) => {\n\t\t\t\tawait Reflect.apply(target, thisArg, argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentImagesBinding(images: ImagesBinding, name: string): ImagesBinding {\n\tconst imagesHandler: ProxyHandler<ImagesBinding> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Don't instrument non-function properties\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (String(prop)) {\n\t\t\t\tcase 'get':\n\t\t\t\t\treturn instrumentImagesGet(fn, name)\n\t\t\t\tcase 'list':\n\t\t\t\t\treturn instrumentImagesList(fn, name)\n\t\t\t\tcase 'delete':\n\t\t\t\t\treturn instrumentImagesDelete(fn, name)\n\t\t\t\tdefault:\n\t\t\t\t\t// Don't instrument unknown methods\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(images, imagesHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_CLOUDFLARE_RATE_LIMIT_KEY,\n\tATTR_CLOUDFLARE_RATE_LIMIT_ALLOWED,\n\tATTR_CLOUDFLARE_RATE_LIMIT_SUCCESS,\n} from '../constants'\n\n// Note: Rate Limiting binding types - using duck typing since not in @cloudflare/workers-types\ntype RateLimitBinding = {\n\tlimit: (options: { key: string }) => Promise<{ success: boolean }>\n\t[key: string]: unknown\n}\n\n// Instrument LIMIT operation\nfunction instrumentRateLimitLimit(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('rate_limit')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst options = argArray[0] as { key: string }\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'RateLimit',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_CLOUDFLARE_RATE_LIMIT_KEY]: options.key,\n\t\t\t}\n\t\t\tconst spanOptions: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`RateLimit ${name} limit`, spanOptions, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as { success: boolean }\n\n\t\t\t\t// Add result attributes\n\t\t\t\tif (result && typeof result === 'object') {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_RATE_LIMIT_SUCCESS] = result.success\n\t\t\t\t\t// Determine if the request was allowed based on success\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_RATE_LIMIT_ALLOWED] = result.success\n\t\t\t\t}\n\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentRateLimitBinding(rateLimit: RateLimitBinding, name: string): RateLimitBinding {\n\tconst rateLimitHandler: ProxyHandler<RateLimitBinding> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Don't instrument non-function properties\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (String(prop)) {\n\t\t\t\tcase 'limit':\n\t\t\t\t\treturn instrumentRateLimitLimit(fn, name)\n\t\t\t\tdefault:\n\t\t\t\t\t// Don't instrument unknown methods\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(rateLimit, rateLimitHandler)\n}\n","import { isProxyable, wrap } from '../wrap'\nimport { instrumentDOBinding } from './do'\nimport { instrumentKV } from './kv'\nimport { instrumentQueueSender } from './queue'\nimport { instrumentServiceBinding } from './service'\nimport { instrumentD1 } from './d1'\nimport { instrumentAnalyticsEngineDataset } from './analytics-engine'\nimport { instrumentR2Bucket } from './r2'\nimport { instrumentImagesBinding } from './images'\nimport { instrumentRateLimitBinding } from './rate-limit'\n\nconst isJSRPC = (item?: unknown): item is Service => {\n\t// @ts-expect-error The point of RPC types is to block non-existent properties, but that's the goal here\n\treturn !!(item as Service)?.['__some_property_that_will_never_exist' + Math.random()]\n}\n\nconst isKVNamespace = (item?: unknown): item is KVNamespace => {\n\treturn !isJSRPC(item) && !!(item as KVNamespace)?.getWithMetadata\n}\n\nconst isQueue = (item?: unknown): item is Queue<unknown> => {\n\treturn !isJSRPC(item) && !!(item as Queue<unknown>)?.sendBatch\n}\n\nconst isDurableObject = (item?: unknown): item is DurableObjectNamespace => {\n\treturn !isJSRPC(item) && !!(item as DurableObjectNamespace)?.idFromName\n}\n\nexport const isVersionMetadata = (item?: unknown): item is WorkerVersionMetadata => {\n\treturn (\n\t\t!isJSRPC(item) &&\n\t\ttypeof (item as WorkerVersionMetadata)?.id === 'string' &&\n\t\ttypeof (item as WorkerVersionMetadata)?.tag === 'string'\n\t)\n}\n\nconst isAnalyticsEngineDataset = (item?: unknown): item is AnalyticsEngineDataset => {\n\treturn !isJSRPC(item) && !!(item as AnalyticsEngineDataset)?.writeDataPoint\n}\n\nconst isD1Database = (item?: unknown): item is D1Database => {\n\treturn !!(item as D1Database)?.exec && !!(item as D1Database)?.prepare\n}\n\nconst isR2Bucket = (item?: unknown): item is R2Bucket => {\n\treturn !isJSRPC(item) && !!(item as R2Bucket)?.head && !!(item as R2Bucket)?.list\n}\n\nconst isImagesBinding = (item?: unknown): boolean => {\n\t// Images binding detection - has get, list, delete methods\n\t// Note: Using generic detection since Images binding isn't in @cloudflare/workers-types yet\n\tconst obj = item as any\n\treturn (\n\t\t!isJSRPC(item) &&\n\t\ttypeof obj?.get === 'function' &&\n\t\ttypeof obj?.list === 'function' &&\n\t\ttypeof obj?.delete === 'function' &&\n\t\t// Distinguish from other bindings with similar methods\n\t\t!isR2Bucket(item) &&\n\t\t!isKVNamespace(item)\n\t)\n}\n\nconst isRateLimitBinding = (item?: unknown): boolean => {\n\t// Rate Limiting binding detection - has limit method\n\tconst obj = item as any\n\treturn !isJSRPC(item) && typeof obj?.limit === 'function' && !isDurableObject(item)\n}\n\nconst instrumentEnv = <E extends Record<string, unknown>>(env: E): E => {\n\tconst envHandler: ProxyHandler<Record<string, unknown>> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst item = Reflect.get(target, prop, receiver)\n\t\t\tif (!isProxyable(item)) {\n\t\t\t\treturn item\n\t\t\t}\n\t\t\tif (isJSRPC(item)) {\n\t\t\t\treturn instrumentServiceBinding(item, String(prop))\n\t\t\t} else if (isKVNamespace(item)) {\n\t\t\t\treturn instrumentKV(item, String(prop))\n\t\t\t} else if (isQueue(item)) {\n\t\t\t\treturn instrumentQueueSender(item, String(prop))\n\t\t\t} else if (isDurableObject(item)) {\n\t\t\t\treturn instrumentDOBinding(item, String(prop))\n\t\t\t} else if (isVersionMetadata(item)) {\n\t\t\t\t// we do not need to log accesses to the metadata\n\t\t\t\treturn item\n\t\t\t} else if (isAnalyticsEngineDataset(item)) {\n\t\t\t\treturn instrumentAnalyticsEngineDataset(item, String(prop))\n\t\t\t} else if (isD1Database(item)) {\n\t\t\t\treturn instrumentD1(item, String(prop))\n\t\t\t} else if (isR2Bucket(item)) {\n\t\t\t\treturn instrumentR2Bucket(item, String(prop))\n\t\t\t} else if (isImagesBinding(item)) {\n\t\t\t\treturn instrumentImagesBinding(item as any, String(prop))\n\t\t\t} else if (isRateLimitBinding(item)) {\n\t\t\t\treturn instrumentRateLimitBinding(item as any, String(prop))\n\t\t\t} else {\n\t\t\t\treturn item\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(env, envHandler) as E\n}\n\nexport { instrumentEnv }\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport { Overloads } from './common'\nimport {\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_KEYS,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_START,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_START_AFTER,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_END,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_PREFIX,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_REVERSE,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_LIMIT,\n\tATTR_CLOUDFLARE_DO_KV_RESPONSE_DELETED_COUNT,\n\tATTR_CLOUDFLARE_DO_ALLOW_CONCURRENCY,\n\tATTR_CLOUDFLARE_DO_ALLOW_UNCONFIRMED,\n\tATTR_CLOUDFLARE_DO_NO_CACHE,\n\tATTR_CLOUDFLARE_DO_SQL_QUERY_BINDINGS,\n\tATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_READ,\n\tATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_WRITTEN,\n\tATTR_DB_QUERY_TEXT,\n} from '../constants'\n\ntype ExtraAttributeFn = (argArray: any[], result: any) => Attributes\n\nconst dbSystem = 'Cloudflare DO'\n\ntype DurableObjectCommonOptions = Pick<DurableObjectPutOptions, 'allowConcurrency' | 'allowUnconfirmed' | 'noCache'>\nfunction isDurableObjectCommonOptions(options: any): options is DurableObjectCommonOptions {\n\treturn (\n\t\ttypeof options === 'object' &&\n\t\t('allowConcurrency' in options || 'allowUnconfirmed' in options || 'noCache' in options)\n\t)\n}\n\n/** Applies attributes for common Durable Objects options:\n * `allowConcurrency`, `allowUnconfirmed`, and `noCache`\n */\nfunction applyOptionsAttributes(attrs: Attributes, options: DurableObjectCommonOptions) {\n\tif ('allowConcurrency' in options) {\n\t\tattrs[ATTR_CLOUDFLARE_DO_ALLOW_CONCURRENCY] = options.allowConcurrency\n\t}\n\tif ('allowUnconfirmed' in options) {\n\t\tattrs[ATTR_CLOUDFLARE_DO_ALLOW_UNCONFIRMED] = options.allowUnconfirmed\n\t}\n\tif ('noCache' in options) {\n\t\tattrs[ATTR_CLOUDFLARE_DO_NO_CACHE] = options.noCache\n\t}\n}\n\nconst StorageAttributes: Record<string | symbol, ExtraAttributeFn> = {\n\tdelete(argArray, result: Awaited<ReturnType<Overloads<DurableObjectStorage['delete']>>>) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['delete']>>\n\t\tlet attrs: Attributes = {}\n\t\tif (Array.isArray(args[0])) {\n\t\t\tconst keys = args[0]\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: keys[0],\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT]: keys.length,\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_RESPONSE_DELETED_COUNT]: result,\n\t\t\t}\n\t\t} else {\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: args[0],\n\t\t\t}\n\t\t}\n\t\tif (args[1]) {\n\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t}\n\t\treturn attrs\n\t},\n\tdeleteAll(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['deleteAll']>>\n\t\tlet attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tapplyOptionsAttributes(attrs, args[0])\n\t\t}\n\t\treturn attrs\n\t},\n\tget(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['get']>>\n\t\tlet attrs: Attributes = {}\n\t\tif (Array.isArray(args[0])) {\n\t\t\tconst keys = args[0]\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: keys[0],\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT]: keys.length,\n\t\t\t}\n\t\t} else {\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: args[0],\n\t\t\t}\n\t\t}\n\t\tif (args[1]) {\n\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t}\n\t\treturn attrs\n\t},\n\tlist(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['list']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tconst options = args[0]\n\t\t\tapplyOptionsAttributes(attrs, options)\n\t\t\tif ('start' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_START] = options.start\n\t\t\t}\n\t\t\tif ('startAfter' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_START_AFTER] = options.startAfter\n\t\t\t}\n\t\t\tif ('end' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_END] = options.end\n\t\t\t}\n\t\t\tif ('prefix' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_PREFIX] = options.prefix\n\t\t\t}\n\t\t\tif ('reverse' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_REVERSE] = options.reverse\n\t\t\t}\n\t\t\tif ('limit' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_LIMIT] = options.limit\n\t\t\t}\n\t\t}\n\t\treturn attrs\n\t},\n\tput(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['put']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (typeof args[0] === 'string') {\n\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS] = args[0]\n\t\t\tif (args[2]) {\n\t\t\t\tapplyOptionsAttributes(attrs, args[2])\n\t\t\t}\n\t\t} else {\n\t\t\tconst keys = Object.keys(args[0])\n\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS] = keys[0]\n\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT] = keys.length\n\t\t\tif (isDurableObjectCommonOptions(args[1])) {\n\t\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t\t}\n\t\t}\n\t\treturn attrs\n\t},\n\tgetAlarm(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['getAlarm']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tapplyOptionsAttributes(attrs, args[0])\n\t\t}\n\t\treturn attrs\n\t},\n\tsetAlarm(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['setAlarm']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0] instanceof Date) {\n\t\t\tattrs['db.cf.do.alarm_time'] = args[0].getTime()\n\t\t} else {\n\t\t\tattrs['db.cf.do.alarm_time'] = args[0]\n\t\t}\n\t\tif (args[1]) {\n\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t}\n\t\treturn attrs\n\t},\n\tdeleteAlarm(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['deleteAlarm']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tapplyOptionsAttributes(attrs, args[0])\n\t\t}\n\t\treturn attrs\n\t},\n}\n\nfunction instrumentStorageFn(fn: Function, operation: string) {\n\tconst tracer = trace.getTracer('do_storage')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Durable Object Storage ${operation}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tconst extraAttrsFn = StorageAttributes[operation]\n\t\t\t\tconst extraAttrs = extraAttrsFn ? extraAttrsFn(argArray, result) : {}\n\t\t\t\tspan.setAttributes(extraAttrs)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentStorage(storage: DurableObjectStorage): DurableObjectStorage {\n\tconst storageHandler: ProxyHandler<DurableObjectStorage> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Check if this is the sql property (DurableObjectStorage.sql)\n\t\t\tif (prop === 'sql' && typeof fn === 'object' && fn !== null) {\n\t\t\t\treturn instrumentSQLStorage(fn as SqlStorage)\n\t\t\t}\n\n\t\t\treturn instrumentStorageFn(fn, operation)\n\t\t},\n\t}\n\treturn wrap(storage, storageHandler)\n}\n\n// SQL Storage API Instrumentation\ntype SQLStorageCursor = {\n\trowsRead: number\n\trowsWritten: number\n\t[Symbol.iterator](): IterableIterator<any>\n\ttoArray(): any[]\n\tone(): any\n\tnext(): { done?: boolean; value?: any }\n}\n\nfunction instrumentSQLStorageExec(fn: SqlStorage['exec'], operation: string): SqlStorage['exec'] {\n\tconst tracer = trace.getTracer('do_sql_storage')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst query = argArray[0] as string\n\t\t\tconst bindings = argArray.slice(1) as unknown[]\n\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: query,\n\t\t\t}\n\n\t\t\tif (bindings && bindings.length > 0) {\n\t\t\t\tattributes[ATTR_CLOUDFLARE_DO_SQL_QUERY_BINDINGS] = bindings.length\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Durable Object SQL ${operation}`, options, (span) => {\n\t\t\t\tconst cursor = Reflect.apply(target, thisArg, argArray) as SQLStorageCursor\n\t\t\t\tlet spanEnded = false\n\n\t\t\t\tconst endSpanWithMetrics = () => {\n\t\t\t\t\tif (spanEnded) return\n\t\t\t\t\tspanEnded = true\n\n\t\t\t\t\t// Capture metrics from cursor\n\t\t\t\t\tif (typeof cursor.rowsRead === 'number') {\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_READ, cursor.rowsRead)\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof cursor.rowsWritten === 'number') {\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_WRITTEN, cursor.rowsWritten)\n\t\t\t\t\t}\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\n\t\t\t\t// For DDL statements (CREATE, DROP, ALTER) and multi-statement queries that aren't typically iterated,\n\t\t\t\t// end the span immediately after capturing available metrics\n\t\t\t\t// This handles cases like: ctx.storage.sql.exec('CREATE TABLE ...')\n\t\t\t\t// We use a microtask to allow synchronous property access to complete first\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!spanEnded) {\n\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Wrap the cursor to intercept iteration methods\n\t\t\t\tconst wrappedCursor = new Proxy(cursor, {\n\t\t\t\t\tget(target, prop, receiver) {\n\t\t\t\t\t\tconst value = Reflect.get(target, prop, receiver)\n\n\t\t\t\t\t\t// Intercept methods that consume the cursor\n\t\t\t\t\t\tif (prop === 'toArray') {\n\t\t\t\t\t\t\treturn function (this: any, ...args: any[]) {\n\t\t\t\t\t\t\t\tconst result = typeof value === 'function' ? value.apply(target, args) : value\n\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (prop === 'one') {\n\t\t\t\t\t\t\treturn function (this: any, ...args: any[]) {\n\t\t\t\t\t\t\t\tconst result = typeof value === 'function' ? value.apply(target, args) : value\n\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Intercept Symbol.iterator (used by spread operator and for-of)\n\t\t\t\t\t\tif (prop === Symbol.iterator) {\n\t\t\t\t\t\t\treturn function (this: any) {\n\t\t\t\t\t\t\t\tconst iterator = (typeof value === 'function' ? value.apply(target) : value) as Iterator<any>\n\t\t\t\t\t\t\t\tlet iterationComplete = false\n\n\t\t\t\t\t\t\t\t// Wrap the iterator to detect when iteration completes\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tnext() {\n\t\t\t\t\t\t\t\t\t\tconst result = iterator.next()\n\t\t\t\t\t\t\t\t\t\tif (result.done && !iterationComplete) {\n\t\t\t\t\t\t\t\t\t\t\titerationComplete = true\n\t\t\t\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t[Symbol.iterator]() {\n\t\t\t\t\t\t\t\t\t\treturn this\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Intercept next() for manual iteration\n\t\t\t\t\t\tif (prop === 'next') {\n\t\t\t\t\t\t\treturn function (this: any, ...args: any[]) {\n\t\t\t\t\t\t\t\tconst result = typeof value === 'function' ? value.apply(target, args) : value\n\t\t\t\t\t\t\t\tif (result && result.done) {\n\t\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn typeof value === 'function' ? value.bind(target) : value\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\treturn wrappedCursor\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nfunction instrumentSQLStorage(sql: SqlStorage): SqlStorage {\n\tconst sqlHandler: ProxyHandler<SqlStorage> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (prop) {\n\t\t\t\tcase 'exec':\n\t\t\t\t\treturn instrumentSQLStorageExec(fn, 'exec')\n\t\t\t\tdefault:\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(sql, sqlHandler)\n}\n","import { context as api_context, propagation, Context } from '@opentelemetry/api'\n\n/**\n * Magic symbol to identify RPC context carrier objects\n * This helps us distinguish our injected context from user arguments\n */\nconst RPC_CONTEXT_MARKER = '__otel_rpc_ctx__'\n\n/**\n * RPC Context Carrier\n * A plain object that can be serialized and passed through RPC calls\n */\nexport interface RpcContextCarrier {\n\t[RPC_CONTEXT_MARKER]: true\n\theaders: Record<string, string>\n\t// Metadata about the RPC call\n\tdoName?: string // DO name if available (from id.name)\n}\n\n/**\n * Check if an object is an RPC context carrier\n */\nexport function isRpcContextCarrier(obj: unknown): obj is RpcContextCarrier {\n\treturn typeof obj === 'object' && obj !== null && RPC_CONTEXT_MARKER in obj && obj[RPC_CONTEXT_MARKER] === true\n}\n\n/**\n * Inject the current trace context into an RPC context carrier\n * This serializes the active context into a plain object that can be\n * passed as an argument through RPC calls\n */\nexport function injectRpcContext(ctx: Context = api_context.active(), doName?: string): RpcContextCarrier {\n\tconst carrier: RpcContextCarrier = {\n\t\t[RPC_CONTEXT_MARKER]: true,\n\t\theaders: {},\n\t}\n\n\t// Add DO name if provided\n\tif (doName) {\n\t\tcarrier.doName = doName\n\t}\n\n\t// Use OpenTelemetry's propagation API to inject context into headers\n\tpropagation.inject(ctx, carrier.headers, {\n\t\tset: (headers, key, value) => {\n\t\t\theaders[key] = typeof value === 'string' ? value : String(value)\n\t\t},\n\t})\n\n\treturn carrier\n}\n\n/**\n * Extract trace context from an RPC context carrier\n * This deserializes the context from the carrier object back into\n * an OpenTelemetry Context that can be used as a parent span\n */\nexport function extractRpcContext(carrier: RpcContextCarrier): Context {\n\treturn propagation.extract(api_context.active(), carrier.headers, {\n\t\tget(headers, key) {\n\t\t\treturn headers[key] || undefined\n\t\t},\n\t\tkeys(headers) {\n\t\t\treturn Object.keys(headers)\n\t\t},\n\t})\n}\n\n/**\n * Remove RPC context carrier from arguments array if present\n * Returns a tuple of [extracted context or undefined, cleaned args]\n */\nexport function extractAndRemoveRpcContext(args: unknown[]): [Context | undefined, unknown[]] {\n\tif (args.length > 0 && isRpcContextCarrier(args[0])) {\n\t\tconst carrier = args[0]\n\t\tconst extractedContext = extractRpcContext(carrier)\n\t\tconst cleanedArgs = args.slice(1)\n\t\treturn [extractedContext, cleanedArgs]\n\t}\n\treturn [undefined, args]\n}\n","import { context as api_context, trace, SpanOptions, SpanKind, Exception, SpanStatusCode } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { passthroughGet, unwrap, wrap } from '../wrap'\nimport {\n\tgetParentContextFromHeaders,\n\tgatherIncomingCfAttributes,\n\tgatherRequestAttributes,\n\tgatherResponseAttributes,\n\tinstrumentClientFetch,\n} from './fetch'\nimport { instrumentEnv } from './env'\nimport { getActiveConfig, Initialiser, setConfig } from '../config'\nimport { instrumentStorage } from './do-storage'\nimport { DOConstructorTrigger } from '../types'\nimport { ATTR_CLOUDFLARE_JSRPC_METHOD, ATTR_RPC_SYSTEM, ATTR_RPC_SERVICE, ATTR_RPC_METHOD } from '../constants'\nimport { injectRpcContext, extractAndRemoveRpcContext } from './rpc-context'\n\nimport { DurableObject as DurableObjectClass } from 'cloudflare:workers'\n\ntype DO = DurableObject | DurableObjectClass\ntype FetchFn = DurableObject['fetch']\ntype AlarmFn = DurableObject['alarm']\ntype Env = Record<string, unknown>\n\nexport interface InstrumentOptions extends Omit<SpanOptions, 'kind'> {\n\t// Any standard SpanOptions (attributes, links, etc.)\n}\n\nexport type InstrumentMethod = {\n\t<T>(name: string, fn: () => Promise<T>): Promise<T>\n\t<T>(name: string, options: InstrumentOptions, fn: () => Promise<T>): Promise<T>\n}\n\n/**\n * Base class for instrumented Durable Objects with TypeScript support for injected methods.\n * Extend this instead of DurableObject to automatically get typing for `this.instrument()`.\n *\n * @example\n * ```typescript\n * import { InstrumentedDurableObject } from '@inference-net/otel-cf-workers'\n *\n * export class MyDO extends InstrumentedDurableObject<Env> {\n * async someMethod() {\n * // this.instrument is available with full TypeScript support!\n * await this.instrument('custom-operation', async () => {\n * // Your code here\n * })\n * }\n * }\n * ```\n */\nexport class InstrumentedDurableObject<Env = unknown> extends DurableObjectClass<Env> {\n\tdeclare instrument: InstrumentMethod\n}\n\nfunction createInstrumentMethod(state: DurableObjectState, initialiser: Initialiser, env: Env): InstrumentMethod {\n\treturn async function instrument<T>(\n\t\tname: string,\n\t\toptionsOrFn: InstrumentOptions | (() => Promise<T>),\n\t\tmaybeFn?: () => Promise<T>,\n\t): Promise<T> {\n\t\t// Parse arguments - support both forms\n\t\tconst options: InstrumentOptions = typeof optionsOrFn === 'function' ? {} : optionsOrFn\n\t\tconst fn = typeof optionsOrFn === 'function' ? optionsOrFn : maybeFn!\n\n\t\tconst tracer = trace.getTracer('DO custom span')\n\n\t\tconst spanOptions: SpanOptions = {\n\t\t\t...options,\n\t\t\tattributes: {\n\t\t\t\t'do.id': state.id.toString(),\n\t\t\t\t...(state.id.name && { 'do.name': state.id.name }),\n\t\t\t\t...options.attributes,\n\t\t\t},\n\t\t}\n\n\t\t// Ensure config is available in context\n\t\t// If already in a traced context (fetch/alarm/RPC), config will exist\n\t\t// If not, we need to initialize it\n\t\tconst executeWithConfig = async () => {\n\t\t\tconst currentContext = api_context.active()\n\t\t\tconst existingConfig = getActiveConfig()\n\n\t\t\tlet context = currentContext\n\t\t\tif (!existingConfig) {\n\t\t\t\t// No config in context - we're being called outside fetch/alarm/RPC\n\t\t\t\t// Initialize config for this call\n\t\t\t\tconst config = initialiser(env, { id: state.id.toString(), name: state.id.name })\n\t\t\t\tcontext = setConfig(config, currentContext)\n\t\t\t}\n\n\t\t\t// Use the current active context - if we're inside fetch/alarm/RPC,\n\t\t\t// this will be a child span. Otherwise, it's a root span.\n\t\t\treturn api_context.with(context, () =>\n\t\t\t\ttracer.startActiveSpan(name, spanOptions, async (span) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await fn()\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\treturn executeWithConfig()\n\t}\n}\n\nfunction instrumentRpcMethod(method: Function, methodName: string, nsName: string, stubId: DurableObjectId): Function {\n\tconst tracer = trace.getTracer('do_rpc_client')\n\n\tconst rpcHandler: ProxyHandler<Function> = {\n\t\tapply: async (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\t[ATTR_RPC_SYSTEM]: 'cloudflare_rpc',\n\t\t\t\t[ATTR_RPC_SERVICE]: nsName,\n\t\t\t\t[ATTR_RPC_METHOD]: methodName,\n\t\t\t\t[ATTR_CLOUDFLARE_JSRPC_METHOD]: methodName,\n\t\t\t\t'do.namespace': nsName,\n\t\t\t\t'do.id': stubId.toString(),\n\t\t\t\t'do.id.name': stubId.name,\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\n\t\t\t// Use DO name if available, otherwise namespace\n\t\t\tconst serviceName = stubId.name || nsName\n\t\t\tconst spanName = `RPC ${serviceName}.${methodName}`\n\n\t\t\treturn tracer.startActiveSpan(spanName, options, async (span) => {\n\t\t\t\ttry {\n\t\t\t\t\t// Inject trace context as first argument, including DO name if available\n\t\t\t\t\tconst contextCarrier = injectRpcContext(api_context.active(), stubId.name)\n\t\t\t\t\tconst argsWithContext = [contextCarrier, ...argArray]\n\n\t\t\t\t\tconst result = await Reflect.apply(target, thisArg, argsWithContext)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\treturn result\n\t\t\t\t} catch (error) {\n\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\tthrow error\n\t\t\t\t} finally {\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t}\n\n\treturn wrap(method, rpcHandler)\n}\n\nfunction instrumentBindingStub(stub: DurableObjectStub, nsName: string): DurableObjectStub {\n\tconst stubHandler: ProxyHandler<typeof stub> = {\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === 'fetch') {\n\t\t\t\tconst fetcher = Reflect.get(target, prop)\n\t\t\t\tconst attrs = {\n\t\t\t\t\tname: `Durable Object ${nsName}`,\n\t\t\t\t\t'do.namespace': nsName,\n\t\t\t\t\t'do.id': target.id.toString(),\n\t\t\t\t\t'do.id.name': target.id.name,\n\t\t\t\t}\n\t\t\t\treturn instrumentClientFetch(fetcher, () => ({ includeTraceContext: true }), attrs)\n\t\t\t} else {\n\t\t\t\t// Get the property value\n\t\t\t\tconst value = passthroughGet(target, prop, receiver)\n\n\t\t\t\t// Check if it's an RPC method (function from the DO class)\n\t\t\t\tif (typeof value === 'function' && typeof prop === 'string') {\n\t\t\t\t\t// Instrument RPC method calls\n\t\t\t\t\treturn instrumentRpcMethod(value, prop, nsName, target.id)\n\t\t\t\t}\n\n\t\t\t\treturn value\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(stub, stubHandler)\n}\n\nfunction instrumentBindingGet(getFn: DurableObjectNamespace['get'], nsName: string): DurableObjectNamespace['get'] {\n\tconst getHandler: ProxyHandler<DurableObjectNamespace['get']> = {\n\t\tapply(target, thisArg, argArray) {\n\t\t\tconst stub: DurableObjectStub = Reflect.apply(target, thisArg, argArray)\n\t\t\treturn instrumentBindingStub(stub, nsName)\n\t\t},\n\t}\n\treturn wrap(getFn, getHandler)\n}\n\n// getByName is just a convenience wrapper that calls idFromName + get\n// We still need to instrument it to capture the stub\nfunction instrumentBindingGetByName(\n\tgetByNameFn: DurableObjectNamespace['getByName'],\n\tnsName: string,\n): DurableObjectNamespace['getByName'] {\n\tconst getByNameHandler: ProxyHandler<DurableObjectNamespace['getByName']> = {\n\t\tapply(target, thisArg, argArray) {\n\t\t\tconst stub: DurableObjectStub = Reflect.apply(target, thisArg, argArray)\n\t\t\t// The name passed to getByName should be available on stub.id.name\n\t\t\t// but we'll also track it ourselves to be safe\n\t\t\treturn instrumentBindingStub(stub, nsName)\n\t\t},\n\t}\n\treturn wrap(getByNameFn, getByNameHandler)\n}\n\nexport function instrumentDOBinding(ns: DurableObjectNamespace, nsName: string) {\n\tconst nsHandler: ProxyHandler<typeof ns> = {\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === 'get') {\n\t\t\t\tconst fn = Reflect.get(ns, prop, receiver)\n\t\t\t\treturn instrumentBindingGet(fn, nsName)\n\t\t\t} else if (prop === 'getByName') {\n\t\t\t\tconst fn = Reflect.get(ns, prop, receiver)\n\t\t\t\treturn instrumentBindingGetByName(fn, nsName)\n\t\t\t} else {\n\t\t\t\treturn passthroughGet(target, prop, receiver)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(ns, nsHandler)\n}\n\nexport function instrumentState(state: DurableObjectState) {\n\tconst stateHandler: ProxyHandler<DurableObjectState> = {\n\t\tget(target, prop, receiver) {\n\t\t\tconst result = Reflect.get(target, prop, unwrap(receiver))\n\t\t\tif (prop === 'storage') {\n\t\t\t\treturn instrumentStorage(result)\n\t\t\t} else if (typeof result === 'function') {\n\t\t\t\treturn result.bind(target)\n\t\t\t} else {\n\t\t\t\treturn result\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(state, stateHandler)\n}\n\nlet cold_start = true\nexport function executeDOFetch(fetchFn: FetchFn, request: Request, id: DurableObjectId): Promise<Response> {\n\tconst spanContext = getParentContextFromHeaders(request.headers)\n\n\tconst tracer = trace.getTracer('DO fetchHandler')\n\tconst attributes = {\n\t\t[SemanticAttributes.FAAS_TRIGGER]: 'http',\n\t\t[SemanticAttributes.FAAS_COLDSTART]: cold_start,\n\t}\n\tcold_start = false\n\tObject.assign(attributes, gatherRequestAttributes(request))\n\tObject.assign(attributes, gatherIncomingCfAttributes(request))\n\tconst options: SpanOptions = {\n\t\tattributes,\n\t\tkind: SpanKind.SERVER,\n\t}\n\n\tconst name = id.name || ''\n\tconst promise = tracer.startActiveSpan(`Durable Object Fetch ${name}`, options, spanContext, async (span) => {\n\t\ttry {\n\t\t\tconst response: Response = await fetchFn(request)\n\t\t\tif (response.ok) {\n\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t}\n\t\t\tspan.setAttributes(gatherResponseAttributes(response))\n\t\t\tspan.end()\n\n\t\t\treturn response\n\t\t} catch (error) {\n\t\t\tspan.recordException(error as Exception)\n\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\tspan.end()\n\t\t\tthrow error\n\t\t}\n\t})\n\treturn promise\n}\n\nexport function executeDOAlarm(alarmFn: NonNullable<AlarmFn>, id: DurableObjectId): Promise<void> {\n\tconst tracer = trace.getTracer('DO alarmHandler')\n\n\tconst name = id.name || ''\n\tconst promise = tracer.startActiveSpan(`Durable Object Alarm ${name}`, async (span) => {\n\t\tspan.setAttribute(SemanticAttributes.FAAS_COLDSTART, cold_start)\n\t\tcold_start = false\n\t\tspan.setAttribute('do.id', id.toString())\n\t\tif (id.name) span.setAttribute('do.name', id.name)\n\n\t\ttry {\n\t\t\tawait alarmFn()\n\t\t\tspan.end()\n\t\t} catch (error) {\n\t\t\tspan.recordException(error as Exception)\n\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\tspan.end()\n\t\t\tthrow error\n\t\t}\n\t})\n\treturn promise\n}\n\nfunction instrumentFetchFn(fetchFn: FetchFn, initialiser: Initialiser, env: Env, id: DurableObjectId): FetchFn {\n\tconst fetchHandler: ProxyHandler<FetchFn> = {\n\t\tasync apply(target, thisArg, argArray: Parameters<FetchFn>) {\n\t\t\tconst request = argArray[0]\n\t\t\tconst config = initialiser(env, request)\n\t\t\tconst context = setConfig(config)\n\t\t\ttry {\n\t\t\t\tconst bound = target.bind(unwrap(thisArg))\n\t\t\t\treturn await api_context.with(context, executeDOFetch, undefined, bound, request, id)\n\t\t\t} catch (error) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(fetchFn, fetchHandler)\n}\n\nfunction instrumentAlarmFn(alarmFn: AlarmFn, initialiser: Initialiser, env: Env, id: DurableObjectId) {\n\tif (!alarmFn) return undefined\n\n\tconst alarmHandler: ProxyHandler<NonNullable<AlarmFn>> = {\n\t\tasync apply(target, thisArg) {\n\t\t\tconst config = initialiser(env, 'do-alarm')\n\t\t\tconst context = setConfig(config)\n\t\t\ttry {\n\t\t\t\tconst bound = target.bind(unwrap(thisArg))\n\t\t\t\treturn await api_context.with(context, executeDOAlarm, undefined, bound, id)\n\t\t\t} catch (error) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(alarmFn, alarmHandler)\n}\n\nfunction instrumentRpcHandlerMethod(\n\tfn: Function,\n\tmethodName: string,\n\tinitialiser: Initialiser,\n\tenv: Env,\n\tid: DurableObjectId,\n): Function {\n\tif (!fn) return fn\n\n\tconst fnHandler: ProxyHandler<Function> = {\n\t\tasync apply(target, thisArg, argArray) {\n\t\t\tthisArg = unwrap(thisArg)\n\t\t\tconst config = initialiser(env, 'do-rpc')\n\n\t\t\t// Extract and remove RPC context carrier from arguments\n\t\t\tconst [extractedContext, cleanedArgs] = extractAndRemoveRpcContext(argArray)\n\n\t\t\t// Get DO name from carrier if available, fall back to id.name\n\t\t\tconst carrierDoName = argArray.length > 0 && extractedContext ? (argArray[0] as any).doName : undefined\n\t\t\tconst doName = carrierDoName || id.name || undefined\n\n\t\t\t// Build the context: start with extracted parent context (if any), then add config\n\t\t\tlet context = extractedContext || api_context.active()\n\t\t\tcontext = setConfig(config, context)\n\n\t\t\tconst tracer = trace.getTracer('do_rpc_handler')\n\n\t\t\tconst executeRpc = async () => {\n\t\t\t\tconst attributes: Record<string, string> = {\n\t\t\t\t\t[ATTR_RPC_SYSTEM]: 'cloudflare_rpc',\n\t\t\t\t\t[ATTR_RPC_METHOD]: methodName,\n\t\t\t\t\t[ATTR_CLOUDFLARE_JSRPC_METHOD]: methodName,\n\t\t\t\t\t[SemanticAttributes.FAAS_TRIGGER]: 'rpc',\n\t\t\t\t\t'do.id': id.toString(),\n\t\t\t\t}\n\n\t\t\t\tif (doName) {\n\t\t\t\t\tattributes['do.name'] = doName\n\t\t\t\t}\n\n\t\t\t\tconst options: SpanOptions = {\n\t\t\t\t\tkind: SpanKind.SERVER,\n\t\t\t\t\tattributes,\n\t\t\t\t}\n\n\t\t\t\tconst spanName = doName ? `${doName}.${methodName}` : `${attributes['do.id']}.${methodName}`\n\n\t\t\t\t// Use the current context (which includes extracted parent) for the span\n\t\t\t\treturn tracer.startActiveSpan(spanName, options, api_context.active(), async (span) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst bound = target.bind(thisArg)\n\t\t\t\t\t\t// Use cleaned args (without context carrier) for the actual method call\n\t\t\t\t\t\tconst result = await bound.apply(thisArg, cleanedArgs)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn await api_context.with(context, executeRpc)\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nfunction instrumentDurableObject(doObj: DO, initialiser: Initialiser, env: Env, state: DurableObjectState) {\n\tconst objHandler: ProxyHandler<DurableObject> = {\n\t\tget(target, prop) {\n\t\t\t// instrument, env, and ctx are now real properties, so this won't be called for them\n\t\t\t// This proxy mainly handles fetch, alarm, and RPC method wrapping\n\t\t\tif (prop === 'fetch') {\n\t\t\t\tconst fetchFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentFetchFn(fetchFn, initialiser, env, state.id)\n\t\t\t} else if (prop === 'alarm') {\n\t\t\t\tconst alarmFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentAlarmFn(alarmFn, initialiser, env, state.id)\n\t\t\t} else {\n\t\t\t\tconst result = Reflect.get(target, prop)\n\t\t\t\tif (typeof result === 'function' && typeof prop === 'string') {\n\t\t\t\t\tresult.bind(doObj)\n\t\t\t\t\t// Instrument as RPC handler method (server-side)\n\t\t\t\t\treturn instrumentRpcHandlerMethod(result, prop, initialiser, env, state.id)\n\t\t\t\t}\n\t\t\t\treturn result\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(doObj, objHandler)\n}\n\nexport type DOClass = { new (state: DurableObjectState, env: any): DO }\n\nexport function instrumentDOClass<C extends DOClass>(doClass: C, initialiser: Initialiser): C {\n\tconst classHandler: ProxyHandler<C> = {\n\t\tconstruct(target, [orig_state, orig_env]: ConstructorParameters<DOClass>) {\n\t\t\tconst trigger: DOConstructorTrigger = {\n\t\t\t\tid: orig_state.id.toString(),\n\t\t\t\tname: orig_state.id.name,\n\t\t\t}\n\t\t\tconst constructorConfig = initialiser(orig_env, trigger)\n\t\t\tconst context = setConfig(constructorConfig)\n\t\t\tconst state = instrumentState(orig_state)\n\t\t\tconst env = instrumentEnv(orig_env)\n\n\t\t\t// Always pass original state/env to constructor\n\t\t\t// The DurableObject base class (if extends DurableObject) expects the real types\n\t\t\tconst createDO = () => new target(orig_state, orig_env)\n\t\t\tconst doObj = api_context.with(context, createDO)\n\n\t\t\t// Always inject instrumented versions as real properties\n\t\t\t// This works for both class-style and legacy DOs, and avoids proxy issues\n\t\t\tconst instrumentMethod = createInstrumentMethod(state, initialiser, env)\n\n\t\t\tObject.defineProperty(doObj, 'instrument', {\n\t\t\t\tvalue: instrumentMethod,\n\t\t\t\twritable: false,\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\n\t\t\tObject.defineProperty(doObj, 'env', {\n\t\t\t\tvalue: env,\n\t\t\t\twritable: false,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\n\t\t\tObject.defineProperty(doObj, 'ctx', {\n\t\t\t\tvalue: state,\n\t\t\t\twritable: false,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\n\t\t\treturn instrumentDurableObject(doObj, initialiser, env, state)\n\t\t},\n\t}\n\treturn wrap(doClass, classHandler)\n}\n","import { SpanKind } from '@opentelemetry/api'\nimport { HandlerInstrumentation, InitialSpanInfo, OrPromise } from '../types'\nimport {\n\tATTR_FAAS_CRON,\n\tATTR_FAAS_TIME,\n\tATTR_FAAS_TRIGGER,\n\tFAAS_TRIGGER_VALUE_TIMER,\n} from '@opentelemetry/semantic-conventions/incubating'\nimport { ATTR_CLOUDFLARE_SCHEDULED_TIME } from '../constants'\n\nexport const scheduledInstrumentation: HandlerInstrumentation<ScheduledController, OrPromise<void>> = {\n\tgetInitialSpanInfo: function (controller: ScheduledController): InitialSpanInfo {\n\t\tconst scheduledTimeISO = new Date(controller.scheduledTime).toISOString()\n\t\treturn {\n\t\t\tname: `scheduledHandler ${controller.cron}`,\n\t\t\toptions: {\n\t\t\t\tattributes: {\n\t\t\t\t\t[ATTR_FAAS_TRIGGER]: FAAS_TRIGGER_VALUE_TIMER,\n\t\t\t\t\t[ATTR_FAAS_CRON]: controller.cron,\n\t\t\t\t\t[ATTR_FAAS_TIME]: scheduledTimeISO,\n\t\t\t\t\t[ATTR_CLOUDFLARE_SCHEDULED_TIME]: scheduledTimeISO,\n\t\t\t\t},\n\t\t\t\tkind: SpanKind.INTERNAL,\n\t\t\t},\n\t\t}\n\t},\n}\n","import { isVersionMetadata } from './env'\n\nexport function versionAttributes(env: unknown): Record<string, string | undefined> {\n\tconst attributes = {} as Record<string, string | undefined>\n\n\tif (typeof env === 'object' && env !== null) {\n\t\tfor (const [binding, data] of Object.entries(env)) {\n\t\t\tif (isVersionMetadata(data)) {\n\t\t\t\tattributes['cf.workers_version_metadata.binding'] = binding\n\t\t\t\tattributes['cf.workers_version_metadata.id'] = data.id\n\t\t\t\tattributes['cf.workers_version_metadata.tag'] = data.tag\n\t\t\t\t// Version metadata bindings are identical, so we can stop after the first one found\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn attributes\n}\n","import { trace } from '@opentelemetry/api'\nimport { WorkerTracer } from '../tracer'\nimport { passthroughGet, wrap } from '../wrap'\n\ntype ContextAndTracker = { ctx: ExecutionContext; tracker: PromiseTracker }\ntype WaitUntilFn = ExecutionContext['waitUntil']\n\nexport class PromiseTracker {\n\t_outstandingPromises: Promise<unknown>[] = []\n\n\tget outstandingPromiseCount() {\n\t\treturn this._outstandingPromises.length\n\t}\n\n\ttrack(promise: Promise<unknown>): void {\n\t\tthis._outstandingPromises.push(promise)\n\t}\n\n\tasync wait() {\n\t\tawait allSettledMutable(this._outstandingPromises)\n\t}\n}\n\nfunction createWaitUntil(fn: WaitUntilFn, context: ExecutionContext, tracker: PromiseTracker): WaitUntilFn {\n\tconst handler: ProxyHandler<WaitUntilFn> = {\n\t\tapply(target, _thisArg, argArray) {\n\t\t\ttracker.track(argArray[0])\n\t\t\treturn Reflect.apply(target, context, argArray)\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function proxyExecutionContext(context: ExecutionContext): ContextAndTracker {\n\tconst tracker = new PromiseTracker()\n\tconst ctx = new Proxy(context, {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'waitUntil') {\n\t\t\t\tconst fn = Reflect.get(target, prop)\n\t\t\t\treturn createWaitUntil(fn, context, tracker)\n\t\t\t} else {\n\t\t\t\treturn passthroughGet(target, prop)\n\t\t\t}\n\t\t},\n\t})\n\treturn { ctx, tracker }\n}\n\nexport async function exportSpans(tracker?: PromiseTracker) {\n\tconst tracer = trace.getTracer('export')\n\tif (tracer instanceof WorkerTracer) {\n\t\tawait scheduler.wait(1)\n\t\tawait tracker?.wait()\n\t\tawait tracer.forceFlush()\n\t} else {\n\t\tconsole.error('The global tracer is not of type WorkerTracer and can not export spans')\n\t}\n}\n\n/** Like `Promise.allSettled`, but handles modifications to the promises array */\nasync function allSettledMutable(promises: Promise<unknown>[]): Promise<PromiseSettledResult<unknown>[]> {\n\tlet values: PromiseSettledResult<unknown>[]\n\t// when the length of the array changes, there has been a nested call to waitUntil\n\t// and we should await the promises again\n\tdo {\n\t\tvalues = await Promise.allSettled(promises)\n\t} while (values.length !== promises.length)\n\treturn values\n}\n\n/** Overloads extracts up to 4 overloads for the given function. */\nexport type Overloads<T> = T extends {\n\t(...args: infer P1): infer R1\n\t(...args: infer P2): infer R2\n\t(...args: infer P3): infer R3\n\t(...args: infer P4): infer R4\n}\n\t? ((...args: P1) => R1) | ((...args: P2) => R2) | ((...args: P3) => R3) | ((...args: P4) => R4)\n\t: never\n","import { SpanKind, type SpanOptions } from '@opentelemetry/api'\nimport {\n\tATTR_FAAS_TRIGGER,\n\tATTR_MESSAGING_DESTINATION_NAME,\n\tATTR_RPC_MESSAGE_ID,\n} from '@opentelemetry/semantic-conventions/incubating'\nimport { HandlerInstrumentation, OrPromise } from '../types'\nimport { ATTR_CLOUDFLARE_EMAIL_FROM, ATTR_CLOUDFLARE_EMAIL_TO, ATTR_CLOUDFLARE_EMAIL_SIZE } from '../constants'\n\n/**\n * Converts the message headers into a record ready to be injected\n * as OpenTelemetry attributes\n *\n * @example\n * ```ts\n * const headers = new Headers({ \"Subject\": \"Hello!\", From: \"hello@example.com\" })\n * headerAttributes({ headers })\n * // => {\"email.header.Subject\": \"Hello!\", \"email.header.From\": \"hello@example.com\"}\n * ```\n */\nfunction headerAttributes(message: { headers: Headers }): Record<string, unknown> {\n\treturn Object.fromEntries([...message.headers].map(([key, value]) => [`email.header.${key}`, value] as const))\n}\n\nexport const emailInstrumentation: HandlerInstrumentation<ForwardableEmailMessage, OrPromise<void>> = {\n\tgetInitialSpanInfo: (message) => {\n\t\tconst attributes = {\n\t\t\t[ATTR_FAAS_TRIGGER]: 'other',\n\t\t\t[ATTR_RPC_MESSAGE_ID]: message.headers.get('Message-Id') ?? undefined,\n\t\t\t[ATTR_MESSAGING_DESTINATION_NAME]: message.to,\n\t\t\t[ATTR_CLOUDFLARE_EMAIL_FROM]: message.from,\n\t\t\t[ATTR_CLOUDFLARE_EMAIL_TO]: message.to,\n\t\t\t[ATTR_CLOUDFLARE_EMAIL_SIZE]: message.rawSize,\n\t\t}\n\t\tObject.assign(attributes, headerAttributes(message))\n\t\tconst options = {\n\t\t\tattributes,\n\t\t\tkind: SpanKind.CONSUMER,\n\t\t} satisfies SpanOptions\n\n\t\treturn {\n\t\t\tname: `emailHandler ${message.to}`,\n\t\t\toptions,\n\t\t}\n\t},\n}\n","import { context as api_context, Exception, propagation, SpanStatusCode, trace } from '@opentelemetry/api'\nimport { Resource, resourceFromAttributes } from '@opentelemetry/resources'\nimport { W3CTraceContextPropagator } from '@opentelemetry/core'\n\nimport { Initialiser, parseConfig, setConfig, ResolvedConfig } from './config'\nimport { WorkerTracerProvider } from './provider'\nimport { Trigger, OrPromise, HandlerInstrumentation, ConfigurationOption } from './types'\nimport { WorkerLoggerProvider, getLogger } from './logs/provider'\nimport { unwrap } from './wrap'\nimport { WorkerTracer } from './tracer'\n\nimport { fetchInstrumentation, instrumentGlobalFetch } from './instrumentation/fetch'\nimport { instrumentGlobalCache } from './instrumentation/cache'\nimport { QueueInstrumentation } from './instrumentation/queue'\nimport { DOClass, instrumentDOClass } from './instrumentation/do'\nimport { scheduledInstrumentation } from './instrumentation/scheduled'\nimport { instrumentEnv } from './instrumentation/env'\nimport { versionAttributes } from './instrumentation/version'\nimport { PromiseTracker, proxyExecutionContext } from './instrumentation/common'\nimport { emailInstrumentation } from './instrumentation/email'\nimport { PACKAGE_VERSION } from './constants'\nimport { env } from 'cloudflare:workers'\n\ntype FetchHandler = ExportedHandlerFetchHandler<unknown, unknown>\ntype ScheduledHandler = ExportedHandlerScheduledHandler<unknown>\ntype QueueHandler = ExportedHandlerQueueHandler\ntype EmailHandler = EmailExportedHandler\n\ntype Env = Record<string, any>\ntype HandlerFn<T extends Trigger, E extends Env, R extends any> = (\n\ttrigger: T,\n\tenv: E,\n\tctx: ExecutionContext,\n) => R | Promise<R>\n\nexport function isRequest(trigger: Trigger): trigger is Request {\n\treturn trigger instanceof Request\n}\n\nexport function isMessageBatch(trigger: Trigger): trigger is MessageBatch {\n\treturn !!(trigger as MessageBatch).ackAll\n}\n\nexport function isAlarm(trigger: Trigger): trigger is 'do-alarm' {\n\treturn trigger === 'do-alarm'\n}\n\nfunction findVersionMeta(): WorkerVersionMetadata | undefined {\n\treturn Object.values(env).find((binding: any) => {\n\t\treturn (\n\t\t\tObject.getPrototypeOf(binding).constructor.name === 'Object' &&\n\t\t\tbinding.id !== undefined &&\n\t\t\tbinding.tag !== undefined\n\t\t)\n\t})\n}\n\nconst createResource = (serviceConfig: any, versionMeta?: WorkerVersionMetadata): Resource => {\n\tconsole.log({ versionMeta })\n\tconst workerResourceAttrs = {\n\t\t'cloud.provider': 'cloudflare',\n\t\t'cloud.platform': 'cloudflare.workers',\n\t\t'cloud.region': 'earth',\n\t\t'faas.max_memory': 134217728,\n\t\t'telemetry.sdk.language': 'js',\n\t\t'telemetry.sdk.name': '@inference-net/otel-cf-workers',\n\t\t'telemetry.sdk.version': PACKAGE_VERSION,\n\t\t'cf.worker.version.id': versionMeta?.id,\n\t\t'cf.worker.version.tag': versionMeta?.tag,\n\t\t'cf.worker.version.timestamp': versionMeta?.timestamp,\n\t}\n\tconst serviceResource = resourceFromAttributes({\n\t\t'service.name': serviceConfig.name,\n\t\t'service.namespace': serviceConfig.namespace,\n\t\t'service.version': serviceConfig.version,\n\t})\n\tconst resource = resourceFromAttributes(workerResourceAttrs)\n\treturn resource.merge(serviceResource)\n}\n\nlet initialised = false\nfunction init(config: ResolvedConfig, serviceConfig: any, propagator: any): void {\n\tif (!initialised) {\n\t\tconst resource = createResource(serviceConfig, findVersionMeta())\n\n\t\t// Initialize traces if configured\n\t\tif (config.trace) {\n\t\t\tif (config.trace.instrumentation.instrumentGlobalCache) {\n\t\t\t\tinstrumentGlobalCache()\n\t\t\t}\n\t\t\tif (config.trace.instrumentation.instrumentGlobalFetch) {\n\t\t\t\tinstrumentGlobalFetch()\n\t\t\t}\n\n\t\t\tconst traceProvider = new WorkerTracerProvider(config.trace.spanProcessors, resource)\n\t\t\ttraceProvider.register()\n\t\t}\n\n\t\t// Initialize logs if configured\n\t\tif (config.logs && config.logs.processors.length > 0) {\n\t\t\tconst logsProvider = new WorkerLoggerProvider(config.logs.processors, resource, config.logs.level)\n\t\t\tlogsProvider.register()\n\n\t\t\t// Instrument console if enabled\n\t\t\tif (config.logs.instrumentation.instrumentConsole) {\n\t\t\t\timport('./logs/console').then(({ instrumentConsole }) => {\n\t\t\t\t\tinstrumentConsole()\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Set global propagator\n\t\tpropagation.setGlobalPropagator(propagator)\n\n\t\tinitialised = true\n\t}\n}\n\nfunction createInitialiser(config: ConfigurationOption): Initialiser {\n\tif (typeof config === 'function') {\n\t\treturn (env, trigger) => {\n\t\t\tconst userConfig = config(env, trigger)\n\t\t\tconst conf = parseConfig(userConfig)\n\t\t\tconst propagator = userConfig.propagator || new W3CTraceContextPropagator()\n\t\t\tinit(conf, userConfig.service, propagator)\n\t\t\treturn conf\n\t\t}\n\t} else {\n\t\treturn () => {\n\t\t\tconst conf = parseConfig(config)\n\t\t\tconst propagator = config.propagator || new W3CTraceContextPropagator()\n\t\t\tinit(conf, config.service, propagator)\n\t\t\treturn conf\n\t\t}\n\t}\n}\n\nexport async function exportTelemetry(traceId: string, tracker?: PromiseTracker) {\n\tconst tracer = trace.getTracer('export')\n\tconst logger = getLogger('export')\n\n\t// Export traces\n\tif (tracer instanceof WorkerTracer) {\n\t\tawait scheduler.wait(1)\n\t\tawait tracker?.wait()\n\t\tawait tracer.forceFlush(traceId)\n\t}\n\n\t// Export logs\n\tif (logger && typeof logger.forceFlush === 'function') {\n\t\tawait logger.forceFlush()\n\t}\n}\n\n// Backward compatibility\nexport const exportSpans = exportTelemetry\n\ntype HandlerFnArgs<T extends Trigger, E extends Env> = (T | E | ExecutionContext)[]\ntype OrderedHandlerFnArgs<T extends Trigger, E extends Env> = [trigger: T, env: E, ctx: ExecutionContext]\n\nlet cold_start = true\nfunction createHandlerFlowFn<T extends Trigger, E extends Env, R extends any>(\n\tinstrumentation: HandlerInstrumentation<T, R>,\n): (handlerFn: HandlerFn<T, E, R>, [trigger, env, context]: HandlerFnArgs<T, E>) => ReturnType<HandlerFn<T, E, R>> {\n\treturn (handlerFn, args) => {\n\t\tconst [trigger, env, context] = args as OrderedHandlerFnArgs<T, E>\n\t\tconst proxiedEnv = instrumentEnv(env)\n\t\tconst { ctx: proxiedCtx, tracker } = proxyExecutionContext(context)\n\n\t\tconst instrumentedTrigger = instrumentation.instrumentTrigger ? instrumentation.instrumentTrigger(trigger) : trigger\n\n\t\tconst tracer = trace.getTracer('handler') as WorkerTracer\n\n\t\tconst { name, options, context: spanContext } = instrumentation.getInitialSpanInfo(trigger)\n\t\tconst attrs = options.attributes || {}\n\t\tattrs['faas.coldstart'] = cold_start\n\t\toptions.attributes = attrs\n\t\tObject.assign(attrs, versionAttributes(env))\n\t\tcold_start = false\n\n\t\tconst parentContext = spanContext || api_context.active()\n\t\tconst result = tracer.startActiveSpan(name, options, parentContext, async (span) => {\n\t\t\ttry {\n\t\t\t\tconst result = await handlerFn(instrumentedTrigger, proxiedEnv, proxiedCtx)\n\n\t\t\t\t// Check if this is a WebSocket upgrade request - if so, don't touch the response\n\t\t\t\tconst isWebSocketUpgrade =\n\t\t\t\t\tisRequest(trigger) &&\n\t\t\t\t\ttrigger.headers.get('upgrade')?.toLowerCase() === 'websocket' &&\n\t\t\t\t\ttrigger.headers.has('sec-websocket-key')\n\n\t\t\t\tif (isWebSocketUpgrade) {\n\t\t\t\t\tconst logger = getLogger('handler')\n\t\t\t\t\tlogger.trace('WebSocket upgrade detected, closing span without reading response')\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t} else {\n\t\t\t\t\tif (instrumentation.getAttributesFromResult) {\n\t\t\t\t\t\tconst attributes = instrumentation.getAttributesFromResult(result)\n\t\t\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (instrumentation.executionSucces) {\n\t\t\t\t\t\tinstrumentation.executionSucces(span, trigger, result)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result\n\t\t\t} catch (error) {\n\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\tif (instrumentation.executionFailed) {\n\t\t\t\t\tinstrumentation.executionFailed(span, trigger, error)\n\t\t\t\t}\n\t\t\t\tthrow error\n\t\t\t} finally {\n\t\t\t\tspan.end()\n\t\t\t\tcontext.waitUntil(exportTelemetry(span.spanContext().traceId, tracker))\n\t\t\t}\n\t\t})\n\n\t\treturn result\n\t}\n}\n\nfunction createHandlerProxy<T extends Trigger, E extends Env, R extends OrPromise<any>>(\n\thandler: unknown,\n\thandlerFn: HandlerFn<T, E, R>,\n\tinitialiser: Initialiser,\n\tinstrumentation: HandlerInstrumentation<T, R>,\n): HandlerFn<T, E, R> {\n\treturn (trigger: T, env: E, ctx: ExecutionContext): ReturnType<HandlerFn<T, E, R>> => {\n\t\tconst config = initialiser(env, trigger)\n\t\tconst context = setConfig(config)\n\n\t\tconst flowFn = createHandlerFlowFn<T, E, R>(instrumentation)\n\t\treturn api_context.with(context, flowFn, handler, handlerFn, [trigger, env, ctx]) as R\n\t}\n}\n\nexport function instrument<E extends Env, Q, C>(\n\thandler: ExportedHandler<E, Q, C>,\n\tconfig: ConfigurationOption,\n): ExportedHandler<E, Q, C> {\n\tconst initialiser = createInitialiser(config)\n\n\tif (handler.fetch) {\n\t\tconst fetcher = unwrap(handler.fetch) as FetchHandler\n\t\thandler.fetch = createHandlerProxy(handler, fetcher, initialiser, fetchInstrumentation)\n\t}\n\n\tif (handler.scheduled) {\n\t\tconst scheduler = unwrap(handler.scheduled) as ScheduledHandler\n\t\thandler.scheduled = createHandlerProxy(handler, scheduler, initialiser, scheduledInstrumentation)\n\t}\n\n\tif (handler.queue) {\n\t\tconst queuer = unwrap(handler.queue) as QueueHandler\n\t\thandler.queue = createHandlerProxy(handler, queuer, initialiser, new QueueInstrumentation())\n\t}\n\n\tif (handler.email) {\n\t\tconst emailer = unwrap(handler.email) as EmailHandler\n\t\thandler.email = createHandlerProxy(handler, emailer, initialiser, emailInstrumentation)\n\t}\n\n\treturn handler\n}\n\nexport function instrumentDO(doClass: DOClass, config: ConfigurationOption) {\n\tconst initialiser = createInitialiser(config)\n\n\treturn instrumentDOClass(doClass, initialiser)\n}\n\nexport const __unwrappedFetch = unwrap(fetch)\n","import { SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { ExportResult, ExportResultCode } from '@opentelemetry/core'\n\n// First implementation, completely synchronous, more tested.\n\nexport class MultiSpanExporter implements SpanExporter {\n\tprivate exporters: Array<SpanExporter>\n\tconstructor(exporters: Array<SpanExporter>) {\n\t\tthis.exporters = exporters\n\t}\n\n\texport(items: any[], resultCallback: (result: ExportResult) => void): void {\n\t\tfor (const exporter of this.exporters) {\n\t\t\texporter.export(items, resultCallback)\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tfor (const exporter of this.exporters) {\n\t\t\tawait exporter.shutdown()\n\t\t}\n\t}\n}\n\n// async\n\nexport class MultiSpanExporterAsync implements SpanExporter {\n\tprivate exporters: Array<SpanExporter>\n\tconstructor(exporters: Array<SpanExporter>) {\n\t\tthis.exporters = exporters\n\t}\n\n\texport(items: any[], resultCallback: (result: ExportResult) => void): void {\n\t\tconst promises = this.exporters.map(\n\t\t\t(exporter) =>\n\t\t\t\tnew Promise<ExportResult>((resolve) => {\n\t\t\t\t\texporter.export(items, resolve)\n\t\t\t\t}),\n\t\t)\n\n\t\tPromise.all(promises).then((results) => {\n\t\t\tconst failed = results.filter((result) => result.code === ExportResultCode.FAILED)\n\t\t\tif (failed.length > 0) {\n\t\t\t\t// not ideal, but just return the first error\n\t\t\t\tresultCallback({ code: ExportResultCode.FAILED, error: failed[0]!.error })\n\t\t\t} else {\n\t\t\t\tresultCallback({ code: ExportResultCode.SUCCESS })\n\t\t\t}\n\t\t})\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait Promise.all(this.exporters.map((exporter) => exporter.shutdown()))\n\t}\n}\n","import { ExportResultCode } from '@opentelemetry/core'\nimport { OTLPExporterError } from '@opentelemetry/otlp-exporter-base'\nimport {\n\tLogTransport,\n\tReadableLogRecord,\n\tExportResultCallback,\n\tOTLPTransportConfig,\n\tConsoleTransportConfig,\n} from './types'\nimport { unwrap } from '../wrap'\nimport { DEFAULT_OTLP_HEADERS } from '../constants'\n\n/**\n * OTLP HTTP/JSON Transport for Logs\n * Sends logs to an OpenTelemetry-compatible backend using OTLP/HTTP protocol\n */\nexport class OTLPTransport implements LogTransport {\n\treadonly name = 'otlp'\n\tprivate headers: Record<string, string>\n\tprivate url: string\n\n\tconstructor(config: OTLPTransportConfig) {\n\t\tthis.url = config.url\n\t\tthis.headers = Object.assign({}, DEFAULT_OTLP_HEADERS, config.headers)\n\t}\n\n\texport(logs: ReadableLogRecord[], callback: ExportResultCallback): void {\n\t\tthis._export(logs)\n\t\t\t.then(() => {\n\t\t\t\tcallback({ code: ExportResultCode.SUCCESS })\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tcallback({ code: ExportResultCode.FAILED, error })\n\t\t\t})\n\t}\n\n\tprivate async _export(logs: ReadableLogRecord[]): Promise<void> {\n\t\ttry {\n\t\t\tawait this.send(logs)\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tprivate async send(logs: ReadableLogRecord[]): Promise<void> {\n\t\t// Transform to OTLP JSON format\n\t\tconst otlpLogs = this.transformToOTLP(logs)\n\t\tconst body = JSON.stringify(otlpLogs)\n\n\t\tconst params: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.headers,\n\t\t\tbody,\n\t\t}\n\n\t\tconst response = await unwrap(fetch)(this.url, params)\n\n\t\tif (!response.ok) {\n\t\t\tthrow new OTLPExporterError(`Exporter received a statusCode: ${response.status}`)\n\t\t}\n\t}\n\n\tprivate transformToOTLP(logs: ReadableLogRecord[]): any {\n\t\t// Group logs by resource and scope\n\t\tconst resourceLogsMap = new Map<string, Map<string, ReadableLogRecord[]>>()\n\n\t\tfor (const log of logs) {\n\t\t\tconst resourceKey = JSON.stringify(log.resource.attributes)\n\t\t\tconst scopeKey = JSON.stringify(log.instrumentationScope)\n\n\t\t\tif (!resourceLogsMap.has(resourceKey)) {\n\t\t\t\tresourceLogsMap.set(resourceKey, new Map())\n\t\t\t}\n\n\t\t\tconst scopeLogsMap = resourceLogsMap.get(resourceKey)!\n\t\t\tif (!scopeLogsMap.has(scopeKey)) {\n\t\t\t\tscopeLogsMap.set(scopeKey, [])\n\t\t\t}\n\n\t\t\tscopeLogsMap.get(scopeKey)!.push(log)\n\t\t}\n\n\t\t// Build OTLP structure\n\t\tconst resourceLogs: any[] = []\n\n\t\tfor (const [resourceKey, scopeLogsMap] of resourceLogsMap) {\n\t\t\tconst resource = logs.find((l) => JSON.stringify(l.resource.attributes) === resourceKey)!.resource\n\n\t\t\tconst scopeLogs: any[] = []\n\t\t\tfor (const [_scopeKey, scopeRecords] of scopeLogsMap) {\n\t\t\t\tconst scope = scopeRecords[0]!.instrumentationScope\n\n\t\t\t\tscopeLogs.push({\n\t\t\t\t\tscope: {\n\t\t\t\t\t\tname: scope.name,\n\t\t\t\t\t\tversion: scope.version,\n\t\t\t\t\t},\n\t\t\t\t\tlogRecords: scopeRecords.map((log) => this.transformLogRecord(log)),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tresourceLogs.push({\n\t\t\t\tresource: {\n\t\t\t\t\tattributes: this.transformAttributes(resource.attributes),\n\t\t\t\t},\n\t\t\t\tscopeLogs,\n\t\t\t})\n\t\t}\n\n\t\treturn { resourceLogs }\n\t}\n\n\tprivate transformLogRecord(log: ReadableLogRecord): any {\n\t\tconst record: any = {\n\t\t\ttimeUnixNano: this.hrTimeToString(log.timeUnixNano),\n\t\t\tobservedTimeUnixNano: this.hrTimeToString(log.observedTimeUnixNano),\n\t\t\tseverityNumber: log.severityNumber,\n\t\t\tseverityText: log.severityText,\n\t\t\tbody: this.transformBody(log.body),\n\t\t\tattributes: this.transformAttributes(log.attributes),\n\t\t\tdroppedAttributesCount: log.droppedAttributesCount || 0,\n\t\t}\n\n\t\tif (log.traceId) {\n\t\t\trecord.traceId = log.traceId\n\t\t}\n\t\tif (log.spanId) {\n\t\t\trecord.spanId = log.spanId\n\t\t}\n\t\tif (log.traceFlags !== undefined) {\n\t\t\trecord.flags = log.traceFlags\n\t\t}\n\n\t\treturn record\n\t}\n\n\tprivate transformBody(body: any): any {\n\t\tif (body === undefined || body === null) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (typeof body === 'string') {\n\t\t\treturn { stringValue: body }\n\t\t}\n\t\t// For objects, JSON stringify\n\t\treturn { stringValue: JSON.stringify(body) }\n\t}\n\n\tprivate transformAttributes(attrs: Record<string, any>): any[] {\n\t\treturn Object.entries(attrs).map(([key, value]) => ({\n\t\t\tkey,\n\t\t\tvalue: this.transformAttributeValue(value),\n\t\t}))\n\t}\n\n\tprivate transformAttributeValue(value: any): any {\n\t\tif (typeof value === 'string') {\n\t\t\treturn { stringValue: value }\n\t\t} else if (typeof value === 'number') {\n\t\t\tif (Number.isInteger(value)) {\n\t\t\t\treturn { intValue: value.toString() }\n\t\t\t}\n\t\t\treturn { doubleValue: value }\n\t\t} else if (typeof value === 'boolean') {\n\t\t\treturn { boolValue: value }\n\t\t} else if (Array.isArray(value)) {\n\t\t\treturn {\n\t\t\t\tarrayValue: {\n\t\t\t\t\tvalues: value.map((v) => this.transformAttributeValue(v)),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\t// Fallback to string\n\t\treturn { stringValue: String(value) }\n\t}\n\n\tprivate hrTimeToString(hrTime: [number, number]): string {\n\t\t// Convert [seconds, nanoseconds] to nanoseconds string\n\t\tconst nanos = BigInt(hrTime[0]) * BigInt(1_000_000_000) + BigInt(hrTime[1])\n\t\treturn nanos.toString()\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\t// No cleanup needed\n\t}\n}\n\n/**\n * Console Transport for Logs\n * Pretty-prints logs to the console for development\n */\nexport class ConsoleTransport implements LogTransport {\n\treadonly name = 'console'\n\tprivate options: ConsoleTransportConfig\n\n\tconstructor(options: ConsoleTransportConfig = {}) {\n\t\tthis.options = {\n\t\t\tpretty: options.pretty ?? true,\n\t\t\tcolors: options.colors ?? false,\n\t\t\tincludeTimestamp: options.includeTimestamp ?? true,\n\t\t\ttransformLog: options.transformLog ?? ((l) => l),\n\t\t}\n\t}\n\n\texport(logs: ReadableLogRecord[], callback: ExportResultCallback): void {\n\t\ttry {\n\t\t\tfor (const log of logs) {\n\t\t\t\tthis.printLog(this.options.transformLog ? this.options.transformLog(log) : log)\n\t\t\t}\n\t\t\tcallback({ code: ExportResultCode.SUCCESS })\n\t\t} catch (error) {\n\t\t\tcallback({ code: ExportResultCode.FAILED, error: error as Error })\n\t\t}\n\t}\n\n\tprivate printLog(log: ReadableLogRecord): void {\n\t\tif (this.options.pretty) {\n\t\t\tthis.prettyPrint(log)\n\t\t} else {\n\t\t\tconsole.log(JSON.stringify(this.serializeLog(log)))\n\t\t}\n\t}\n\n\tprivate prettyPrint(log: ReadableLogRecord): void {\n\t\tconst parts: string[] = []\n\n\t\t// Timestamp\n\t\tif (this.options.includeTimestamp) {\n\t\t\tconst timestamp = new Date(log.timeUnixNano[0] * 1000).toISOString()\n\t\t\tparts.push(`[${timestamp}]`)\n\t\t}\n\n\t\t// Severity\n\t\tconst severity = log.severityText || this.getSeverityText(log.severityNumber)\n\t\tparts.push(severity.padEnd(5))\n\n\t\t// Trace context\n\t\tif (log.traceId) {\n\t\t\tparts.push(`[trace: ${log.traceId.substring(0, 16)}...]`)\n\t\t}\n\n\t\t// Body\n\t\tconst body = typeof log.body === 'string' ? log.body : JSON.stringify(log.body)\n\t\tparts.push(body)\n\n\t\t// Log the message\n\t\tconst message = parts.join(' ')\n\n\t\t// Route to appropriate console method\n\t\tswitch (severity) {\n\t\t\tcase 'TRACE':\n\t\t\tcase 'DEBUG':\n\t\t\t\tconsole.debug(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tcase 'INFO':\n\t\t\t\tconsole.info(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tcase 'WARN':\n\t\t\t\tconsole.warn(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tcase 'ERROR':\n\t\t\tcase 'FATAL':\n\t\t\t\tconsole.error(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tconsole.log(message, log.attributes)\n\t\t}\n\t}\n\n\tprivate serializeLog(log: ReadableLogRecord): any {\n\t\treturn {\n\t\t\ttimestamp: new Date(log.timeUnixNano[0] * 1000).toISOString(),\n\t\t\tseverity: log.severityText || this.getSeverityText(log.severityNumber),\n\t\t\tbody: log.body,\n\t\t\tattributes: log.attributes,\n\t\t\ttraceId: log.traceId,\n\t\t\tspanId: log.spanId,\n\t\t\tresource: log.resource.attributes,\n\t\t\tscope: log.instrumentationScope,\n\t\t}\n\t}\n\n\tprivate getSeverityText(severityNumber?: number): string {\n\t\tif (!severityNumber) return 'INFO'\n\t\tif (severityNumber <= 4) return 'TRACE'\n\t\tif (severityNumber <= 8) return 'DEBUG'\n\t\tif (severityNumber <= 12) return 'INFO'\n\t\tif (severityNumber <= 16) return 'WARN'\n\t\tif (severityNumber <= 20) return 'ERROR'\n\t\treturn 'FATAL'\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\t// No cleanup needed\n\t}\n}\n"],"names":["millisToHr","getHrTime","context","api_context","span","headers","target","prop","dbSystem","fetcher","DurableObjectClass","cold_start","env","result","scheduler"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/buffer.ts","../src/sampling.ts","../src/types.ts","../src/wrap.ts","../src/constants.ts","../src/exporter.ts","../src/spanprocessor.ts","../src/logs/logprocessor.ts","../src/config.ts","../src/context.ts","../src/span.ts","../src/tracer.ts","../src/provider.ts","../src/logs/logrecord.ts","../src/logs/logger.ts","../src/logs/provider.ts","../src/instrumentation/user-agent.ts","../src/instrumentation/universal-attributes.ts","../src/instrumentation/fetch.ts","../src/instrumentation/cache.ts","../src/instrumentation/queue.ts","../src/instrumentation/kv.ts","../src/instrumentation/service.ts","../src/instrumentation/d1.ts","../src/instrumentation/analytics-engine.ts","../src/instrumentation/r2.ts","../src/instrumentation/images.ts","../src/instrumentation/rate-limit.ts","../src/instrumentation/env.ts","../src/instrumentation/do-storage.ts","../src/instrumentation/rpc-context.ts","../src/instrumentation/do.ts","../src/instrumentation/scheduled.ts","../src/instrumentation/version.ts","../src/instrumentation/common.ts","../src/instrumentation/email.ts","../src/sdk.ts","../src/multiexporter.ts","../src/logs/transport.ts"],"sourcesContent":["//@ts-ignore\nimport { Buffer } from 'node:buffer'\n//@ts-ignore\nglobalThis.Buffer = Buffer\n","import { TraceFlags, SpanStatusCode } from '@opentelemetry/api'\nimport { ParentBasedSampler, ReadableSpan, Sampler, TraceIdRatioBasedSampler } from '@opentelemetry/sdk-trace-base'\nimport { ParentRatioSamplingConfig } from './types'\n\nexport interface LocalTrace {\n\treadonly traceId: string\n\treadonly localRootSpan: ReadableSpan\n\treadonly spans: ReadableSpan[]\n}\n\nexport type TailSampleFn = (traceInfo: LocalTrace) => boolean\n\nexport function multiTailSampler(samplers: TailSampleFn[]): TailSampleFn {\n\treturn (traceInfo) => {\n\t\treturn samplers.reduce((result, sampler) => result || sampler(traceInfo), false)\n\t}\n}\n\nexport const isHeadSampled: TailSampleFn = (traceInfo) => {\n\tconst localRootSpan = traceInfo.localRootSpan\n\treturn (localRootSpan.spanContext().traceFlags & TraceFlags.SAMPLED) === TraceFlags.SAMPLED\n}\n\nexport const isRootErrorSpan: TailSampleFn = (traceInfo) => {\n\tconst localRootSpan = traceInfo.localRootSpan\n\treturn localRootSpan.status.code === SpanStatusCode.ERROR\n}\n\nexport function createSampler(conf: ParentRatioSamplingConfig): Sampler {\n\tconst ratioSampler = new TraceIdRatioBasedSampler(conf.ratio)\n\tif (typeof conf.acceptRemote === 'boolean' && !conf.acceptRemote) {\n\t\treturn new ParentBasedSampler({\n\t\t\troot: ratioSampler,\n\t\t\tremoteParentSampled: ratioSampler,\n\t\t\tremoteParentNotSampled: ratioSampler,\n\t\t})\n\t} else {\n\t\treturn new ParentBasedSampler({ root: ratioSampler })\n\t}\n}\n","import { Attributes, Context, SpanOptions, TextMapPropagator, Span } from '@opentelemetry/api'\nimport { ReadableSpan, Sampler, SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport { OTLPExporterConfig } from './exporter'\nimport { FetchHandlerConfig, FetcherConfig } from './instrumentation/fetch'\nimport { TailSampleFn } from './sampling'\nimport { LogTransport, LogRecordProcessor, BatchConfig as LogBatchConfig } from './logs/types'\n\nexport type OrPromise<T extends any> = T | Promise<T>\n\nexport type ResolveConfigFn<Env = any> = (env: Env, trigger: Trigger) => WorkerOtelConfig\nexport type ConfigurationOption = WorkerOtelConfig | ResolveConfigFn\n\nexport type PostProcessorFn = (spans: ReadableSpan[]) => ReadableSpan[]\n\nexport type ExporterConfig = OTLPExporterConfig | SpanExporter\n\nexport interface InitialSpanInfo {\n\tname: string\n\toptions: SpanOptions\n\tcontext?: Context\n}\n\nexport interface HandlerInstrumentation<T extends Trigger, R extends any> {\n\tgetInitialSpanInfo: (trigger: T) => InitialSpanInfo\n\tgetAttributesFromResult?: (result: Awaited<R>) => Attributes\n\tinstrumentTrigger?: (trigger: T) => T\n\texecutionSucces?: (span: Span, trigger: T, result: Awaited<R>) => void\n\texecutionFailed?: (span: Span, trigger: T, error?: any) => void\n}\n\nexport type TraceFlushableSpanProcessor = SpanProcessor & { forceFlush: (traceId?: string) => Promise<void> }\n\nexport interface HandlerConfig {\n\tfetch?: FetchHandlerConfig\n}\n\nexport interface ServiceConfig {\n\tname: string\n\tnamespace?: string\n\tversion?: string\n}\n\nexport interface ParentRatioSamplingConfig {\n\tacceptRemote?: boolean\n\tratio: number\n}\n\ntype HeadSamplerConf = Sampler | ParentRatioSamplingConfig\nexport interface SamplingConfig<HS extends HeadSamplerConf = HeadSamplerConf> {\n\theadSampler?: HS\n\ttailSampler?: TailSampleFn\n}\n\nexport interface InstrumentationOptions {\n\tinstrumentGlobalFetch?: boolean\n\tinstrumentGlobalCache?: boolean\n}\n\nexport type BatchStrategy = 'trace' | 'immediate' | 'size'\n\nexport interface TraceBatchConfig {\n\tstrategy?: BatchStrategy\n\tmaxQueueSize?: number\n\tmaxExportBatchSize?: number\n}\n\ninterface TraceConfigBase {\n\thandlers?: HandlerConfig\n\tfetch?: FetcherConfig\n\tpostProcessor?: PostProcessorFn\n\tsampling?: SamplingConfig\n\tinstrumentation?: InstrumentationOptions\n\tbatching?: TraceBatchConfig\n}\n\ninterface TraceConfigExporter extends TraceConfigBase {\n\texporter: ExporterConfig\n}\n\ninterface TraceConfigSpanProcessors extends TraceConfigBase {\n\tspanProcessors: SpanProcessor | SpanProcessor[]\n}\n\nexport type TraceConfig = TraceConfigExporter | TraceConfigSpanProcessors\n\nexport function isSpanProcessorConfig(config: TraceConfig): config is TraceConfigSpanProcessors {\n\treturn !!(config as TraceConfigSpanProcessors).spanProcessors\n}\n\nexport interface ResolvedTraceConfig extends TraceConfigBase {\n\thandlers: Required<HandlerConfig>\n\tfetch: Required<FetcherConfig>\n\tpostProcessor: PostProcessorFn\n\tsampling: Required<SamplingConfig<Sampler>>\n\tspanProcessors: SpanProcessor[]\n\tinstrumentation: InstrumentationOptions\n\tbatching: TraceBatchConfig\n}\n\nexport interface LogsInstrumentationOptions {\n\tinstrumentConsole?: boolean\n}\n\nexport type LogLevel = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL'\n\nexport interface LogsConfig {\n\ttransports?: LogTransport[]\n\tbatching?: LogBatchConfig\n\tinstrumentation?: LogsInstrumentationOptions\n}\n\nexport interface ResolvedLogsConfig {\n\tprocessors: LogRecordProcessor[]\n\tinstrumentation: LogsInstrumentationOptions\n}\n\nexport interface WorkerOtelConfig {\n\tservice: ServiceConfig\n\ttrace?: TraceConfig\n\tlogs?: LogsConfig\n\tpropagator?: TextMapPropagator\n}\n\nexport interface DOConstructorTrigger {\n\tid: string\n\tname?: string\n}\n\nexport type Trigger =\n\t| Request\n\t| MessageBatch\n\t| ScheduledController\n\t| DOConstructorTrigger\n\t| 'do-alarm'\n\t| 'do-rpc'\n\t| ForwardableEmailMessage\n","const unwrapSymbol = Symbol('unwrap')\n\ntype Wrapped<T> = { [unwrapSymbol]: T } & T\n\nexport function isWrapped<T>(item: T): item is Wrapped<T> {\n\treturn item && !!(item as Wrapped<T>)[unwrapSymbol]\n}\n\nexport function isProxyable(item: any) {\n\treturn (item !== null && typeof item === 'object') || typeof item === 'function'\n}\n\nexport function wrap<T extends object>(item: T, handler: ProxyHandler<T>, autoPassthrough: boolean = true): T {\n\tif (isWrapped(item) || !isProxyable(item)) {\n\t\treturn item\n\t}\n\tconst proxyHandler = Object.assign({}, handler)\n\tproxyHandler.get = (target, prop, receiver) => {\n\t\tif (prop === unwrapSymbol) {\n\t\t\treturn item\n\t\t} else {\n\t\t\tif (handler.get) {\n\t\t\t\treturn handler.get(target, prop, receiver)\n\t\t\t} else if (prop === 'bind') {\n\t\t\t\treturn () => receiver\n\t\t\t} else if (autoPassthrough) {\n\t\t\t\treturn passthroughGet(target, prop)\n\t\t\t}\n\t\t}\n\t}\n\tproxyHandler.apply = (target, thisArg, argArray) => {\n\t\tif (handler.apply) {\n\t\t\treturn handler.apply(unwrap(target), unwrap(thisArg), argArray)\n\t\t}\n\t}\n\treturn new Proxy(item, proxyHandler)\n}\n\nexport function unwrap<T extends object>(item: T): T {\n\tif (item && isWrapped(item)) {\n\t\treturn item[unwrapSymbol]\n\t} else {\n\t\treturn item\n\t}\n}\n\nexport function passthroughGet(target: any, prop: string | symbol, thisArg?: any) {\n\tconst unwrappedTarget = unwrap(target)\n\tthisArg = unwrap(thisArg) || unwrappedTarget\n\tconst value = Reflect.get(unwrappedTarget, prop)\n\tif (typeof value === 'function') {\n\t\tif (value.constructor.name === 'RpcProperty') {\n\t\t\treturn (...args: unknown[]) => unwrappedTarget[prop](...args)\n\t\t}\n\t\treturn value.bind(thisArg)\n\t} else {\n\t\treturn value\n\t}\n}\n","// note (harry): These constants are injected at build time by Vite\ndeclare const __PACKAGE_VERSION__: string\ndeclare const __PACKAGE_NAME__: string\n\nexport const PACKAGE_VERSION = __PACKAGE_VERSION__\nexport const PACKAGE_NAME = __PACKAGE_NAME__\n\n/**\n * Cloudflare-specific OpenTelemetry attribute keys\n * Aligned with official Cloudflare Workers telemetry specification\n */\n\n// ============================================================================\n// Universal Attributes (all spans)\n// ============================================================================\n\nexport const ATTR_CLOUD_PROVIDER = 'cloud.provider'\nexport const ATTR_CLOUD_PLATFORM = 'cloud.platform'\nexport const ATTR_CLOUDFLARE_COLO = 'cloudflare.colo'\nexport const ATTR_CLOUDFLARE_SCRIPT_NAME = 'cloudflare.script_name'\nexport const ATTR_CLOUDFLARE_SCRIPT_TAGS = 'cloudflare.script_tags'\nexport const ATTR_CLOUDFLARE_SCRIPT_VERSION_ID = 'cloudflare.script_version.id'\nexport const ATTR_TELEMETRY_SDK_NAME = 'telemetry.sdk.name'\nexport const ATTR_TELEMETRY_SDK_LANGUAGE = 'telemetry.sdk.language'\n\n// ============================================================================\n// Root Span Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_RAY_ID = 'cloudflare.ray_id'\nexport const ATTR_CLOUDFLARE_HANDLER_TYPE = 'cloudflare.handler_type'\nexport const ATTR_CLOUDFLARE_ENTRYPOINT = 'cloudflare.entrypoint'\nexport const ATTR_CLOUDFLARE_EXECUTION_MODEL = 'cloudflare.execution_model'\nexport const ATTR_CLOUDFLARE_OUTCOME = 'cloudflare.outcome'\nexport const ATTR_CLOUDFLARE_CPU_TIME_MS = 'cloudflare.cpu_time_ms'\nexport const ATTR_CLOUDFLARE_WALL_TIME_MS = 'cloudflare.wall_time_ms'\n\n// ============================================================================\n// HTTP / Fetch Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_VERIFIED_BOT_CATEGORY = 'cloudflare.verified_bot_category'\nexport const ATTR_CLOUDFLARE_ASN = 'cloudflare.asn'\nexport const ATTR_CLOUDFLARE_RESPONSE_TTFB_MS = 'cloudflare.response.time_to_first_byte_ms'\n\n// Geo attributes\nexport const ATTR_GEO_TIMEZONE = 'geo.timezone'\nexport const ATTR_GEO_CONTINENT_CODE = 'geo.continent.code'\nexport const ATTR_GEO_COUNTRY_CODE = 'geo.country.code'\nexport const ATTR_GEO_LOCALITY_NAME = 'geo.locality.name'\nexport const ATTR_GEO_LOCALITY_REGION = 'geo.locality.region'\n\n// User agent attributes\nexport const ATTR_USER_AGENT_OS_NAME = 'user_agent.os.name'\nexport const ATTR_USER_AGENT_OS_VERSION = 'user_agent.os.version'\nexport const ATTR_USER_AGENT_BROWSER_NAME = 'user_agent.browser.name'\nexport const ATTR_USER_AGENT_BROWSER_MAJOR_VERSION = 'user_agent.browser.major_version'\nexport const ATTR_USER_AGENT_BROWSER_VERSION = 'user_agent.browser.version'\nexport const ATTR_USER_AGENT_ENGINE_NAME = 'user_agent.engine.name'\nexport const ATTR_USER_AGENT_ENGINE_VERSION = 'user_agent.engine.version'\nexport const ATTR_USER_AGENT_DEVICE_TYPE = 'user_agent.device.type'\nexport const ATTR_USER_AGENT_DEVICE_VENDOR = 'user_agent.device.vendor'\nexport const ATTR_USER_AGENT_DEVICE_MODEL = 'user_agent.device.model'\n\n// HTTP headers\nexport const ATTR_HTTP_REQUEST_HEADER_CONTENT_TYPE = 'http.request.header.content-type'\nexport const ATTR_HTTP_REQUEST_HEADER_CONTENT_LENGTH = 'http.request.header.content-length'\nexport const ATTR_HTTP_REQUEST_HEADER_ACCEPT = 'http.request.header.accept'\nexport const ATTR_HTTP_REQUEST_HEADER_ACCEPT_ENCODING = 'http.request.header.accept-encoding'\nexport const ATTR_HTTP_REQUEST_HEADER_ACCEPT_LANGUAGE = 'http.request.header.accept-language'\n\n// ============================================================================\n// Scheduled Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_SCHEDULED_TIME = 'cloudflare.scheduled_time'\n\n// ============================================================================\n// Queue Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_QUEUE_NAME = 'cloudflare.queue.name'\nexport const ATTR_CLOUDFLARE_QUEUE_BATCH_SIZE = 'cloudflare.queue.batch_size'\n\n// ============================================================================\n// Email Handler Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_EMAIL_FROM = 'cloudflare.email.from'\nexport const ATTR_CLOUDFLARE_EMAIL_TO = 'cloudflare.email.to'\nexport const ATTR_CLOUDFLARE_EMAIL_SIZE = 'cloudflare.email.size'\n\n// ============================================================================\n// Binding Attributes (Common)\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_BINDING_TYPE = 'cloudflare.binding.type'\nexport const ATTR_CLOUDFLARE_BINDING_NAME = 'cloudflare.binding.name'\nexport const ATTR_DB_SYSTEM_NAME = 'db.system.name'\nexport const ATTR_DB_OPERATION_NAME = 'db.operation.name'\n\n// ============================================================================\n// D1 Database Attributes\n// ============================================================================\n\nexport const ATTR_DB_QUERY_TEXT = 'db.query.text'\nexport const ATTR_DB_OPERATION_BATCH_SIZE = 'db.operation.batch.size'\n\nexport const ATTR_CLOUDFLARE_D1_QUERY_BOOKMARK = 'cloudflare.d1.query.bookmark'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_BOOKMARK = 'cloudflare.d1.response.bookmark'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SIZE_AFTER = 'cloudflare.d1.response.size_after'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_READ = 'cloudflare.d1.response.rows_read'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_WRITTEN = 'cloudflare.d1.response.rows_written'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_LAST_ROW_ID = 'cloudflare.d1.response.last_row_id'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_CHANGED_DB = 'cloudflare.d1.response.changed_db'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_CHANGES = 'cloudflare.d1.response.changes'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SERVED_BY_REGION = 'cloudflare.d1.response.served_by_region'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SERVED_BY_PRIMARY = 'cloudflare.d1.response.served_by_primary'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_SQL_DURATION_MS = 'cloudflare.d1.response.sql_duration_ms'\nexport const ATTR_CLOUDFLARE_D1_RESPONSE_TOTAL_ATTEMPTS = 'cloudflare.d1.response.total_attempts'\n\n// ============================================================================\n// KV Namespace Attributes\n// ============================================================================\n\n// Query attributes\nexport const ATTR_CLOUDFLARE_KV_QUERY_KEYS = 'cloudflare.kv.query.keys'\nexport const ATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT = 'cloudflare.kv.query.keys.count'\nexport const ATTR_CLOUDFLARE_KV_QUERY_TYPE = 'cloudflare.kv.query.type'\nexport const ATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL = 'cloudflare.kv.query.cache_ttl'\nexport const ATTR_CLOUDFLARE_KV_QUERY_VALUE_TYPE = 'cloudflare.kv.query.value_type'\nexport const ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION = 'cloudflare.kv.query.expiration'\nexport const ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION_TTL = 'cloudflare.kv.query.expiration_ttl'\nexport const ATTR_CLOUDFLARE_KV_QUERY_METADATA = 'cloudflare.kv.query.metadata'\nexport const ATTR_CLOUDFLARE_KV_QUERY_PAYLOAD_SIZE = 'cloudflare.kv.query.payload.size'\nexport const ATTR_CLOUDFLARE_KV_QUERY_PREFIX = 'cloudflare.kv.query.prefix'\nexport const ATTR_CLOUDFLARE_KV_QUERY_LIMIT = 'cloudflare.kv.query.limit'\nexport const ATTR_CLOUDFLARE_KV_QUERY_CURSOR = 'cloudflare.kv.query.cursor'\n\n// Response attributes\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_SIZE = 'cloudflare.kv.response.size'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_RETURNED_ROWS = 'cloudflare.kv.response.returned_rows'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_METADATA = 'cloudflare.kv.response.metadata'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS = 'cloudflare.kv.response.cache_status'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_LIST_COMPLETE = 'cloudflare.kv.response.list_complete'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_CURSOR = 'cloudflare.kv.response.cursor'\nexport const ATTR_CLOUDFLARE_KV_RESPONSE_EXPIRATION = 'cloudflare.kv.response.expiration'\n\n// ============================================================================\n// R2 Storage Attributes\n// ============================================================================\n\n// Query attributes\nexport const ATTR_CLOUDFLARE_R2_QUERY_KEY = 'cloudflare.r2.query.key'\nexport const ATTR_CLOUDFLARE_R2_QUERY_PREFIX = 'cloudflare.r2.query.prefix'\nexport const ATTR_CLOUDFLARE_R2_QUERY_LIMIT = 'cloudflare.r2.query.limit'\nexport const ATTR_CLOUDFLARE_R2_QUERY_DELIMITER = 'cloudflare.r2.query.delimiter'\nexport const ATTR_CLOUDFLARE_R2_QUERY_START_AFTER = 'cloudflare.r2.query.start_after'\nexport const ATTR_CLOUDFLARE_R2_QUERY_INCLUDE = 'cloudflare.r2.query.include'\nexport const ATTR_CLOUDFLARE_R2_QUERY_RANGE = 'cloudflare.r2.query.range'\nexport const ATTR_CLOUDFLARE_R2_QUERY_OFFSET = 'cloudflare.r2.query.offset'\nexport const ATTR_CLOUDFLARE_R2_QUERY_LENGTH = 'cloudflare.r2.query.length'\nexport const ATTR_CLOUDFLARE_R2_QUERY_SUFFIX = 'cloudflare.r2.query.suffix'\nexport const ATTR_CLOUDFLARE_R2_QUERY_ONLY_IF = 'cloudflare.r2.query.only_if'\n\n// Put operation attributes\nexport const ATTR_CLOUDFLARE_R2_PUT_HTTP_METADATA = 'cloudflare.r2.put.http_metadata'\nexport const ATTR_CLOUDFLARE_R2_PUT_CUSTOM_METADATA = 'cloudflare.r2.put.custom_metadata'\nexport const ATTR_CLOUDFLARE_R2_PUT_MD5 = 'cloudflare.r2.put.md5'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA1 = 'cloudflare.r2.put.sha1'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA256 = 'cloudflare.r2.put.sha256'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA384 = 'cloudflare.r2.put.sha384'\nexport const ATTR_CLOUDFLARE_R2_PUT_SHA512 = 'cloudflare.r2.put.sha512'\nexport const ATTR_CLOUDFLARE_R2_PUT_STORAGE_CLASS = 'cloudflare.r2.put.storage_class'\n\n// Response attributes\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_SIZE = 'cloudflare.r2.response.size'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_ETAG = 'cloudflare.r2.response.etag'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_VERSION = 'cloudflare.r2.response.version'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_UPLOADED = 'cloudflare.r2.response.uploaded'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_TYPE =\n\t'cloudflare.r2.response.http_metadata.content_type'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_LANGUAGE =\n\t'cloudflare.r2.response.http_metadata.content_language'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_DISPOSITION =\n\t'cloudflare.r2.response.http_metadata.content_disposition'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_ENCODING =\n\t'cloudflare.r2.response.http_metadata.content_encoding'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_CONTROL =\n\t'cloudflare.r2.response.http_metadata.cache_control'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_EXPIRY =\n\t'cloudflare.r2.response.http_metadata.cache_expiry'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CUSTOM_METADATA_KEYS = 'cloudflare.r2.response.custom_metadata.keys'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_RANGE = 'cloudflare.r2.response.range'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_STORAGE_CLASS = 'cloudflare.r2.response.storage_class'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_MD5 = 'cloudflare.r2.response.checksums.md5'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA1 = 'cloudflare.r2.response.checksums.sha1'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA256 = 'cloudflare.r2.response.checksums.sha256'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA384 = 'cloudflare.r2.response.checksums.sha384'\nexport const ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA512 = 'cloudflare.r2.response.checksums.sha512'\n\n// List operation attributes\nexport const ATTR_CLOUDFLARE_R2_LIST_TRUNCATED = 'cloudflare.r2.list.truncated'\nexport const ATTR_CLOUDFLARE_R2_LIST_OBJECTS_COUNT = 'cloudflare.r2.list.objects.count'\nexport const ATTR_CLOUDFLARE_R2_LIST_DELIMITED_PREFIXES_COUNT = 'cloudflare.r2.list.delimited_prefixes.count'\nexport const ATTR_CLOUDFLARE_R2_LIST_CURSOR = 'cloudflare.r2.list.cursor'\n\n// Multipart upload attributes\nexport const ATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID = 'cloudflare.r2.multipart.upload_id'\nexport const ATTR_CLOUDFLARE_R2_MULTIPART_PART_NUMBER = 'cloudflare.r2.multipart.part_number'\nexport const ATTR_CLOUDFLARE_R2_MULTIPART_PARTS_COUNT = 'cloudflare.r2.multipart.parts.count'\n\n// ============================================================================\n// Cache API Attributes\n// ============================================================================\n\nexport const ATTR_CACHE_CONTROL_EXPIRATION = 'cache_control.expiration'\nexport const ATTR_CACHE_CONTROL_REVALIDATION = 'cache_control.revalidation'\n\n// ============================================================================\n// Durable Object Storage (KV API) Attributes\n// ============================================================================\n\n// Query attributes\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS = 'cloudflare.durable_object.kv.query.keys'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT = 'cloudflare.durable_object.kv.query.keys.count'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_START = 'cloudflare.durable_object.kv.query.start'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_START_AFTER = 'cloudflare.durable_object.kv.query.startAfter'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_END = 'cloudflare.durable_object.kv.query.end'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_PREFIX = 'cloudflare.durable_object.kv.query.prefix'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_REVERSE = 'cloudflare.durable_object.kv.query.reverse'\nexport const ATTR_CLOUDFLARE_DO_KV_QUERY_LIMIT = 'cloudflare.durable_object.kv.query.limit'\n\n// Response attributes\nexport const ATTR_CLOUDFLARE_DO_KV_RESPONSE_DELETED_COUNT = 'cloudflare.durable_object.kv.response.deleted_count'\n\n// Custom attributes (not in CF spec but useful)\nexport const ATTR_CLOUDFLARE_DO_ALLOW_CONCURRENCY = 'cloudflare.durable_object.allow_concurrency'\nexport const ATTR_CLOUDFLARE_DO_ALLOW_UNCONFIRMED = 'cloudflare.durable_object.allow_unconfirmed'\nexport const ATTR_CLOUDFLARE_DO_NO_CACHE = 'cloudflare.durable_object.no_cache'\n\n// ============================================================================\n// Durable Object SQL Storage Attributes (for future implementation)\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_DO_SQL_QUERY_BINDINGS = 'cloudflare.durable_object.query.bindings'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_READ = 'cloudflare.durable_object.response.rows_read'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_WRITTEN = 'cloudflare.durable_object.response.rows_written'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_DB_SIZE = 'cloudflare.durable_object.response.db_size'\nexport const ATTR_CLOUDFLARE_DO_SQL_RESPONSE_STATEMENT_COUNT = 'cloudflare.durable_object.response.statement_count'\n\n// ============================================================================\n// Images Binding Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_IMAGES_KEY = 'cloudflare.images.key'\nexport const ATTR_CLOUDFLARE_IMAGES_VARIANT = 'cloudflare.images.variant'\nexport const ATTR_CLOUDFLARE_IMAGES_VARIANTS_COUNT = 'cloudflare.images.variants.count'\nexport const ATTR_CLOUDFLARE_IMAGES_UPLOADED = 'cloudflare.images.uploaded'\nexport const ATTR_CLOUDFLARE_IMAGES_RESPONSE_ID = 'cloudflare.images.response.id'\nexport const ATTR_CLOUDFLARE_IMAGES_RESPONSE_FILENAME = 'cloudflare.images.response.filename'\nexport const ATTR_CLOUDFLARE_IMAGES_METADATA_KEYS = 'cloudflare.images.metadata.keys'\nexport const ATTR_CLOUDFLARE_IMAGES_REQUIRE_SIGNED_URLS = 'cloudflare.images.require_signed_urls'\n\n// ============================================================================\n// Rate Limiting Binding Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_RATE_LIMIT_KEY = 'cloudflare.rate_limit.key'\nexport const ATTR_CLOUDFLARE_RATE_LIMIT_ALLOWED = 'cloudflare.rate_limit.allowed'\nexport const ATTR_CLOUDFLARE_RATE_LIMIT_SUCCESS = 'cloudflare.rate_limit.success'\n\n// ============================================================================\n// RPC Attributes\n// ============================================================================\n\nexport const ATTR_CLOUDFLARE_JSRPC_METHOD = 'cloudflare.jsrpc.method'\nexport const ATTR_RPC_SYSTEM = 'rpc.system'\nexport const ATTR_RPC_SERVICE = 'rpc.service'\nexport const ATTR_RPC_METHOD = 'rpc.method'\n\n// ============================================================================\n// OTLP Exporter Constants (shared by traces and logs)\n// ============================================================================\n\nexport const DEFAULT_OTLP_HEADERS: Record<string, string> = {\n\taccept: 'application/json',\n\t'content-type': 'application/json',\n\t'user-agent': `Cloudflare Worker ${PACKAGE_NAME} v${PACKAGE_VERSION}`,\n}\n\nexport const DEFAULT_TRACE_ENDPOINT = '/v1/traces'\nexport const DEFAULT_LOGS_ENDPOINT = '/v1/logs'\n\n// ============================================================================\n// Log Severity Levels (OpenTelemetry standard)\n// ============================================================================\n\nexport const SEVERITY_NUMBERS = {\n\tTRACE: 1,\n\tTRACE2: 2,\n\tTRACE3: 3,\n\tTRACE4: 4,\n\tDEBUG: 5,\n\tDEBUG2: 6,\n\tDEBUG3: 7,\n\tDEBUG4: 8,\n\tINFO: 9,\n\tINFO2: 10,\n\tINFO3: 11,\n\tINFO4: 12,\n\tWARN: 13,\n\tWARN2: 14,\n\tWARN3: 15,\n\tWARN4: 16,\n\tERROR: 17,\n\tERROR2: 18,\n\tERROR3: 19,\n\tERROR4: 20,\n\tFATAL: 21,\n\tFATAL2: 22,\n\tFATAL3: 23,\n\tFATAL4: 24,\n} as const\n\nexport type SeverityNumber = (typeof SEVERITY_NUMBERS)[keyof typeof SEVERITY_NUMBERS]\n","import { ExportResult, ExportResultCode } from '@opentelemetry/core'\nimport { OTLPExporterError } from '@opentelemetry/otlp-exporter-base'\nimport { JsonTraceSerializer } from '@opentelemetry/otlp-transformer'\nimport { SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { unwrap } from './wrap'\nimport { DEFAULT_OTLP_HEADERS } from './constants'\n\nexport interface OTLPExporterConfig {\n\turl: string\n\theaders?: Record<string, string>\n}\n\nexport class OTLPExporter implements SpanExporter {\n\tprivate headers: Record<string, string>\n\tprivate url: string\n\tconstructor(config: OTLPExporterConfig) {\n\t\tthis.url = config.url\n\t\tthis.headers = Object.assign({}, DEFAULT_OTLP_HEADERS, config.headers)\n\t}\n\n\texport(items: any[], resultCallback: (result: ExportResult) => void): void {\n\t\tthis._export(items)\n\t\t\t.then(() => {\n\t\t\t\tresultCallback({ code: ExportResultCode.SUCCESS })\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tresultCallback({ code: ExportResultCode.FAILED, error })\n\t\t\t})\n\t}\n\n\tprivate _export(items: any[]): Promise<unknown> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tthis.send(items, resolve, reject)\n\t\t\t} catch (e) {\n\t\t\t\treject(e)\n\t\t\t}\n\t\t})\n\t}\n\n\tsend(items: any[], onSuccess: () => void, onError: (error: OTLPExporterError) => void): void {\n\t\tconst decoder = new TextDecoder()\n\t\tconst exportMessage = JsonTraceSerializer.serializeRequest(items)\n\n\t\tconst body = decoder.decode(exportMessage)\n\t\tconst params: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.headers,\n\t\t\tbody,\n\t\t}\n\n\t\tunwrap(fetch)(this.url, params)\n\t\t\t.then((response) => {\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tonSuccess()\n\t\t\t\t} else {\n\t\t\t\t\tonError(new OTLPExporterError(`Exporter received a statusCode: ${response.status}`))\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tonError(new OTLPExporterError(`Exception during export: ${error.toString()}`, error.code, error.stack))\n\t\t\t})\n\t}\n\n\tasync shutdown(): Promise<void> {}\n}\n","import { Context, Span } from '@opentelemetry/api'\nimport { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { ExportResultCode } from '@opentelemetry/core'\nimport { getActiveConfig } from './config'\nimport { TraceFlushableSpanProcessor } from './types'\nimport { TailSampleFn } from './sampling'\n\nfunction getSampler(): TailSampleFn {\n\tconst conf = getActiveConfig()\n\tif (!conf) {\n\t\tconsole.log('Could not find config for sampling, sending everything by default')\n\t}\n\treturn conf ? conf.sampling.tailSampler : () => true\n}\n\nclass TraceState {\n\tprivate unexportedSpans: ReadableSpan[] = []\n\tprivate inprogressSpans = new Set<string>()\n\tprivate exporter: SpanExporter\n\tprivate exportPromises: Promise<void>[] = []\n\tprivate localRootSpan?: ReadableSpan\n\tprivate traceDecision?: boolean\n\n\tconstructor(exporter: SpanExporter) {\n\t\tthis.exporter = exporter\n\t}\n\n\taddSpan(span: Span): void {\n\t\tconst readableSpan = span as unknown as ReadableSpan\n\t\tthis.localRootSpan = this.localRootSpan || readableSpan\n\t\tthis.unexportedSpans.push(readableSpan)\n\t\tthis.inprogressSpans.add(span.spanContext().spanId)\n\t}\n\n\tendSpan(span: ReadableSpan): void {\n\t\tthis.inprogressSpans.delete(span.spanContext().spanId)\n\t\tif (this.inprogressSpans.size === 0) {\n\t\t\tthis.flush()\n\t\t}\n\t}\n\n\tsample() {\n\t\tif (this.traceDecision === undefined && this.unexportedSpans.length > 0) {\n\t\t\tconst sampler = getSampler()\n\t\t\tthis.traceDecision = sampler({\n\t\t\t\ttraceId: this.localRootSpan!.spanContext().traceId,\n\t\t\t\tlocalRootSpan: this.localRootSpan!,\n\t\t\t\tspans: this.unexportedSpans,\n\t\t\t})\n\t\t}\n\t\tthis.unexportedSpans = this.traceDecision ? this.unexportedSpans : []\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.unexportedSpans.length > 0) {\n\t\t\tconst unfinishedSpans = this.unexportedSpans.filter((span) => this.isSpanInProgress(span)) as unknown as Span[]\n\t\t\tfor (const span of unfinishedSpans) {\n\t\t\t\tconsole.log(`Span ${span.spanContext().spanId} was not ended properly`)\n\t\t\t\tspan.end()\n\t\t\t}\n\t\t\tthis.sample()\n\t\t\tthis.exportPromises.push(this.exportSpans(this.unexportedSpans))\n\t\t\tthis.unexportedSpans = []\n\t\t}\n\t\tif (this.exportPromises.length > 0) {\n\t\t\tawait Promise.allSettled(this.exportPromises)\n\t\t}\n\t}\n\n\tprivate isSpanInProgress(span: ReadableSpan) {\n\t\treturn this.inprogressSpans.has(span.spanContext().spanId)\n\t}\n\n\tprivate async exportSpans(spans: ReadableSpan[]): Promise<void> {\n\t\tawait scheduler.wait(1)\n\t\tconst promise = new Promise<void>((resolve, reject) => {\n\t\t\tthis.exporter.export(spans, (result) => {\n\t\t\t\tif (result.code === ExportResultCode.SUCCESS) {\n\t\t\t\t\tresolve()\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('exporting spans failed! ' + result.error)\n\t\t\t\t\treject(result.error)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t\tawait promise\n\t}\n}\n\ntype traceId = string\nexport class BatchTraceSpanProcessor implements TraceFlushableSpanProcessor {\n\tprivate traces: Record<traceId, TraceState> = {}\n\n\tconstructor(private exporter: SpanExporter) {}\n\n\tgetTraceState(traceId: string): TraceState {\n\t\tconst traceState = this.traces[traceId] || new TraceState(this.exporter)\n\t\tthis.traces[traceId] = traceState\n\t\treturn traceState\n\t}\n\n\tonStart(span: Span, _parentContext: Context): void {\n\t\tconst traceId = span.spanContext().traceId\n\t\tthis.getTraceState(traceId).addSpan(span)\n\t}\n\n\tonEnd(span: ReadableSpan): void {\n\t\tconst traceId = span.spanContext().traceId\n\t\tthis.getTraceState(traceId).endSpan(span)\n\t}\n\n\tasync forceFlush(traceId?: traceId): Promise<void> {\n\t\tif (traceId) {\n\t\t\tawait this.getTraceState(traceId).flush()\n\t\t} else {\n\t\t\tconst promises = Object.values(this.traces).map((traceState: TraceState) => traceState.flush)\n\t\t\tawait Promise.allSettled(promises)\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.forceFlush()\n\t}\n}\n","import { Context } from '@opentelemetry/api'\nimport { ExportResultCode } from '@opentelemetry/core'\nimport { LogRecordProcessor, LogTransport, ReadableLogRecord, BatchConfig } from './types'\n\n/**\n * Immediate Log Record Processor\n * Exports each log record immediately without batching\n */\nexport class ImmediateLogRecordProcessor implements LogRecordProcessor {\n\tprivate transport: LogTransport\n\tprivate exportPromises: Promise<void>[] = []\n\n\tconstructor(transport: LogTransport) {\n\t\tthis.transport = transport\n\t}\n\n\tonEmit(logRecord: ReadableLogRecord, _context: Context): void {\n\t\tthis.exportPromises.push(this.exportLog(logRecord))\n\t}\n\n\tprivate async exportLog(logRecord: ReadableLogRecord): Promise<void> {\n\t\tawait scheduler.wait(1)\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.transport.export([logRecord], (result) => {\n\t\t\t\tif (result.code === ExportResultCode.SUCCESS) {\n\t\t\t\t\tresolve()\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to export log:', result.error)\n\t\t\t\t\treject(result.error)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tif (this.exportPromises.length > 0) {\n\t\t\tawait Promise.allSettled(this.exportPromises)\n\t\t\tthis.exportPromises = []\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.forceFlush()\n\t\tawait this.transport.shutdown()\n\t}\n}\n\n/**\n * Batch Size Log Record Processor\n * Batches log records up to a maximum queue size before exporting\n */\nexport class BatchSizeLogRecordProcessor implements LogRecordProcessor {\n\tprivate transport: LogTransport\n\tprivate logRecords: ReadableLogRecord[] = []\n\tprivate exportPromises: Promise<void>[] = []\n\tprivate maxQueueSize: number\n\tprivate maxExportBatchSize: number\n\n\tconstructor(transport: LogTransport, config?: BatchConfig) {\n\t\tthis.transport = transport\n\t\tthis.maxQueueSize = config?.maxQueueSize ?? 512\n\t\tthis.maxExportBatchSize = config?.maxExportBatchSize ?? this.maxQueueSize\n\t}\n\n\tonEmit(logRecord: ReadableLogRecord, _context: Context): void {\n\t\tthis.logRecords.push(logRecord)\n\n\t\t// Auto-flush if queue is full\n\t\tif (this.logRecords.length >= this.maxQueueSize) {\n\t\t\tthis.exportPromises.push(this.export())\n\t\t}\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tif (this.logRecords.length > 0) {\n\t\t\tthis.exportPromises.push(this.export())\n\t\t}\n\n\t\tif (this.exportPromises.length > 0) {\n\t\t\tawait Promise.allSettled(this.exportPromises)\n\t\t\tthis.exportPromises = []\n\t\t}\n\t}\n\n\tprivate async export(): Promise<void> {\n\t\t// Take up to maxExportBatchSize records\n\t\tconst batch = this.logRecords.splice(0, this.maxExportBatchSize)\n\n\t\tif (batch.length === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tawait scheduler.wait(1)\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.transport.export(batch, (result) => {\n\t\t\t\tif (result.code === ExportResultCode.SUCCESS) {\n\t\t\t\t\tresolve()\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to export logs:', result.error)\n\t\t\t\t\treject(result.error)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait this.forceFlush()\n\t\tawait this.transport.shutdown()\n\t}\n}\n\n/**\n * Multi-Transport Log Record Processor\n * Sends log records to multiple transports in parallel\n */\nexport class MultiTransportLogRecordProcessor implements LogRecordProcessor {\n\tprivate processors: LogRecordProcessor[]\n\n\tconstructor(transports: LogTransport[], config?: BatchConfig) {\n\t\t// Create a processor for each transport\n\t\tthis.processors = transports.map((transport) => {\n\t\t\treturn createLogProcessor(transport, config)\n\t\t})\n\t}\n\n\tonEmit(logRecord: ReadableLogRecord, context: Context): void {\n\t\t// Send to all processors\n\t\tthis.processors.forEach((p) => p.onEmit(logRecord, context))\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tawait Promise.allSettled(this.processors.map((p) => p.forceFlush()))\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait Promise.allSettled(this.processors.map((p) => p.shutdown()))\n\t}\n}\n\n/**\n * Factory function to create a log processor based on strategy\n */\nexport function createLogProcessor(transport: LogTransport, config?: BatchConfig): LogRecordProcessor {\n\tconst strategy = config?.strategy ?? 'size'\n\n\tswitch (strategy) {\n\t\tcase 'immediate':\n\t\t\treturn new ImmediateLogRecordProcessor(transport)\n\t\tcase 'size':\n\t\t\treturn new BatchSizeLogRecordProcessor(transport, config)\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown batch strategy: ${strategy}`)\n\t}\n}\n","import { context } from '@opentelemetry/api'\nimport {\n\tExporterConfig,\n\tisSpanProcessorConfig,\n\tParentRatioSamplingConfig,\n\tResolvedTraceConfig,\n\tTraceConfig,\n\tTrigger,\n\tWorkerOtelConfig,\n\tResolvedLogsConfig,\n\tLogsConfig,\n} from './types'\nimport { ReadableSpan, Sampler, SpanExporter } from '@opentelemetry/sdk-trace-base'\n\nimport { OTLPExporter } from './exporter'\nimport { multiTailSampler, isHeadSampled, isRootErrorSpan, createSampler } from './sampling'\nimport { BatchTraceSpanProcessor } from './spanprocessor'\nimport { MultiTransportLogRecordProcessor } from './logs/logprocessor'\n\nconst traceConfigSymbol = Symbol('Otel Workers Tracing Configuration')\nconst logsConfigSymbol = Symbol('Otel Workers Logs Configuration')\n\nexport interface ResolvedConfig {\n\ttrace?: ResolvedTraceConfig\n\tlogs?: ResolvedLogsConfig\n}\n\nexport type Initialiser = (env: Record<string, unknown>, trigger: Trigger) => ResolvedConfig\n\nexport function setConfig(config: ResolvedConfig, ctx = context.active()) {\n\tlet newCtx = ctx\n\tif (config.trace) {\n\t\tnewCtx = newCtx.setValue(traceConfigSymbol, config.trace)\n\t}\n\tif (config.logs) {\n\t\tnewCtx = newCtx.setValue(logsConfigSymbol, config.logs)\n\t}\n\treturn newCtx\n}\n\nexport function getActiveConfig(): ResolvedTraceConfig | undefined {\n\tconst config = context.active().getValue(traceConfigSymbol) as ResolvedTraceConfig\n\treturn config || undefined\n}\n\nexport function getActiveLogsConfig(): ResolvedLogsConfig | undefined {\n\tconst config = context.active().getValue(logsConfigSymbol) as ResolvedLogsConfig\n\treturn config || undefined\n}\n\nfunction isSpanExporter(exporterConfig: ExporterConfig): exporterConfig is SpanExporter {\n\treturn !!(exporterConfig as SpanExporter).export\n}\n\nfunction isSampler(sampler: Sampler | ParentRatioSamplingConfig): sampler is Sampler {\n\treturn !!(sampler as Sampler).shouldSample\n}\n\nexport function parseConfig(supplied: WorkerOtelConfig): ResolvedConfig {\n\tconst config: ResolvedConfig = {}\n\n\t// Parse trace config if provided\n\tif (supplied.trace) {\n\t\tconfig.trace = parseTraceConfig(supplied.trace, supplied.propagator)\n\t}\n\n\t// Parse logs config if provided\n\tif (supplied.logs) {\n\t\tconfig.logs = parseLogsConfig(supplied.logs)\n\t}\n\n\treturn config\n}\n\nfunction parseTraceConfig(supplied: TraceConfig, propagator?: any): ResolvedTraceConfig {\n\tif (isSpanProcessorConfig(supplied)) {\n\t\tconst headSampleConf = supplied.sampling?.headSampler || { ratio: 1 }\n\t\tconst headSampler = isSampler(headSampleConf) ? headSampleConf : createSampler(headSampleConf)\n\t\tconst spanProcessors = Array.isArray(supplied.spanProcessors) ? supplied.spanProcessors : [supplied.spanProcessors]\n\t\tif (spanProcessors.length === 0) {\n\t\t\tconsole.log(\n\t\t\t\t'Warning! You must either specify an exporter or your own SpanProcessor(s)/Exporter combination in the open-telemetry configuration.',\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\tfetch: {\n\t\t\t\tincludeTraceContext: supplied.fetch?.includeTraceContext ?? true,\n\t\t\t},\n\t\t\thandlers: {\n\t\t\t\tfetch: {\n\t\t\t\t\tacceptTraceContext: supplied.handlers?.fetch?.acceptTraceContext ?? true,\n\t\t\t\t},\n\t\t\t},\n\t\t\tpostProcessor: supplied.postProcessor || ((spans: ReadableSpan[]) => spans),\n\t\t\tsampling: {\n\t\t\t\theadSampler,\n\t\t\t\ttailSampler: supplied.sampling?.tailSampler || multiTailSampler([isHeadSampled, isRootErrorSpan]),\n\t\t\t},\n\t\t\tspanProcessors,\n\t\t\tinstrumentation: {\n\t\t\t\tinstrumentGlobalCache: supplied.instrumentation?.instrumentGlobalCache ?? true,\n\t\t\t\tinstrumentGlobalFetch: supplied.instrumentation?.instrumentGlobalFetch ?? true,\n\t\t\t},\n\t\t\tbatching: {\n\t\t\t\tstrategy: supplied.batching?.strategy ?? 'trace',\n\t\t\t\tmaxQueueSize: supplied.batching?.maxQueueSize,\n\t\t\t\tmaxExportBatchSize: supplied.batching?.maxExportBatchSize,\n\t\t\t},\n\t\t}\n\t} else {\n\t\tconst exporter = isSpanExporter(supplied.exporter) ? supplied.exporter : new OTLPExporter(supplied.exporter)\n\t\tconst spanProcessors = [new BatchTraceSpanProcessor(exporter)]\n\t\tconst newConfig = Object.assign({}, supplied, { exporter: undefined, spanProcessors }) as TraceConfig\n\t\treturn parseTraceConfig(newConfig, propagator)\n\t}\n}\n\nfunction parseLogsConfig(supplied: LogsConfig): ResolvedLogsConfig {\n\tconst processors =\n\t\tsupplied.transports && supplied.transports.length > 0\n\t\t\t? [new MultiTransportLogRecordProcessor(supplied.transports, supplied.batching)]\n\t\t\t: []\n\n\treturn {\n\t\tprocessors,\n\t\tinstrumentation: {\n\t\t\tinstrumentConsole: supplied.instrumentation?.instrumentConsole ?? false,\n\t\t},\n\t}\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContextManager, Context, ROOT_CONTEXT } from '@opentelemetry/api'\n//@ts-ignore\nimport { AsyncLocalStorage } from 'node:async_hooks'\n//@ts-ignore\nimport { EventEmitter } from 'node:events'\n\ntype Func<T> = (...args: unknown[]) => T\n\n/**\n * Store a map for each event of all original listeners and their \"patched\"\n * version. So when a listener is removed by the user, the corresponding\n * patched function will be also removed.\n */\ninterface PatchMap {\n\t[name: string]: WeakMap<Func<void>, Func<void>>\n}\n\nconst ADD_LISTENER_METHODS = [\n\t'addListener' as const,\n\t'on' as const,\n\t'once' as const,\n\t'prependListener' as const,\n\t'prependOnceListener' as const,\n]\n\nabstract class AbstractAsyncHooksContextManager implements ContextManager {\n\tabstract active(): Context\n\n\tabstract with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n\t\tcontext: Context,\n\t\tfn: F,\n\t\tthisArg?: ThisParameterType<F>,\n\t\t...args: A\n\t): ReturnType<F>\n\n\tabstract enable(): this\n\n\tabstract disable(): this\n\n\t/**\n\t * Binds a the certain context or the active one to the target function and then returns the target\n\t * @param context A context (span) to be bind to target\n\t * @param target a function or event emitter. When target or one of its callbacks is called,\n\t * the provided context will be used as the active context for the duration of the call.\n\t */\n\tbind<T>(context: Context, target: T): T {\n\t\tif (target instanceof EventEmitter) {\n\t\t\treturn this._bindEventEmitter(context, target)\n\t\t}\n\n\t\tif (typeof target === 'function') {\n\t\t\treturn this._bindFunction(context, target)\n\t\t}\n\t\treturn target\n\t}\n\n\tprivate _bindFunction<T extends Function>(context: Context, target: T): T {\n\t\tconst manager = this\n\t\tconst contextWrapper = function (this: never, ...args: unknown[]) {\n\t\t\treturn manager.with(context, () => target.apply(this, args))\n\t\t}\n\t\tObject.defineProperty(contextWrapper, 'length', {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\twritable: false,\n\t\t\tvalue: target.length,\n\t\t})\n\t\t/**\n\t\t * It isn't possible to tell Typescript that contextWrapper is the same as T\n\t\t * so we forced to cast as any here.\n\t\t */\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\treturn contextWrapper as any\n\t}\n\n\t/**\n\t * By default, EventEmitter call their callback with their context, which we do\n\t * not want, instead we will bind a specific context to all callbacks that\n\t * go through it.\n\t * @param context the context we want to bind\n\t * @param ee EventEmitter an instance of EventEmitter to patch\n\t */\n\tprivate _bindEventEmitter<T extends EventEmitter>(context: Context, ee: T): T {\n\t\tconst map = this._getPatchMap(ee)\n\t\tif (map !== undefined) return ee\n\t\tthis._createPatchMap(ee)\n\n\t\t// patch methods that add a listener to propagate context\n\t\tADD_LISTENER_METHODS.forEach((methodName) => {\n\t\t\tif (ee[methodName] === undefined) return\n\t\t\tee[methodName] = this._patchAddListener(ee, ee[methodName], context)\n\t\t})\n\t\t// patch methods that remove a listener\n\t\tif (typeof ee.removeListener === 'function') {\n\t\t\tee.removeListener = this._patchRemoveListener(ee, ee.removeListener)\n\t\t}\n\t\tif (typeof ee.off === 'function') {\n\t\t\tee.off = this._patchRemoveListener(ee, ee.off)\n\t\t}\n\t\t// patch method that remove all listeners\n\t\tif (typeof ee.removeAllListeners === 'function') {\n\t\t\tee.removeAllListeners = this._patchRemoveAllListeners(ee, ee.removeAllListeners)\n\t\t}\n\t\treturn ee\n\t}\n\n\t/**\n\t * Patch methods that remove a given listener so that we match the \"patched\"\n\t * version of that listener (the one that propagate context).\n\t * @param ee EventEmitter instance\n\t * @param original reference to the patched method\n\t */\n\tprivate _patchRemoveListener(ee: EventEmitter, original: Function) {\n\t\tconst contextManager = this\n\t\treturn function (this: never, event: string, listener: Func<void>) {\n\t\t\tconst events = contextManager._getPatchMap(ee)?.[event]\n\t\t\tif (events === undefined) {\n\t\t\t\treturn original.call(this, event, listener)\n\t\t\t}\n\t\t\tconst patchedListener = events.get(listener)\n\t\t\treturn original.call(this, event, patchedListener || listener)\n\t\t}\n\t}\n\n\t/**\n\t * Patch methods that remove all listeners so we remove our\n\t * internal references for a given event.\n\t * @param ee EventEmitter instance\n\t * @param original reference to the patched method\n\t */\n\tprivate _patchRemoveAllListeners(ee: EventEmitter, original: Function) {\n\t\tconst contextManager = this\n\t\treturn function (this: never, event: string) {\n\t\t\tconst map = contextManager._getPatchMap(ee)\n\t\t\tif (map !== undefined) {\n\t\t\t\tif (arguments.length === 0) {\n\t\t\t\t\tcontextManager._createPatchMap(ee)\n\t\t\t\t} else if (map[event] !== undefined) {\n\t\t\t\t\tdelete map[event]\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn original.apply(this, arguments)\n\t\t}\n\t}\n\n\t/**\n\t * Patch methods on an event emitter instance that can add listeners so we\n\t * can force them to propagate a given context.\n\t * @param ee EventEmitter instance\n\t * @param original reference to the patched method\n\t * @param [context] context to propagate when calling listeners\n\t */\n\tprivate _patchAddListener(ee: EventEmitter, original: Function, context: Context) {\n\t\tconst contextManager = this\n\t\treturn function (this: never, event: string, listener: Func<void>) {\n\t\t\t/**\n\t\t\t * This check is required to prevent double-wrapping the listener.\n\t\t\t * The implementation for ee.once wraps the listener and calls ee.on.\n\t\t\t * Without this check, we would wrap that wrapped listener.\n\t\t\t * This causes an issue because ee.removeListener depends on the onceWrapper\n\t\t\t * to properly remove the listener. If we wrap their wrapper, we break\n\t\t\t * that detection.\n\t\t\t */\n\t\t\tif (contextManager._wrapped) {\n\t\t\t\treturn original.call(this, event, listener)\n\t\t\t}\n\t\t\tlet map = contextManager._getPatchMap(ee)\n\t\t\tif (map === undefined) {\n\t\t\t\tmap = contextManager._createPatchMap(ee)\n\t\t\t}\n\t\t\tlet listeners = map[event]\n\t\t\tif (listeners === undefined) {\n\t\t\t\tlisteners = new WeakMap()\n\t\t\t\tmap[event] = listeners\n\t\t\t}\n\t\t\tconst patchedListener = contextManager.bind(context, listener)\n\t\t\t// store a weak reference of the user listener to ours\n\t\t\tlisteners.set(listener, patchedListener)\n\n\t\t\t/**\n\t\t\t * See comment at the start of this function for the explanation of this property.\n\t\t\t */\n\t\t\tcontextManager._wrapped = true\n\t\t\ttry {\n\t\t\t\treturn original.call(this, event, patchedListener)\n\t\t\t} finally {\n\t\t\t\tcontextManager._wrapped = false\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _createPatchMap(ee: EventEmitter): PatchMap {\n\t\tconst map = Object.create(null)\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t;(ee as any)[this._kOtListeners] = map\n\t\treturn map\n\t}\n\tprivate _getPatchMap(ee: EventEmitter): PatchMap | undefined {\n\t\treturn (ee as never)[this._kOtListeners]\n\t}\n\n\tprivate readonly _kOtListeners = Symbol('OtListeners')\n\tprivate _wrapped = false\n}\n\nexport class AsyncLocalStorageContextManager extends AbstractAsyncHooksContextManager {\n\tprivate _asyncLocalStorage: AsyncLocalStorage<Context>\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis._asyncLocalStorage = new AsyncLocalStorage()\n\t}\n\n\tactive(): Context {\n\t\treturn this._asyncLocalStorage.getStore() ?? ROOT_CONTEXT\n\t}\n\n\twith<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n\t\tcontext: Context,\n\t\tfn: F,\n\t\tthisArg?: ThisParameterType<F>,\n\t\t...args: A\n\t): ReturnType<F> {\n\t\tconst cb = thisArg == null ? fn : fn.bind(thisArg)\n\t\treturn this._asyncLocalStorage.run(context, cb as never, ...args)\n\t}\n\n\tenable(): this {\n\t\treturn this\n\t}\n\n\tdisable(): this {\n\t\tthis._asyncLocalStorage.disable()\n\t\treturn this\n\t}\n}\n","import {\n\tAttributes,\n\tAttributeValue,\n\tException,\n\tHrTime,\n\tLink,\n\tSpan,\n\tSpanContext,\n\tSpanKind,\n\tSpanStatus,\n\tSpanStatusCode,\n\tTimeInput,\n} from '@opentelemetry/api'\nimport {\n\thrTimeDuration,\n\tInstrumentationScope,\n\tisAttributeValue,\n\tisTimeInput,\n\tsanitizeAttributes,\n} from '@opentelemetry/core'\nimport { Resource } from '@opentelemetry/resources'\nimport { ReadableSpan, TimedEvent } from '@opentelemetry/sdk-trace-base'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\n\ntype OnSpanEnd = (span: Span) => void\n\ninterface SpanInit {\n\tattributes: unknown\n\tname: string\n\tonEnd: OnSpanEnd\n\tresource: Resource\n\tspanContext: SpanContext\n\tparentSpanContext?: SpanContext\n\tlinks?: Link[]\n\tparentSpanId?: string\n\tspanKind?: SpanKind\n\tstartTime?: TimeInput\n}\n\nfunction transformExceptionAttributes(exception: Exception): Attributes {\n\tconst attributes: Attributes = {}\n\tif (typeof exception === 'string') {\n\t\tattributes[SemanticAttributes.EXCEPTION_MESSAGE] = exception\n\t} else {\n\t\tif (exception.code) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_TYPE] = exception.code.toString()\n\t\t} else if (exception.name) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_TYPE] = exception.name\n\t\t}\n\t\tif (exception.message) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_MESSAGE] = exception.message\n\t\t}\n\t\tif (exception.stack) {\n\t\t\tattributes[SemanticAttributes.EXCEPTION_STACKTRACE] = exception.stack\n\t\t}\n\t}\n\treturn attributes\n}\n\nfunction millisToHr(millis: number): HrTime {\n\treturn [Math.trunc(millis / 1000), (millis % 1000) * 1e6]\n}\n\nfunction getHrTime(input?: TimeInput): HrTime {\n\tconst now = Date.now()\n\tif (!input) {\n\t\treturn millisToHr(now)\n\t} else if (input instanceof Date) {\n\t\treturn millisToHr(input.getTime())\n\t} else if (typeof input === 'number') {\n\t\t//TODO: do something with performance.now something\n\t\treturn millisToHr(input)\n\t} else if (Array.isArray(input)) {\n\t\treturn input\n\t}\n\n\tconst v: never = input\n\tthrow new Error(`unreachable value: ${JSON.stringify(v)}`)\n}\n\n// previously exported from OTel, now private\nfunction isAttributeKey(key: unknown): key is string {\n\treturn typeof key === 'string' && key.length > 0\n}\n\nexport class SpanImpl implements Span, ReadableSpan {\n\tname: string\n\tprivate readonly _spanContext: SpanContext\n\tprivate readonly onEnd: OnSpanEnd\n\treadonly parentSpanId?: string\n\treadonly parentSpanContext?: SpanContext | undefined\n\treadonly kind: SpanKind\n\treadonly attributes: Attributes\n\tstatus: SpanStatus = {\n\t\tcode: SpanStatusCode.UNSET,\n\t}\n\tendTime: HrTime = [0, 0]\n\tprivate _duration: HrTime = [0, 0]\n\treadonly startTime: HrTime\n\treadonly events: TimedEvent[] = []\n\treadonly links: Link[]\n\treadonly resource: Resource\n\tinstrumentationScope: InstrumentationScope = { name: '@inference-net/otel-cf-workers' }\n\tprivate _ended: boolean = false\n\tprivate _droppedAttributesCount: number = 0\n\tprivate _droppedEventsCount: number = 0\n\tprivate _droppedLinksCount: number = 0\n\n\tconstructor(init: SpanInit) {\n\t\tthis.name = init.name\n\t\tthis._spanContext = init.spanContext\n\t\tthis.parentSpanId = init.parentSpanId\n\t\tthis.parentSpanContext = init.parentSpanContext\n\t\tthis.kind = init.spanKind || SpanKind.INTERNAL\n\t\tthis.attributes = sanitizeAttributes(init.attributes)\n\t\tthis.startTime = getHrTime(init.startTime)\n\t\tthis.links = init.links || []\n\t\tthis.resource = init.resource\n\t\tthis.onEnd = init.onEnd\n\t}\n\n\taddLink(link: Link): this {\n\t\tthis.links.push(link)\n\t\treturn this\n\t}\n\taddLinks(links: Link[]): this {\n\t\tthis.links.push(...links)\n\t\treturn this\n\t}\n\n\tspanContext(): SpanContext {\n\t\treturn this._spanContext\n\t}\n\n\tsetAttribute(key: string, value?: AttributeValue): this {\n\t\tif (isAttributeKey(key) && isAttributeValue(value)) {\n\t\t\tthis.attributes[key] = value\n\t\t}\n\t\treturn this\n\t}\n\n\tsetAttributes(attributes: Attributes): this {\n\t\tfor (const [key, value] of Object.entries(attributes)) {\n\t\t\tthis.setAttribute(key, value)\n\t\t}\n\t\treturn this\n\t}\n\n\taddEvent(name: string, attributesOrStartTime?: Attributes | TimeInput, startTime?: TimeInput): this {\n\t\tif (isTimeInput(attributesOrStartTime)) {\n\t\t\tstartTime = attributesOrStartTime\n\t\t\tattributesOrStartTime = undefined\n\t\t}\n\n\t\tconst attributes = sanitizeAttributes(attributesOrStartTime)\n\t\tconst time = getHrTime(startTime)\n\t\tthis.events.push({ name, attributes, time })\n\t\treturn this\n\t}\n\n\tsetStatus(status: SpanStatus): this {\n\t\tthis.status = status\n\t\treturn this\n\t}\n\n\tupdateName(name: string): this {\n\t\tthis.name = name\n\t\treturn this\n\t}\n\n\tend(endTime?: TimeInput): void {\n\t\tif (this._ended) {\n\t\t\treturn\n\t\t}\n\t\tthis._ended = true\n\t\tthis.endTime = getHrTime(endTime)\n\t\tthis._duration = hrTimeDuration(this.startTime, this.endTime)\n\t\tthis.onEnd(this)\n\t}\n\n\tisRecording(): boolean {\n\t\treturn !this._ended\n\t}\n\n\trecordException(exception: Exception, time?: TimeInput): void {\n\t\tconst attributes = transformExceptionAttributes(exception)\n\t\tthis.addEvent('exception', attributes, time)\n\t}\n\n\tget duration(): HrTime {\n\t\treturn this._duration\n\t}\n\n\tget ended(): boolean {\n\t\treturn this._ended\n\t}\n\n\tget droppedAttributesCount(): number {\n\t\treturn this._droppedAttributesCount\n\t}\n\n\tget droppedEventsCount(): number {\n\t\treturn this._droppedEventsCount\n\t}\n\n\tget droppedLinksCount(): number {\n\t\treturn this._droppedLinksCount\n\t}\n}\n","import {\n\tAttributes,\n\tTracer,\n\tTraceFlags,\n\tSpan,\n\tSpanKind,\n\tSpanOptions,\n\tContext,\n\tcontext as api_context,\n\ttrace,\n\tSpanContext,\n} from '@opentelemetry/api'\nimport { sanitizeAttributes } from '@opentelemetry/core'\nimport { Resource } from '@opentelemetry/resources'\nimport { SpanProcessor, RandomIdGenerator, ReadableSpan, SamplingDecision } from '@opentelemetry/sdk-trace-base'\n\nimport { SpanImpl } from './span'\nimport { getActiveConfig } from './config'\nimport { TraceFlushableSpanProcessor } from './types'\n\nenum NewTraceFlags {\n\tRANDOM_TRACE_ID_SET = 2,\n\tRANDOM_TRACE_ID_UNSET = 0,\n}\n\ntype NewTraceFlagValues = NewTraceFlags.RANDOM_TRACE_ID_SET | NewTraceFlags.RANDOM_TRACE_ID_UNSET\n\nconst idGenerator: RandomIdGenerator = new RandomIdGenerator()\n\nlet withNextSpanAttributes: Attributes\n\nfunction getFlagAt(flagSequence: number, position: number): number {\n\treturn ((flagSequence >> (position - 1)) & 1) * position\n}\n\nexport class WorkerTracer implements Tracer {\n\tprivate readonly spanProcessors: TraceFlushableSpanProcessor[]\n\tprivate readonly resource: Resource\n\tconstructor(spanProcessors: SpanProcessor[], resource: Resource) {\n\t\tthis.spanProcessors = spanProcessors\n\t\tthis.resource = resource\n\t}\n\n\tasync forceFlush(traceId?: string) {\n\t\tconst promises = this.spanProcessors.map(async (spanProcessor) => {\n\t\t\tawait spanProcessor.forceFlush(traceId)\n\t\t})\n\t\tawait Promise.allSettled(promises)\n\t}\n\n\taddToResource(extra: Resource) {\n\t\tthis.resource.merge(extra)\n\t}\n\n\tstartSpan(name: string, options: SpanOptions = {}, context = api_context.active()): Span {\n\t\tif (options.root) {\n\t\t\tcontext = trace.deleteSpan(context)\n\t\t}\n\n\t\tconst config = getActiveConfig()\n\t\tif (!config) throw new Error('Config is undefined. This is a bug in the instrumentation logic')\n\n\t\tconst parentSpanContext = trace.getSpan(context)?.spanContext()\n\t\tconst { traceId, randomTraceFlag } = getTraceInfo(parentSpanContext)\n\n\t\tconst spanKind = options.kind || SpanKind.INTERNAL\n\t\tconst sanitisedAttrs = sanitizeAttributes(options.attributes)\n\t\tconst sampler = config.sampling.headSampler\n\t\tconst samplingDecision = sampler.shouldSample(context, traceId, name, spanKind, sanitisedAttrs, [])\n\t\tconst { decision, traceState, attributes: attrs } = samplingDecision\n\n\t\tconst attributes = Object.assign({}, options.attributes, attrs, withNextSpanAttributes)\n\t\twithNextSpanAttributes = {}\n\n\t\tconst spanId = idGenerator.generateSpanId()\n\t\tconst parentSpanId = parentSpanContext?.spanId\n\n\t\tconst sampleFlag = decision === SamplingDecision.RECORD_AND_SAMPLED ? TraceFlags.SAMPLED : TraceFlags.NONE\n\t\tconst traceFlags = sampleFlag + randomTraceFlag\n\t\tconst spanContext = { traceId, spanId, traceFlags, traceState }\n\n\t\tconst span = new SpanImpl({\n\t\t\tattributes: sanitizeAttributes(attributes),\n\t\t\tname,\n\t\t\tonEnd: (span) => {\n\t\t\t\tthis.spanProcessors.forEach((sp) => {\n\t\t\t\t\tsp.onEnd(span as unknown as ReadableSpan)\n\t\t\t\t})\n\t\t\t},\n\t\t\tresource: this.resource,\n\t\t\tspanContext,\n\t\t\tparentSpanContext,\n\t\t\tparentSpanId,\n\t\t\tspanKind,\n\t\t\tstartTime: options.startTime,\n\t\t})\n\t\tthis.spanProcessors.forEach((sp) => {\n\t\t\t//Do not get me started on the idosyncracies of the Otel JS libraries.\n\t\t\t//@ts-ignore\n\t\t\tsp.onStart(span, context)\n\t\t})\n\t\treturn span\n\t}\n\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(name: string, fn: F): ReturnType<F>\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(name: string, options: SpanOptions, fn: F): ReturnType<F>\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(\n\t\tname: string,\n\t\toptions: SpanOptions,\n\t\tcontext: Context,\n\t\tfn: F,\n\t): ReturnType<F>\n\tstartActiveSpan<F extends (span: Span) => ReturnType<F>>(name: string, ...args: unknown[]): ReturnType<F> {\n\t\tconst options = args.length > 1 ? (args[0] as SpanOptions) : undefined\n\t\tconst parentContext = args.length > 2 ? (args[1] as Context) : api_context.active()\n\t\tconst fn = args[args.length - 1] as F\n\n\t\tconst span = this.startSpan(name, options, parentContext)\n\t\tconst contextWithSpanSet = trace.setSpan(parentContext, span)\n\n\t\treturn api_context.with(contextWithSpanSet, fn, undefined, span)\n\t}\n}\n\nexport function withNextSpan(attrs: Attributes) {\n\twithNextSpanAttributes = Object.assign({}, withNextSpanAttributes, attrs)\n}\n\nfunction getTraceInfo(parentSpanContext?: SpanContext): { traceId: string; randomTraceFlag: NewTraceFlagValues } {\n\tif (parentSpanContext && trace.isSpanContextValid(parentSpanContext)) {\n\t\tconst { traceId, traceFlags } = parentSpanContext\n\t\treturn { traceId, randomTraceFlag: getFlagAt(traceFlags, 2) }\n\t} else {\n\t\treturn { traceId: idGenerator.generateTraceId(), randomTraceFlag: NewTraceFlags.RANDOM_TRACE_ID_SET }\n\t}\n}\n","import { context, trace, Tracer, TracerOptions, TracerProvider } from '@opentelemetry/api'\n\nimport { SpanProcessor } from '@opentelemetry/sdk-trace-base'\nimport { Resource } from '@opentelemetry/resources'\n\nimport { AsyncLocalStorageContextManager } from './context'\nimport { WorkerTracer } from './tracer'\n\n/**\n * Register this TracerProvider for use with the OpenTelemetry API.\n * Undefined values may be replaced with defaults, and\n * null values will be skipped.\n *\n * @param config Configuration object for SDK registration\n */\nexport class WorkerTracerProvider implements TracerProvider {\n\tprivate spanProcessors: SpanProcessor[]\n\tprivate resource: Resource\n\tprivate tracers: Record<string, Tracer> = {}\n\n\tconstructor(spanProcessors: SpanProcessor[], resource: Resource) {\n\t\tthis.spanProcessors = spanProcessors\n\t\tthis.resource = resource\n\t}\n\n\tgetTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n\t\tconst key = `${name}@${version || ''}:${options?.schemaUrl || ''}`\n\t\tif (!this.tracers[key]) {\n\t\t\tthis.tracers[key] = new WorkerTracer(this.spanProcessors, this.resource)\n\t\t}\n\t\treturn this.tracers[key]!\n\t}\n\n\tregister(): void {\n\t\ttrace.setGlobalTracerProvider(this)\n\t\tcontext.setGlobalContextManager(new AsyncLocalStorageContextManager())\n\t}\n}\n","import { HrTime, TimeInput, trace } from '@opentelemetry/api'\nimport { InstrumentationScope, sanitizeAttributes } from '@opentelemetry/core'\nimport { Resource } from '@opentelemetry/resources'\nimport { LogAttributes, LogBody, ReadableLogRecord } from './types'\nimport { SeverityNumber } from '../constants'\n\nfunction millisToHr(millis: number): HrTime {\n\treturn [Math.trunc(millis / 1000), (millis % 1000) * 1e6]\n}\n\n/**\n * Extracts Error properties into a flat object with semantic naming.\n * Uses OpenTelemetry semantic conventions for exception attributes.\n */\nfunction flattenError(error: Error, prefix: string): LogAttributes {\n\tconst result: LogAttributes = {}\n\tresult[`${prefix}.type`] = error.name\n\tresult[`${prefix}.message`] = error.message\n\tif (error.stack) {\n\t\tresult[`${prefix}.stacktrace`] = error.stack\n\t}\n\t// Handle cause if present (ES2022 Error cause)\n\tif ('cause' in error && error.cause) {\n\t\tif (error.cause instanceof Error) {\n\t\t\tObject.assign(result, flattenError(error.cause, `${prefix}.cause`))\n\t\t} else {\n\t\t\tresult[`${prefix}.cause`] = String(error.cause)\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Flattens nested objects in attributes to dot-notation keys.\n * e.g., {user: {name: 'John', age: 30}} becomes {'user.name': 'John', 'user.age': 30}\n * Arrays of primitives are preserved, arrays containing objects have their objects flattened.\n * Error objects are handled specially to extract type, message, and stacktrace.\n */\nfunction flattenAttributes(attrs: LogAttributes, prefix = ''): LogAttributes {\n\tconst result: LogAttributes = {}\n\n\tfor (const [key, value] of Object.entries(attrs)) {\n\t\tconst fullKey = prefix ? `${prefix}.${key}` : key\n\n\t\tif (value === null || value === undefined) {\n\t\t\t// Skip null/undefined values\n\t\t\tcontinue\n\t\t} else if (value instanceof Error) {\n\t\t\t// Special handling for Error objects\n\t\t\tObject.assign(result, flattenError(value, fullKey))\n\t\t} else if (Array.isArray(value)) {\n\t\t\t// Check if array contains objects that need flattening\n\t\t\tconst hasObjects = value.some((item) => item !== null && typeof item === 'object' && !Array.isArray(item))\n\t\t\tif (hasObjects) {\n\t\t\t\t// Flatten each object in the array with index\n\t\t\t\tvalue.forEach((item, index) => {\n\t\t\t\t\tif (item instanceof Error) {\n\t\t\t\t\t\tObject.assign(result, flattenError(item, `${fullKey}.${index}`))\n\t\t\t\t\t} else if (item !== null && typeof item === 'object' && !Array.isArray(item)) {\n\t\t\t\t\t\tObject.assign(result, flattenAttributes(item, `${fullKey}.${index}`))\n\t\t\t\t\t} else if (item !== null && item !== undefined) {\n\t\t\t\t\t\tresult[`${fullKey}.${index}`] = item\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\t// Array of primitives - keep as-is\n\t\t\t\tresult[fullKey] = value\n\t\t\t}\n\t\t} else if (typeof value === 'object') {\n\t\t\t// Recursively flatten nested objects\n\t\t\tObject.assign(result, flattenAttributes(value as LogAttributes, fullKey))\n\t\t} else {\n\t\t\t// Primitive value - keep as-is\n\t\t\tresult[fullKey] = value\n\t\t}\n\t}\n\n\treturn result\n}\n\nfunction getHrTime(input?: TimeInput): HrTime {\n\tconst now = Date.now()\n\tif (!input) {\n\t\treturn millisToHr(now)\n\t} else if (input instanceof Date) {\n\t\treturn millisToHr(input.getTime())\n\t} else if (typeof input === 'number') {\n\t\treturn millisToHr(input)\n\t} else if (Array.isArray(input)) {\n\t\treturn input\n\t}\n\n\tconst v: never = input\n\tthrow new Error(`unreachable value: ${JSON.stringify(v)}`)\n}\n\nexport interface LogRecordInit {\n\tseverityNumber?: SeverityNumber\n\tseverityText?: string\n\tbody?: LogBody\n\tattributes?: LogAttributes\n\ttimestamp?: TimeInput\n\tobservedTimestamp?: TimeInput\n\ttraceId?: string\n\tspanId?: string\n\ttraceFlags?: number\n\tresource: Resource\n\tinstrumentationScope?: InstrumentationScope\n}\n\nexport class LogRecordImpl implements ReadableLogRecord {\n\treadonly timeUnixNano: HrTime\n\treadonly observedTimeUnixNano: HrTime\n\treadonly severityNumber?: SeverityNumber\n\treadonly severityText?: string\n\treadonly body?: LogBody\n\treadonly attributes: LogAttributes\n\treadonly traceId?: string\n\treadonly spanId?: string\n\treadonly traceFlags?: number\n\treadonly resource: Resource\n\treadonly instrumentationScope: InstrumentationScope\n\treadonly droppedAttributesCount: number = 0\n\n\tconstructor(init: LogRecordInit) {\n\t\tthis.timeUnixNano = getHrTime(init.timestamp)\n\t\tthis.observedTimeUnixNano = getHrTime(init.observedTimestamp)\n\t\tthis.severityNumber = init.severityNumber\n\t\tthis.severityText = init.severityText\n\t\tthis.body = init.body\n\t\t// Flatten nested objects to dot-notation before sanitizing\n\t\tconst flattenedAttributes = flattenAttributes(init.attributes || {})\n\t\tthis.attributes = sanitizeAttributes(flattenedAttributes)\n\t\tthis.resource = init.resource\n\t\tthis.instrumentationScope = init.instrumentationScope || {\n\t\t\tname: '@inference-net/otel-cf-workers',\n\t\t}\n\n\t\t// Auto-inject trace context from active span if not provided\n\t\tconst activeSpan = trace.getActiveSpan()\n\t\tif (activeSpan && !init.traceId) {\n\t\t\tconst spanContext = activeSpan.spanContext()\n\t\t\tthis.traceId = spanContext.traceId\n\t\t\tthis.spanId = spanContext.spanId\n\t\t\tthis.traceFlags = spanContext.traceFlags\n\t\t} else {\n\t\t\tthis.traceId = init.traceId\n\t\t\tthis.spanId = init.spanId\n\t\t\tthis.traceFlags = init.traceFlags\n\t\t}\n\t}\n}\n","import { context as api_context, trace, SpanStatusCode } from '@opentelemetry/api'\nimport { Resource } from '@opentelemetry/resources'\nimport { Logger, LogAttributes, LogRecordProcessor, LogRecord } from './types'\nimport { LogRecordImpl } from './logrecord'\nimport { SEVERITY_NUMBERS } from '../constants'\n\nexport class WorkerLogger implements Logger {\n\tprivate readonly processors: LogRecordProcessor[]\n\tprivate readonly resource: Resource\n\tprivate readonly name: string\n\tprivate readonly version?: string\n\tprivate properties: LogAttributes\n\n\tconstructor(\n\t\tname: string,\n\t\tprocessors: LogRecordProcessor[],\n\t\tresource: Resource,\n\t\tversion?: string,\n\t\tproperties?: LogAttributes,\n\t) {\n\t\tthis.name = name\n\t\tthis.processors = processors\n\t\tthis.resource = resource\n\t\tthis.version = version\n\t\tthis.properties = properties || {}\n\t}\n\n\temit(logRecord: Partial<LogRecord>): void {\n\t\t// Merge properties with log-specific attributes\n\t\tconst mergedAttributes = {\n\t\t\t...this.properties,\n\t\t\t...(logRecord.attributes || {}),\n\t\t}\n\n\t\tconst record = new LogRecordImpl({\n\t\t\t...logRecord,\n\t\t\tattributes: mergedAttributes,\n\t\t\tresource: this.resource,\n\t\t\tinstrumentationScope: {\n\t\t\t\tname: this.name,\n\t\t\t\tversion: this.version,\n\t\t\t},\n\t\t})\n\n\t\tconst context = api_context.active()\n\t\tthis.processors.forEach((processor) => {\n\t\t\tprocessor.onEmit(record, context)\n\t\t})\n\t}\n\n\ttrace(message: string, attributes?: LogAttributes): void {\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.TRACE,\n\t\t\tseverityText: 'TRACE',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\tdebug(message: string, attributes?: LogAttributes): void {\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.DEBUG,\n\t\t\tseverityText: 'DEBUG',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\tinfo(message: string, attributes?: LogAttributes): void {\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.INFO,\n\t\t\tseverityText: 'INFO',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\twarn(message: string, attributes?: LogAttributes): void {\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.WARN,\n\t\t\tseverityText: 'WARN',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\terror(message: string, attributes?: LogAttributes): void {\n\t\t// Check if an error was provided in attributes\n\t\tconst exception = attributes?.['error'] instanceof Error ? attributes['error'] : undefined\n\n\t\t// Record error on active span if one exists\n\t\tconst activeSpan = trace.getActiveSpan()\n\t\tif (activeSpan) {\n\t\t\tactiveSpan.setStatus({ code: SpanStatusCode.ERROR, message })\n\t\t\tif (exception) {\n\t\t\t\tactiveSpan.recordException(exception)\n\t\t\t}\n\t\t}\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.ERROR,\n\t\t\tseverityText: 'ERROR',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\tfatal(message: string, attributes?: LogAttributes): void {\n\t\t// Check if an error was provided in attributes\n\t\tconst exception = attributes?.['error'] instanceof Error ? attributes['error'] : undefined\n\n\t\t// Record error on active span if one exists\n\t\tconst activeSpan = trace.getActiveSpan()\n\t\tif (activeSpan) {\n\t\t\tactiveSpan.setStatus({ code: SpanStatusCode.ERROR, message })\n\t\t\tif (exception) {\n\t\t\t\tactiveSpan.recordException(exception)\n\t\t\t}\n\t\t}\n\n\t\tthis.emit({\n\t\t\tseverityNumber: SEVERITY_NUMBERS.FATAL,\n\t\t\tseverityText: 'FATAL',\n\t\t\tbody: message,\n\t\t\tattributes,\n\t\t})\n\t}\n\n\tasync forceFlush(): Promise<void> {\n\t\tconst promises = this.processors.map((p) => p.forceFlush())\n\t\tawait Promise.allSettled(promises)\n\t}\n\n\t/**\n\t * Create a child logger with a concatenated name (parent:child) that inherits properties from this logger\n\t * Child properties are merged with parent properties (child takes precedence)\n\t */\n\tchild(name: string, attributes?: LogAttributes): Logger {\n\t\tconst childName = `${this.name}:${name}`\n\t\tconst mergedProperties = {\n\t\t\t...this.properties,\n\t\t\t...(attributes || {}),\n\t\t}\n\n\t\treturn new WorkerLogger(childName, this.processors, this.resource, this.version, mergedProperties)\n\t}\n\n\t/**\n\t * Add properties to this logger that will be included in all future log records\n\t * New properties are merged with existing properties (new takes precedence)\n\t */\n\tsetProperties(attributes: LogAttributes): this {\n\t\tthis.properties = {\n\t\t\t...this.properties,\n\t\t\t...attributes,\n\t\t}\n\t\treturn this\n\t}\n}\n","import { Resource } from '@opentelemetry/resources'\nimport { Logger, LoggerOptions, LoggerProvider, LogRecordProcessor } from './types'\nimport { WorkerLogger } from './logger'\n\n// Global logger provider singleton\nlet globalLoggerProvider: LoggerProvider | undefined\n\nexport function setGlobalLoggerProvider(provider: LoggerProvider): void {\n\tglobalLoggerProvider = provider\n}\n\nexport function getGlobalLoggerProvider(): LoggerProvider {\n\treturn globalLoggerProvider || new NoopLoggerProvider()\n}\n\nexport class WorkerLoggerProvider implements LoggerProvider {\n\tprivate loggers: Map<string, Logger> = new Map()\n\tprivate processors: LogRecordProcessor[]\n\tprivate resource: Resource\n\n\tconstructor(processors: LogRecordProcessor[], resource: Resource) {\n\t\tthis.processors = processors\n\t\tthis.resource = resource\n\t}\n\n\tgetLogger(name: string, version?: string, options?: LoggerOptions): Logger {\n\t\tconst key = `${name}@${version || ''}:${options?.schemaUrl || ''}`\n\t\tif (!this.loggers.has(key)) {\n\t\t\tthis.loggers.set(key, new WorkerLogger(name, this.processors, this.resource, version))\n\t\t}\n\t\treturn this.loggers.get(key)!\n\t}\n\n\tregister(): void {\n\t\tsetGlobalLoggerProvider(this)\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait Promise.allSettled(this.processors.map((p) => p.shutdown()))\n\t}\n}\n\n// Noop implementations for when logs are not configured\nclass NoopLogger implements Logger {\n\temit(): void {}\n\ttrace(): void {}\n\tdebug(): void {}\n\tinfo(): void {}\n\twarn(): void {}\n\terror(): void {}\n\tfatal(): void {}\n\tasync forceFlush(): Promise<void> {}\n\tchild(): Logger {\n\t\treturn this\n\t}\n\tsetProperties(): this {\n\t\treturn this\n\t}\n}\n\nclass NoopLoggerProvider implements LoggerProvider {\n\tprivate logger = new NoopLogger()\n\n\tgetLogger(): Logger {\n\t\treturn this.logger\n\t}\n\n\tregister(): void {}\n\n\tasync shutdown(): Promise<void> {}\n}\n\n// Convenience function to get a logger from the global provider\nexport function getLogger(name: string, version?: string, options?: LoggerOptions): Logger {\n\treturn getGlobalLoggerProvider().getLogger(name, version, options)\n}\n","import { Attributes, AttributeValue } from '@opentelemetry/api'\nimport {\n\tATTR_USER_AGENT_BROWSER_NAME,\n\tATTR_USER_AGENT_BROWSER_VERSION,\n\tATTR_USER_AGENT_BROWSER_MAJOR_VERSION,\n\tATTR_USER_AGENT_OS_NAME,\n\tATTR_USER_AGENT_OS_VERSION,\n\tATTR_USER_AGENT_ENGINE_NAME,\n\tATTR_USER_AGENT_ENGINE_VERSION,\n\tATTR_USER_AGENT_DEVICE_TYPE,\n\tATTR_USER_AGENT_DEVICE_VENDOR,\n\tATTR_USER_AGENT_DEVICE_MODEL,\n} from '../constants'\n\nfunction isValidAttributeValue(value: unknown): value is AttributeValue {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n}\n\n/**\n * Parse user agent attributes from Request.cf\n * Cloudflare provides pre-parsed user agent data via the cf property\n */\nexport function gatherUserAgentAttributes(request: Request): Attributes {\n\tconst attrs: Attributes = {}\n\n\t// Request.cf might not be available in all contexts\n\tif (!request.cf) {\n\t\treturn attrs\n\t}\n\n\tconst cfData = request.cf as Record<string, unknown>\n\n\t// Browser information\n\tif (cfData['browser']) {\n\t\tconst browser = cfData['browser'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(browser['name'])) attrs[ATTR_USER_AGENT_BROWSER_NAME] = browser['name']\n\t\tif (isValidAttributeValue(browser['version'])) attrs[ATTR_USER_AGENT_BROWSER_VERSION] = browser['version']\n\t\tif (isValidAttributeValue(browser['major'])) attrs[ATTR_USER_AGENT_BROWSER_MAJOR_VERSION] = browser['major']\n\t}\n\n\t// OS information\n\tif (cfData['os']) {\n\t\tconst os = cfData['os'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(os['name'])) attrs[ATTR_USER_AGENT_OS_NAME] = os['name']\n\t\tif (isValidAttributeValue(os['version'])) attrs[ATTR_USER_AGENT_OS_VERSION] = os['version']\n\t}\n\n\t// Engine information\n\tif (cfData['engine']) {\n\t\tconst engine = cfData['engine'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(engine['name'])) attrs[ATTR_USER_AGENT_ENGINE_NAME] = engine['name']\n\t\tif (isValidAttributeValue(engine['version'])) attrs[ATTR_USER_AGENT_ENGINE_VERSION] = engine['version']\n\t}\n\n\t// Device information\n\tif (cfData['device']) {\n\t\tconst device = cfData['device'] as Record<string, unknown>\n\t\tif (isValidAttributeValue(device['type'])) attrs[ATTR_USER_AGENT_DEVICE_TYPE] = device['type']\n\t\tif (isValidAttributeValue(device['vendor'])) attrs[ATTR_USER_AGENT_DEVICE_VENDOR] = device['vendor']\n\t\tif (isValidAttributeValue(device['model'])) attrs[ATTR_USER_AGENT_DEVICE_MODEL] = device['model']\n\t}\n\n\treturn attrs\n}\n","import { Attributes } from '@opentelemetry/api'\nimport {\n\tATTR_CLOUD_PROVIDER,\n\tATTR_CLOUD_PLATFORM,\n\tATTR_CLOUDFLARE_COLO,\n\tATTR_CLOUDFLARE_SCRIPT_NAME,\n\tATTR_CLOUDFLARE_RAY_ID,\n\tATTR_CLOUDFLARE_HANDLER_TYPE,\n\tATTR_CLOUDFLARE_EXECUTION_MODEL,\n\tATTR_TELEMETRY_SDK_NAME,\n\tATTR_TELEMETRY_SDK_LANGUAGE,\n\tPACKAGE_NAME,\n} from '../constants'\n\n/**\n * Gather universal attributes that should be present on all spans\n */\nexport function gatherUniversalAttributes(serviceName?: string): Attributes {\n\treturn {\n\t\t[ATTR_CLOUD_PROVIDER]: 'cloudflare',\n\t\t[ATTR_CLOUD_PLATFORM]: 'cloudflare.workers',\n\t\t[ATTR_TELEMETRY_SDK_NAME]: PACKAGE_NAME,\n\t\t[ATTR_TELEMETRY_SDK_LANGUAGE]: 'javascript',\n\t\t[ATTR_CLOUDFLARE_SCRIPT_NAME]: serviceName,\n\t}\n}\n\n/**\n * Gather root span attributes for HTTP fetch handlers\n */\nexport function gatherRootSpanAttributes(\n\trequest: Request,\n\thandlerType: 'fetch' | 'scheduled' | 'queue' | 'email' | 'alarm',\n\texecutionModel: 'stateless' | 'stateful' = 'stateless',\n): Attributes {\n\tconst attrs: Attributes = {\n\t\t[ATTR_CLOUDFLARE_HANDLER_TYPE]: handlerType,\n\t\t[ATTR_CLOUDFLARE_EXECUTION_MODEL]: executionModel,\n\t}\n\n\t// Ray ID from headers (for HTTP requests)\n\tconst rayId = request.headers?.get('cf-ray')\n\tif (rayId) {\n\t\tattrs[ATTR_CLOUDFLARE_RAY_ID] = rayId\n\t}\n\n\t// Colo from request.cf\n\tif (request.cf?.colo) {\n\t\tattrs[ATTR_CLOUDFLARE_COLO] = request.cf.colo as string\n\t}\n\n\treturn attrs\n}\n","import {\n\ttrace,\n\tSpanOptions,\n\tSpanKind,\n\tpropagation,\n\tcontext as api_context,\n\tAttributes,\n\tContext,\n\tSpan,\n\tException,\n\tSpanStatusCode,\n} from '@opentelemetry/api'\nimport { getActiveConfig } from '../config'\nimport { wrap } from '../wrap'\nimport { HandlerInstrumentation, OrPromise, ResolvedTraceConfig } from '../types'\nimport { ReadableSpan } from '@opentelemetry/sdk-trace-base'\nimport { gatherUserAgentAttributes } from './user-agent'\nimport { gatherRootSpanAttributes } from './universal-attributes'\nimport {\n\tATTR_CLOUDFLARE_ASN,\n\tATTR_CLOUDFLARE_VERIFIED_BOT_CATEGORY,\n\tATTR_GEO_TIMEZONE,\n\tATTR_GEO_CONTINENT_CODE,\n\tATTR_GEO_COUNTRY_CODE,\n\tATTR_GEO_LOCALITY_NAME,\n\tATTR_GEO_LOCALITY_REGION,\n\tATTR_HTTP_REQUEST_HEADER_ACCEPT,\n\tATTR_HTTP_REQUEST_HEADER_ACCEPT_ENCODING,\n\tATTR_HTTP_REQUEST_HEADER_ACCEPT_LANGUAGE,\n\tATTR_HTTP_REQUEST_HEADER_CONTENT_TYPE,\n\tATTR_HTTP_REQUEST_HEADER_CONTENT_LENGTH,\n} from '../constants'\n\ntype IncomingRequest = Parameters<ExportedHandlerFetchHandler>[0]\n\nexport type IncludeTraceContextFn = (request: Request) => boolean\nexport interface FetcherConfig {\n\tincludeTraceContext?: boolean | IncludeTraceContextFn\n}\n\nexport type AcceptTraceContextFn = (request: Request) => boolean\nexport interface FetchHandlerConfig {\n\t/**\n\t * Whether to enable context propagation for incoming requests to `fetch`.\n\t * This enables or disables distributed tracing from W3C Trace Context headers.\n\t * @default true\n\t */\n\tacceptTraceContext?: boolean | AcceptTraceContextFn\n}\n\nconst netKeysFromCF = new Set(['colo', 'country', 'request_priority', 'tls_cipher', 'tls_version', 'asn', 'tcp_rtt'])\n\nconst camelToSnakeCase = (s: string): string => {\n\treturn s.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`)\n}\n\nconst gatherOutgoingCfAttributes = (cf: RequestInitCfProperties): Attributes => {\n\tconst attrs: Record<string, string | number> = {}\n\tObject.keys(cf).forEach((key) => {\n\t\tconst value = cf[key]\n\t\tconst destKey = camelToSnakeCase(key)\n\t\tif (!netKeysFromCF.has(destKey)) {\n\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\tattrs[`cf.${destKey}`] = value\n\t\t\t} else {\n\t\t\t\tattrs[`cf.${destKey}`] = JSON.stringify(value)\n\t\t\t}\n\t\t}\n\t})\n\treturn attrs\n}\n\nexport function gatherRequestAttributes(request: Request): Attributes {\n\tconst attrs: Attributes = {}\n\tconst headers = request.headers\n\n\t// HTTP method and protocol\n\tattrs['http.request.method'] = request.method.toUpperCase()\n\tattrs['network.protocol.name'] = 'http'\n\tif (request.cf?.httpProtocol) {\n\t\tattrs['network.protocol.version'] = request.cf.httpProtocol as string\n\t}\n\n\t// Request headers\n\tconst contentLength = headers.get('content-length')\n\tif (contentLength) {\n\t\tattrs['http.request.body.size'] = parseInt(contentLength, 10)\n\t\tattrs[ATTR_HTTP_REQUEST_HEADER_CONTENT_LENGTH] = contentLength\n\t}\n\n\tconst userAgent = headers.get('user-agent')\n\tif (userAgent) attrs['user_agent.original'] = userAgent\n\n\tconst contentType = headers.get('content-type')\n\tif (contentType) {\n\t\tattrs['http.mime_type'] = contentType\n\t\tattrs[ATTR_HTTP_REQUEST_HEADER_CONTENT_TYPE] = contentType\n\t}\n\n\tconst accept = headers.get('accept')\n\tif (accept) attrs[ATTR_HTTP_REQUEST_HEADER_ACCEPT] = accept\n\n\tconst acceptEncoding = headers.get('accept-encoding')\n\tif (acceptEncoding) {\n\t\tattrs['http.accepts'] = acceptEncoding\n\t\tattrs[ATTR_HTTP_REQUEST_HEADER_ACCEPT_ENCODING] = acceptEncoding\n\t}\n\n\tconst acceptLanguage = headers.get('accept-language')\n\tif (acceptLanguage) attrs[ATTR_HTTP_REQUEST_HEADER_ACCEPT_LANGUAGE] = acceptLanguage\n\n\t// URL attributes\n\tconst u = new URL(request.url)\n\tattrs['url.full'] = `${u.protocol}//${u.host}${u.pathname}${u.search}`\n\tattrs['server.address'] = u.host\n\tattrs['url.scheme'] = u.protocol.replace(':', '')\n\tattrs['url.path'] = u.pathname\n\tif (u.search) attrs['url.query'] = u.search\n\n\t// Server port\n\tif (u.port) {\n\t\tattrs['server.port'] = parseInt(u.port, 10)\n\t} else {\n\t\tattrs['server.port'] = u.protocol === 'https:' ? 443 : 80\n\t}\n\n\treturn attrs\n}\n\nexport function gatherResponseAttributes(response: Response): Attributes {\n\tconst attrs: Record<string, string | number> = {}\n\tattrs['http.response.status_code'] = response.status\n\tif (response.headers.get('content-length')! == null) {\n\t\tattrs['http.response.body.size'] = response.headers.get('content-length')!\n\t}\n\tattrs['http.mime_type'] = response.headers.get('content-type')!\n\treturn attrs\n}\n\nexport function gatherIncomingCfAttributes(request: Request): Attributes {\n\tconst attrs: Attributes = {}\n\n\tif (!request.cf) {\n\t\treturn attrs\n\t}\n\n\t// Network attributes\n\tif (request.cf.colo) attrs['net.colo'] = request.cf.colo as string\n\tif (request.cf.country) attrs['net.country'] = request.cf.country as string\n\tif (request.cf.requestPriority) attrs['net.request_priority'] = request.cf.requestPriority as string\n\tif (request.cf.tlsCipher) attrs['net.tls_cipher'] = request.cf.tlsCipher as string\n\tif (request.cf.tlsVersion) attrs['net.tls_version'] = request.cf.tlsVersion as string\n\tif (request.cf.asn) attrs[ATTR_CLOUDFLARE_ASN] = request.cf.asn as number\n\tif (request.cf.clientTcpRtt) attrs['net.tcp_rtt'] = request.cf.clientTcpRtt as number\n\n\t// Geo attributes\n\tif (request.cf.timezone) attrs[ATTR_GEO_TIMEZONE] = request.cf.timezone as string\n\tif (request.cf.continent) attrs[ATTR_GEO_CONTINENT_CODE] = request.cf.continent as string\n\tif (request.cf.country) attrs[ATTR_GEO_COUNTRY_CODE] = request.cf.country as string\n\tif (request.cf.city) attrs[ATTR_GEO_LOCALITY_NAME] = request.cf.city as string\n\tif (request.cf.region) attrs[ATTR_GEO_LOCALITY_REGION] = request.cf.region as string\n\n\t// Bot detection\n\t// @ts-expect-error - verifiedBotCategory may not be typed yet\n\tif (request.cf.verifiedBotCategory) attrs[ATTR_CLOUDFLARE_VERIFIED_BOT_CATEGORY] = request.cf.verifiedBotCategory\n\n\treturn attrs\n}\n\nexport function getParentContextFromHeaders(headers: Headers): Context {\n\treturn propagation.extract(api_context.active(), headers, {\n\t\tget(headers, key) {\n\t\t\treturn headers.get(key) || undefined\n\t\t},\n\t\tkeys(headers) {\n\t\t\treturn [...headers.keys()]\n\t\t},\n\t})\n}\n\nfunction getParentContextFromRequest(request: Request) {\n\tconst workerConfig = getActiveConfig()\n\n\tif (workerConfig === undefined) {\n\t\treturn api_context.active()\n\t}\n\n\tconst acceptTraceContext =\n\t\ttypeof workerConfig.handlers.fetch.acceptTraceContext === 'function'\n\t\t\t? workerConfig.handlers.fetch.acceptTraceContext(request)\n\t\t\t: (workerConfig.handlers.fetch.acceptTraceContext ?? true)\n\treturn acceptTraceContext ? getParentContextFromHeaders(request.headers) : api_context.active()\n}\n\nfunction updateSpanNameOnRoute(span: Span, request: IncomingRequest, result?: Response) {\n\tconst readable = span as unknown as ReadableSpan & { attributes?: Attributes }\n\tconst route = readable.attributes?.['http.route']\n\tif (route) {\n\t\tconst method = request.method.toUpperCase()\n\t\tspan.updateName(`${method} ${route}`)\n\t}\n\t// Set span status based on HTTP response status code\n\tif (result) {\n\t\tif (result.status >= 400) {\n\t\t\tspan.setStatus({\n\t\t\t\tcode: SpanStatusCode.ERROR,\n\t\t\t\tmessage: `HTTP ${result.status}: ${result.statusText}`,\n\t\t\t})\n\t\t} else {\n\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t}\n\t}\n}\n\nexport const fetchInstrumentation: HandlerInstrumentation<IncomingRequest, OrPromise<Response>> = {\n\tgetInitialSpanInfo: (request) => {\n\t\tconst spanContext = getParentContextFromRequest(request)\n\t\tconst attributes = {\n\t\t\t['faas.trigger']: 'http',\n\t\t\t['faas.invocation_id']: request.headers.get('cf-ray') ?? undefined,\n\t\t}\n\t\tObject.assign(attributes, gatherRequestAttributes(request))\n\t\tObject.assign(attributes, gatherIncomingCfAttributes(request))\n\t\tObject.assign(attributes, gatherRootSpanAttributes(request, 'fetch'))\n\t\tObject.assign(attributes, gatherUserAgentAttributes(request))\n\t\tconst method = request.method.toUpperCase()\n\t\tconst url = new URL(request.url)\n\t\tconst route = url.pathname\n\t\treturn {\n\t\t\tname: `${method} ${route}`,\n\t\t\toptions: {\n\t\t\t\tattributes,\n\t\t\t\tkind: SpanKind.SERVER,\n\t\t\t},\n\t\t\tcontext: spanContext,\n\t\t}\n\t},\n\tgetAttributesFromResult: (response) => {\n\t\tconst attrs = gatherResponseAttributes(response)\n\t\tattrs['http.status_code'] = response.status\n\t\tattrs['http.status_text'] = response.statusText\n\t\treturn attrs\n\t},\n\texecutionSucces: updateSpanNameOnRoute,\n\texecutionFailed: updateSpanNameOnRoute,\n}\n\ntype getFetchConfig = (config: ResolvedTraceConfig) => FetcherConfig\nexport function instrumentClientFetch(\n\tfetchFn: Fetcher['fetch'],\n\tconfigFn: getFetchConfig,\n\tattrs?: Attributes,\n): Fetcher['fetch'] {\n\tconst handler: ProxyHandler<Fetcher['fetch']> = {\n\t\tapply: (target, thisArg, argArray): Response | Promise<Response> => {\n\t\t\tconst request = new Request(argArray[0], argArray[1])\n\t\t\tif (!request.url.startsWith('http')) {\n\t\t\t\treturn Reflect.apply(target, thisArg, argArray)\n\t\t\t}\n\n\t\t\tconst workerConfig = getActiveConfig()\n\t\t\tif (!workerConfig) {\n\t\t\t\treturn Reflect.apply(target, thisArg, [request])\n\t\t\t}\n\t\t\tconst config = configFn(workerConfig)\n\n\t\t\tconst tracer = trace.getTracer('fetcher')\n\t\t\tconst options: SpanOptions = { kind: SpanKind.CLIENT, attributes: attrs }\n\n\t\t\tconst host = new URL(request.url).host\n\t\t\tconst method = request.method.toUpperCase()\n\t\t\tconst spanName = typeof attrs?.['name'] === 'string' ? attrs?.['name'] : `fetch ${method} ${host}`\n\t\t\tconst promise = tracer.startActiveSpan(spanName, options, async (span) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst includeTraceContext =\n\t\t\t\t\t\ttypeof config.includeTraceContext === 'function'\n\t\t\t\t\t\t\t? config.includeTraceContext(request)\n\t\t\t\t\t\t\t: config.includeTraceContext\n\t\t\t\t\tif (includeTraceContext ?? true) {\n\t\t\t\t\t\tpropagation.inject(api_context.active(), request.headers, {\n\t\t\t\t\t\t\tset: (h, k, v) => h.set(k, typeof v === 'string' ? v : String(v)),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tspan.setAttributes(gatherRequestAttributes(request))\n\t\t\t\t\tif (request.cf) span.setAttributes(gatherOutgoingCfAttributes(request.cf))\n\t\t\t\t\tconst response = await Reflect.apply(target, thisArg, [request])\n\t\t\t\t\tspan.setAttributes(gatherResponseAttributes(response))\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t'http.status_code': response.status,\n\t\t\t\t\t\t'http.status_text': response.statusText,\n\t\t\t\t\t})\n\t\t\t\t\t// Set span status based on HTTP status code\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\tcode: SpanStatusCode.ERROR,\n\t\t\t\t\t\t\tmessage: `HTTP ${response.status}: ${response.statusText}`,\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t}\n\t\t\t\t\treturn response\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\tthrow error\n\t\t\t\t} finally {\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn promise\n\t\t},\n\t}\n\treturn wrap(fetchFn, handler, true)\n}\n\nexport function instrumentGlobalFetch(): void {\n\t//@ts-ignore For some reason the node types are imported and complain.\n\tglobalThis.fetch = instrumentClientFetch(globalThis.fetch, (config) => config.fetch)\n}\n","import { SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\n\ntype CacheFns = Cache[keyof Cache]\n\nconst tracer = trace.getTracer('cache instrumentation')\n\nfunction sanitiseURL(url: string): string {\n\tconst u = new URL(url)\n\treturn `${u.protocol}//${u.host}${u.pathname}${u.search}`\n}\n\nfunction instrumentFunction<T extends CacheFns>(fn: T, cacheName: string, op: string): T {\n\tconst handler: ProxyHandler<typeof fn> = {\n\t\tasync apply(target, thisArg, argArray) {\n\t\t\tconst attributes = {\n\t\t\t\t'cache.name': cacheName,\n\t\t\t\t'http.url': argArray[0].url ? sanitiseURL(argArray[0].url) : undefined,\n\t\t\t\t'cache.operation': op,\n\t\t\t}\n\t\t\tconst options: SpanOptions = { kind: SpanKind.CLIENT, attributes }\n\t\t\treturn tracer.startActiveSpan(`Cache ${cacheName} ${op}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tif (op === 'match') {\n\t\t\t\t\tspan.setAttribute('cache.hit', !!result)\n\t\t\t\t}\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nfunction instrumentCache(cache: Cache, cacheName: string): Cache {\n\tconst handler: ProxyHandler<typeof cache> = {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'delete' || prop === 'match' || prop === 'put') {\n\t\t\t\tconst fn = Reflect.get(target, prop).bind(target)\n\t\t\t\treturn instrumentFunction(fn, cacheName, prop)\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(cache, handler)\n}\n\nfunction instrumentOpen(openFn: CacheStorage['open']): CacheStorage['open'] {\n\tconst handler: ProxyHandler<typeof openFn> = {\n\t\tasync apply(target, thisArg, argArray) {\n\t\t\tconst cacheName = argArray[0]\n\t\t\tconst cache = await Reflect.apply(target, thisArg, argArray)\n\t\t\treturn instrumentCache(cache, cacheName)\n\t\t},\n\t}\n\treturn wrap(openFn, handler)\n}\n\nfunction _instrumentGlobalCache() {\n\tconst handler: ProxyHandler<typeof caches> = {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'default') {\n\t\t\t\tconst cache = target.default\n\t\t\t\treturn instrumentCache(cache, 'default')\n\t\t\t} else if (prop === 'open') {\n\t\t\t\tconst openFn = Reflect.get(target, prop).bind(target)\n\t\t\t\treturn instrumentOpen(openFn)\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\t//@ts-ignore\n\tglobalThis.caches = wrap(caches, handler)\n}\n\nexport function instrumentGlobalCache() {\n\treturn _instrumentGlobalCache()\n}\n","import { trace, SpanKind, Attributes, Span } from '@opentelemetry/api'\nimport { unwrap, wrap } from '../wrap'\nimport { HandlerInstrumentation, InitialSpanInfo, OrPromise } from '../types'\nimport { ATTR_FAAS_TRIGGER, FAAS_TRIGGER_VALUE_PUBSUB } from '@opentelemetry/semantic-conventions/incubating'\nimport { ATTR_CLOUDFLARE_QUEUE_NAME, ATTR_CLOUDFLARE_QUEUE_BATCH_SIZE } from '../constants'\n\ntype QueueHandler = ExportedHandlerQueueHandler<unknown, unknown>\nexport type QueueHandlerArgs = Parameters<QueueHandler>\n\nclass MessageStatusCount {\n\tsucceeded = 0\n\tfailed = 0\n\timplicitly_acked = 0\n\timplicitly_retried = 0\n\treadonly total: number\n\n\tconstructor(total: number) {\n\t\tthis.total = total\n\t}\n\n\tack() {\n\t\tthis.succeeded = this.succeeded + 1\n\t}\n\n\tackRemaining() {\n\t\tthis.implicitly_acked = this.total - this.succeeded - this.failed\n\t\tthis.succeeded = this.total - this.failed\n\t}\n\n\tretry() {\n\t\tthis.failed = this.failed + 1\n\t}\n\n\tretryRemaining() {\n\t\tthis.implicitly_retried = this.total - this.succeeded - this.failed\n\t\tthis.failed = this.total - this.succeeded\n\t}\n\n\ttoAttributes(): Attributes {\n\t\treturn {\n\t\t\t'queue.messages_count': this.total,\n\t\t\t'queue.messages_success': this.succeeded,\n\t\t\t'queue.messages_failed': this.failed,\n\t\t\t'queue.batch_success': this.succeeded === this.total,\n\t\t\t'queue.implicitly_acked': this.implicitly_acked,\n\t\t\t'queue.implicitly_retried': this.implicitly_retried,\n\t\t}\n\t}\n}\n\nconst addEvent = (name: string, msg?: Message) => {\n\tconst attrs: Attributes = {}\n\tif (msg) {\n\t\tattrs['queue.message_id'] = msg.id\n\t\tattrs['queue.message_timestamp'] = msg.timestamp.toISOString()\n\t}\n\ttrace.getActiveSpan()?.addEvent(name, attrs)\n}\n\nconst proxyQueueMessage = <Q>(msg: Message<Q>, count: MessageStatusCount): Message<Q> => {\n\tconst msgHandler: ProxyHandler<Message<Q>> = {\n\t\tget: (target, prop) => {\n\t\t\tif (prop === 'ack') {\n\t\t\t\tconst ackFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(ackFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('messageAck', msg)\n\t\t\t\t\t\tcount.ack()\n\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tReflect.apply(fnTarget, msg, [])\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} else if (prop === 'retry') {\n\t\t\t\tconst retryFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(retryFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('messageRetry', msg)\n\t\t\t\t\t\tcount.retry()\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tconst result = Reflect.apply(fnTarget, msg, [])\n\t\t\t\t\t\treturn result\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop, msg)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(msg, msgHandler)\n}\n\nconst proxyMessageBatch = (batch: MessageBatch, count: MessageStatusCount) => {\n\tconst batchHandler: ProxyHandler<MessageBatch> = {\n\t\tget: (target, prop) => {\n\t\t\tif (prop === 'messages') {\n\t\t\t\tconst messages = Reflect.get(target, prop)\n\t\t\t\tconst messagesHandler: ProxyHandler<MessageBatch['messages']> = {\n\t\t\t\t\tget: (target, prop) => {\n\t\t\t\t\t\tif (typeof prop === 'string' && !isNaN(parseInt(prop))) {\n\t\t\t\t\t\t\tconst message = Reflect.get(target, prop)\n\t\t\t\t\t\t\treturn proxyQueueMessage(message, count)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\treturn wrap(messages, messagesHandler)\n\t\t\t} else if (prop === 'ackAll') {\n\t\t\t\tconst ackFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(ackFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('ackAll')\n\t\t\t\t\t\tcount.ackRemaining()\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tReflect.apply(fnTarget, batch, [])\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} else if (prop === 'retryAll') {\n\t\t\t\tconst retryFn = Reflect.get(target, prop)\n\t\t\t\treturn new Proxy(retryFn, {\n\t\t\t\t\tapply: (fnTarget) => {\n\t\t\t\t\t\taddEvent('retryAll')\n\t\t\t\t\t\tcount.retryRemaining()\n\t\t\t\t\t\t//TODO: handle errors\n\t\t\t\t\t\tReflect.apply(fnTarget, batch, [])\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop)\n\t\t},\n\t}\n\treturn wrap(batch, batchHandler)\n}\n\nexport class QueueInstrumentation implements HandlerInstrumentation<MessageBatch, OrPromise<void>> {\n\tprivate count?: MessageStatusCount\n\n\tgetInitialSpanInfo(batch: MessageBatch): InitialSpanInfo {\n\t\treturn {\n\t\t\tname: `queueHandler ${batch.queue}`,\n\t\t\toptions: {\n\t\t\t\tattributes: {\n\t\t\t\t\t[ATTR_FAAS_TRIGGER]: FAAS_TRIGGER_VALUE_PUBSUB,\n\t\t\t\t\t[ATTR_CLOUDFLARE_QUEUE_NAME]: batch.queue,\n\t\t\t\t\t[ATTR_CLOUDFLARE_QUEUE_BATCH_SIZE]: batch.messages.length,\n\t\t\t\t},\n\t\t\t\tkind: SpanKind.CONSUMER,\n\t\t\t},\n\t\t}\n\t}\n\n\tinstrumentTrigger(batch: MessageBatch): MessageBatch {\n\t\tthis.count = new MessageStatusCount(batch.messages.length)\n\t\treturn proxyMessageBatch(batch, this.count)\n\t}\n\n\texecutionSucces(span: Span) {\n\t\tif (this.count) {\n\t\t\tthis.count.ackRemaining()\n\t\t\tspan.setAttributes(this.count.toAttributes())\n\t\t}\n\t}\n\n\texecutionFailed(span: Span) {\n\t\tif (this.count) {\n\t\t\tthis.count.retryRemaining()\n\t\t\tspan.setAttributes(this.count.toAttributes())\n\t\t}\n\t}\n}\n\nfunction instrumentQueueSend(fn: Queue<unknown>['send'], name: string): Queue<unknown>['send'] {\n\tconst tracer = trace.getTracer('queueSender')\n\tconst handler: ProxyHandler<Queue<unknown>['send']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\treturn tracer.startActiveSpan(`Queues ${name} send`, async (span) => {\n\t\t\t\tspan.setAttribute('queue.operation', 'send')\n\t\t\t\tawait Reflect.apply(target, unwrap(thisArg), argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nfunction instrumentQueueSendBatch(fn: Queue<unknown>['sendBatch'], name: string): Queue<unknown>['sendBatch'] {\n\tconst tracer = trace.getTracer('queueSender')\n\tconst handler: ProxyHandler<Queue<unknown>['sendBatch']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\treturn tracer.startActiveSpan(`Queues ${name} sendBatch`, async (span) => {\n\t\t\t\tspan.setAttribute('queue.operation', 'sendBatch')\n\t\t\t\tawait Reflect.apply(target, unwrap(thisArg), argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentQueueSender(queue: Queue<unknown>, name: string) {\n\tconst queueHandler: ProxyHandler<Queue<unknown>> = {\n\t\tget: (target, prop) => {\n\t\t\tif (prop === 'send') {\n\t\t\t\tconst sendFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentQueueSend(sendFn, name)\n\t\t\t} else if (prop === 'sendBatch') {\n\t\t\t\tconst sendFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentQueueSendBatch(sendFn, name)\n\t\t\t} else {\n\t\t\t\treturn Reflect.get(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(queue, queueHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_CLOUDFLARE_KV_QUERY_KEYS,\n\tATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT,\n\tATTR_CLOUDFLARE_KV_QUERY_TYPE,\n\tATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL,\n\tATTR_CLOUDFLARE_KV_QUERY_VALUE_TYPE,\n\tATTR_CLOUDFLARE_KV_QUERY_EXPIRATION,\n\tATTR_CLOUDFLARE_KV_QUERY_EXPIRATION_TTL,\n\tATTR_CLOUDFLARE_KV_QUERY_METADATA,\n\tATTR_CLOUDFLARE_KV_QUERY_PREFIX,\n\tATTR_CLOUDFLARE_KV_QUERY_LIMIT,\n\tATTR_CLOUDFLARE_KV_QUERY_CURSOR,\n\tATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS,\n\tATTR_CLOUDFLARE_KV_RESPONSE_LIST_COMPLETE,\n\tATTR_CLOUDFLARE_KV_RESPONSE_CURSOR,\n\tATTR_CLOUDFLARE_KV_RESPONSE_METADATA,\n} from '../constants'\n\ntype ExtraAttributeFn = (argArray: any[], result: any) => Attributes\n\nconst dbSystem = 'Cloudflare KV'\n\nconst KVAttributes: Record<string | symbol, ExtraAttributeFn> = {\n\tdelete(_argArray) {\n\t\treturn {}\n\t},\n\tget(argArray) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts = argArray[1]\n\t\tif (typeof opts === 'string') {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts\n\t\t} else if (typeof opts === 'object') {\n\t\t\tif (opts.type) attrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts.type\n\t\t\tif (opts.cacheTtl) attrs[ATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL] = opts.cacheTtl\n\t\t}\n\t\treturn attrs\n\t},\n\tgetWithMetadata(argArray, result) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts = argArray[1]\n\t\tif (typeof opts === 'string') {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts\n\t\t} else if (typeof opts === 'object') {\n\t\t\tif (opts.type) attrs[ATTR_CLOUDFLARE_KV_QUERY_TYPE] = opts.type\n\t\t\tif (opts.cacheTtl) attrs[ATTR_CLOUDFLARE_KV_QUERY_CACHE_TTL] = opts.cacheTtl\n\t\t}\n\n\t\tconst kvResult = result as KVNamespaceGetWithMetadataResult<any, any>\n\t\tif (kvResult.metadata !== null && kvResult.metadata !== undefined) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_METADATA] = JSON.stringify(kvResult.metadata)\n\t\t}\n\t\tif (kvResult.cacheStatus) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS] = kvResult.cacheStatus\n\t\t}\n\t\treturn attrs\n\t},\n\tlist(argArray, result) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts: KVNamespaceListOptions = argArray[0] || {}\n\t\tif (opts.cursor) attrs[ATTR_CLOUDFLARE_KV_QUERY_CURSOR] = opts.cursor\n\t\tif (opts.limit) attrs[ATTR_CLOUDFLARE_KV_QUERY_LIMIT] = opts.limit\n\t\tif (opts.prefix) attrs[ATTR_CLOUDFLARE_KV_QUERY_PREFIX] = opts.prefix\n\n\t\tconst kvResult = result as KVNamespaceListResult<any, any>\n\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_LIST_COMPLETE] = kvResult.list_complete\n\t\tif (!kvResult.list_complete && kvResult.cursor) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_CURSOR] = kvResult.cursor\n\t\t}\n\t\tif (kvResult.cacheStatus) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_RESPONSE_CACHE_STATUS] = kvResult.cacheStatus\n\t\t}\n\t\treturn attrs\n\t},\n\tput(argArray) {\n\t\tconst attrs: Attributes = {}\n\t\tconst value = argArray[1]\n\t\tif (value !== undefined) {\n\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_VALUE_TYPE] = typeof value\n\t\t}\n\t\tif (argArray.length > 2 && argArray[2]) {\n\t\t\tconst options = argArray[2] as KVNamespacePutOptions\n\t\t\tif (options.expiration) attrs[ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION] = options.expiration\n\t\t\tif (options.expirationTtl) attrs[ATTR_CLOUDFLARE_KV_QUERY_EXPIRATION_TTL] = options.expirationTtl\n\t\t\tif (options.metadata !== undefined) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_KV_QUERY_METADATA] = JSON.stringify(options.metadata)\n\t\t\t}\n\t\t}\n\t\treturn attrs\n\t},\n}\n\nfunction instrumentKVFn(fn: Function, name: string, operation: string) {\n\tconst tracer = trace.getTracer('KV')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'KV',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[SemanticAttributes.DB_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`KV ${name} ${operation}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tconst extraAttrsFn = KVAttributes[operation]\n\t\t\t\tconst extraAttrs = extraAttrsFn ? extraAttrsFn(argArray, result) : {}\n\t\t\t\tspan.setAttributes(extraAttrs)\n\n\t\t\t\t// Add key/keys attributes\n\t\t\t\tif (operation === 'list') {\n\t\t\t\t\t// No specific key for list operations\n\t\t\t\t} else if (Array.isArray(argArray[0])) {\n\t\t\t\t\t// Multi-key operation\n\t\t\t\t\tconst keys = argArray[0] as string[]\n\t\t\t\t\tif (keys.length > 0 && keys[0]) {\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS, keys[0])\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT, keys.length)\n\t\t\t\t\t}\n\t\t\t\t} else if (argArray[0] && typeof argArray[0] === 'string') {\n\t\t\t\t\t// Single key operation\n\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS, argArray[0])\n\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_KV_QUERY_KEYS_COUNT, 1)\n\t\t\t\t}\n\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentKV(kv: KVNamespace, name: string): KVNamespace {\n\tconst kvHandler: ProxyHandler<KVNamespace> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\treturn instrumentKVFn(fn, name, operation)\n\t\t},\n\t}\n\treturn wrap(kv, kvHandler)\n}\n","import { passthroughGet, wrap } from '../wrap'\nimport { instrumentClientFetch } from './fetch'\n\nexport function instrumentServiceBinding(fetcher: Fetcher, envName: string): Fetcher {\n\tconst fetcherHandler: ProxyHandler<Fetcher> = {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'fetch') {\n\t\t\t\tconst fetcher = Reflect.get(target, prop)\n\t\t\t\tconst attrs = {\n\t\t\t\t\tname: `Service Binding ${envName}`,\n\t\t\t\t}\n\t\t\t\treturn instrumentClientFetch(fetcher, () => ({ includeTraceContext: true }), attrs)\n\t\t\t} else {\n\t\t\t\treturn passthroughGet(target, prop)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(fetcher, fetcherHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, SpanStatusCode, Exception, trace } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_DB_QUERY_TEXT,\n\tATTR_DB_OPERATION_BATCH_SIZE,\n\tATTR_CLOUDFLARE_D1_RESPONSE_SIZE_AFTER,\n\tATTR_CLOUDFLARE_D1_RESPONSE_ROWS_READ,\n\tATTR_CLOUDFLARE_D1_RESPONSE_ROWS_WRITTEN,\n\tATTR_CLOUDFLARE_D1_RESPONSE_SQL_DURATION_MS,\n\tATTR_CLOUDFLARE_D1_RESPONSE_LAST_ROW_ID,\n\tATTR_CLOUDFLARE_D1_RESPONSE_CHANGED_DB,\n\tATTR_CLOUDFLARE_D1_RESPONSE_CHANGES,\n} from '../constants'\n\nconst dbSystem = 'Cloudflare D1'\n\n// We need to peak into D1 \"internals\" to instrument batch queries\n// See: https://github.com/cloudflare/workerd/blob/5d27f8f7f1f9b584f673d2f11c9032f5a776ec55/src/cloudflare/internal/d1-api.ts#L173\ninterface D1StatementInternals {\n\tstatement: string\n\tparams: unknown[]\n}\n\nfunction metaAttributes(meta: D1Meta): Attributes {\n\treturn {\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_READ]: meta.rows_read,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_ROWS_WRITTEN]: meta.rows_written,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_SQL_DURATION_MS]: meta.duration,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_SIZE_AFTER]: meta.size_after,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_LAST_ROW_ID]: meta.last_row_id,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_CHANGED_DB]: meta.changed_db,\n\t\t[ATTR_CLOUDFLARE_D1_RESPONSE_CHANGES]: meta.changes,\n\t}\n}\nfunction spanOptions(dbName: string, operation: string, sql?: string): SpanOptions {\n\tconst attributes: Attributes = {\n\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'D1',\n\t\t[SemanticAttributes.DB_NAME]: dbName,\n\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t}\n\tif (sql) {\n\t\tattributes[ATTR_DB_QUERY_TEXT] = sql\n\t}\n\treturn {\n\t\tkind: SpanKind.CLIENT,\n\t\tattributes,\n\t}\n}\n\nfunction instrumentD1StatementFn(fn: Function, dbName: string, operation: string, sql: string) {\n\tconst tracer = trace.getTracer('D1')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tif (operation === 'bind') {\n\t\t\t\tconst newStmt = Reflect.apply(target, thisArg, argArray) as D1PreparedStatement\n\t\t\t\treturn instrumentD1PreparedStatement(newStmt, dbName, sql)\n\t\t\t}\n\n\t\t\tconst options = spanOptions(dbName, operation, sql)\n\t\t\treturn tracer.startActiveSpan(`${dbName} ${operation}`, options, async (span) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\t\tif (operation === 'all' || operation === 'run') {\n\t\t\t\t\t\tspan.setAttributes(metaAttributes((result as D1Result).meta))\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\treturn result\n\t\t\t\t} catch (error) {\n\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\tthrow error\n\t\t\t\t} finally {\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nfunction instrumentD1PreparedStatement(\n\tstmt: D1PreparedStatement,\n\tdbName: string,\n\tstatement: string,\n): D1PreparedStatement {\n\tconst statementHandler: ProxyHandler<D1PreparedStatement> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\tif (typeof fn === 'function') {\n\t\t\t\treturn instrumentD1StatementFn(fn, dbName, operation, statement)\n\t\t\t}\n\t\t\treturn fn\n\t\t},\n\t}\n\treturn wrap(stmt, statementHandler)\n}\n\nexport function instrumentD1Fn(fn: Function, dbName: string, operation: string) {\n\tconst tracer = trace.getTracer('D1')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tif (operation === 'prepare') {\n\t\t\t\tconst sql = argArray[0] as string\n\t\t\t\tconst stmt = Reflect.apply(target, thisArg, argArray) as D1PreparedStatement\n\t\t\t\treturn instrumentD1PreparedStatement(stmt, dbName, sql)\n\t\t\t} else if (operation === 'exec') {\n\t\t\t\tconst sql = argArray[0] as string\n\t\t\t\tconst options = spanOptions(dbName, operation, sql)\n\t\t\t\treturn tracer.startActiveSpan(`${dbName} ${operation}`, options, async (span) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else if (operation === 'batch') {\n\t\t\t\t// Create span for each statement, requires peeaking into D1 internals ...\n\t\t\t\tconst statements = argArray[0] as D1StatementInternals[]\n\t\t\t\treturn tracer.startActiveSpan(`${dbName} ${operation}`, async (span) => {\n\t\t\t\t\t// Add batch size attribute\n\t\t\t\t\tspan.setAttribute(ATTR_DB_OPERATION_BATCH_SIZE, statements.length)\n\n\t\t\t\t\t// Create a span per query in the batch\n\t\t\t\t\tconst subSpans = statements.map((s) =>\n\t\t\t\t\t\ttracer.startSpan(`${dbName} ${operation} > query`, spanOptions(dbName, operation, s.statement)),\n\t\t\t\t\t)\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as D1Result[]\n\t\t\t\t\t\tresult.forEach((r, i) => subSpans[i]?.setAttributes(metaAttributes(r.meta)))\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tsubSpans.forEach((s) => s.end())\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\treturn Reflect.apply(target, thisArg, argArray)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentD1(database: D1Database, dbName: string): D1Database {\n\tconst dbHandler: ProxyHandler<D1Database> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\tif (typeof fn === 'function') {\n\t\t\t\treturn instrumentD1Fn(fn, dbName, operation)\n\t\t\t}\n\t\t\treturn fn\n\t\t},\n\t}\n\treturn wrap(database, dbHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { wrap } from '../wrap'\n\ntype ExtraAttributeFn = (argArray: any[], result: any) => Attributes\n\nconst dbSystem = 'Cloudflare Analytics Engine'\n\nconst AEAttributes: Record<string | symbol, ExtraAttributeFn> = {\n\twriteDataPoint(argArray) {\n\t\tconst attrs: Attributes = {}\n\t\tconst opts = argArray[0]\n\t\tif (typeof opts === 'object') {\n\t\t\tattrs['db.cf.ae.indexes'] = opts.indexes.length\n\t\t\tattrs['db.cf.ae.index'] = (opts.indexes[0] as ArrayBuffer | string).toString()\n\t\t\tattrs['db.cf.ae.doubles'] = opts.doubles.length\n\t\t\tattrs['db.cf.ae.blobs'] = opts.blobs.length\n\t\t}\n\t\treturn attrs\n\t},\n}\n\nfunction instrumentAEFn(fn: Function, name: string, operation: string) {\n\tconst tracer = trace.getTracer('AnalyticsEngine')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\tbinding_type: 'AnalyticsEngine',\n\t\t\t\t[SemanticAttributes.DB_NAME]: name,\n\t\t\t\t[SemanticAttributes.DB_SYSTEM]: dbSystem,\n\t\t\t\t[SemanticAttributes.DB_OPERATION]: operation,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Analytics Engine ${name} ${operation}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tconst extraAttrsFn = AEAttributes[operation]\n\t\t\t\tconst extraAttrs = extraAttrsFn ? extraAttrsFn(argArray, result) : {}\n\t\t\t\tspan.setAttributes(extraAttrs)\n\t\t\t\tspan.setAttribute(SemanticAttributes.DB_STATEMENT, `${operation} ${argArray[0]}`)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentAnalyticsEngineDataset(\n\tdataset: AnalyticsEngineDataset,\n\tname: string,\n): AnalyticsEngineDataset {\n\tconst datasetHandler: ProxyHandler<AnalyticsEngineDataset> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\t\t\treturn instrumentAEFn(fn, name, operation)\n\t\t},\n\t}\n\treturn wrap(dataset, datasetHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_DB_QUERY_TEXT,\n\tATTR_CLOUDFLARE_R2_QUERY_KEY,\n\tATTR_CLOUDFLARE_R2_QUERY_PREFIX,\n\tATTR_CLOUDFLARE_R2_QUERY_LIMIT,\n\tATTR_CLOUDFLARE_R2_QUERY_DELIMITER,\n\tATTR_CLOUDFLARE_R2_QUERY_START_AFTER,\n\tATTR_CLOUDFLARE_R2_QUERY_INCLUDE,\n\tATTR_CLOUDFLARE_R2_QUERY_OFFSET,\n\tATTR_CLOUDFLARE_R2_QUERY_LENGTH,\n\tATTR_CLOUDFLARE_R2_QUERY_SUFFIX,\n\tATTR_CLOUDFLARE_R2_QUERY_ONLY_IF,\n\tATTR_CLOUDFLARE_R2_PUT_HTTP_METADATA,\n\tATTR_CLOUDFLARE_R2_PUT_CUSTOM_METADATA,\n\tATTR_CLOUDFLARE_R2_PUT_MD5,\n\tATTR_CLOUDFLARE_R2_PUT_SHA1,\n\tATTR_CLOUDFLARE_R2_PUT_SHA256,\n\tATTR_CLOUDFLARE_R2_PUT_SHA384,\n\tATTR_CLOUDFLARE_R2_PUT_SHA512,\n\tATTR_CLOUDFLARE_R2_PUT_STORAGE_CLASS,\n\tATTR_CLOUDFLARE_R2_RESPONSE_SIZE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_ETAG,\n\tATTR_CLOUDFLARE_R2_RESPONSE_VERSION,\n\tATTR_CLOUDFLARE_R2_RESPONSE_UPLOADED,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_TYPE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_LANGUAGE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_DISPOSITION,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_ENCODING,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_CONTROL,\n\tATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_EXPIRY,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CUSTOM_METADATA_KEYS,\n\tATTR_CLOUDFLARE_R2_RESPONSE_RANGE,\n\tATTR_CLOUDFLARE_R2_RESPONSE_STORAGE_CLASS,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_MD5,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA1,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA256,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA384,\n\tATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA512,\n\tATTR_CLOUDFLARE_R2_LIST_TRUNCATED,\n\tATTR_CLOUDFLARE_R2_LIST_OBJECTS_COUNT,\n\tATTR_CLOUDFLARE_R2_LIST_DELIMITED_PREFIXES_COUNT,\n\tATTR_CLOUDFLARE_R2_LIST_CURSOR,\n\tATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID,\n} from '../constants'\n\nconst dbSystem = 'Cloudflare R2'\n\n// Helper to add object metadata attributes\nfunction addObjectMetadata(attrs: Attributes, obj: R2Object | R2ObjectBody | null): void {\n\tif (!obj) return\n\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_SIZE] = obj.size\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_ETAG] = obj.etag\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_VERSION] = obj.version\n\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_UPLOADED] = obj.uploaded.toISOString()\n\n\t// HTTP Metadata\n\tif (obj.httpMetadata) {\n\t\tif (obj.httpMetadata.contentType) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_TYPE] = obj.httpMetadata.contentType\n\t\t}\n\t\tif (obj.httpMetadata.contentLanguage) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_LANGUAGE] = obj.httpMetadata.contentLanguage\n\t\t}\n\t\tif (obj.httpMetadata.contentDisposition) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_DISPOSITION] = obj.httpMetadata.contentDisposition\n\t\t}\n\t\tif (obj.httpMetadata.contentEncoding) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CONTENT_ENCODING] = obj.httpMetadata.contentEncoding\n\t\t}\n\t\tif (obj.httpMetadata.cacheControl) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_CONTROL] = obj.httpMetadata.cacheControl\n\t\t}\n\t\tif (obj.httpMetadata.cacheExpiry) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_HTTP_METADATA_CACHE_EXPIRY] = obj.httpMetadata.cacheExpiry.toISOString()\n\t\t}\n\t}\n\n\t// Custom Metadata\n\tif (obj.customMetadata && Object.keys(obj.customMetadata).length > 0) {\n\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CUSTOM_METADATA_KEYS] = Object.keys(obj.customMetadata).join(',')\n\t}\n\n\t// Range\n\tif (obj.range) {\n\t\tif ('offset' in obj.range && 'length' in obj.range) {\n\t\t\tconst offset = obj.range.offset ?? 0\n\t\t\tconst length = obj.range.length ?? 0\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_RANGE] = `${offset}-${offset + length - 1}`\n\t\t} else if ('suffix' in obj.range) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_RANGE] = `suffix-${obj.range.suffix}`\n\t\t}\n\t}\n\n\t// Storage Class\n\tif (obj.storageClass) {\n\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_STORAGE_CLASS] = obj.storageClass\n\t}\n\n\t// Checksums\n\tif (obj.checksums) {\n\t\tif (obj.checksums.md5) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_MD5] = Array.from(new Uint8Array(obj.checksums.md5))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha1) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA1] = Array.from(new Uint8Array(obj.checksums.sha1))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha256) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA256] = Array.from(new Uint8Array(obj.checksums.sha256))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha384) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA384] = Array.from(new Uint8Array(obj.checksums.sha384))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t\tif (obj.checksums.sha512) {\n\t\t\tattrs[ATTR_CLOUDFLARE_R2_RESPONSE_CHECKSUMS_SHA512] = Array.from(new Uint8Array(obj.checksums.sha512))\n\t\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t\t.join('')\n\t\t}\n\t}\n}\n\n// HEAD operation\nfunction instrumentHead(fn: R2Bucket['head'], name: string): R2Bucket['head'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['head']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'head',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} head`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2Object | null\n\t\t\t\taddObjectMetadata(attributes, result)\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// GET operation\nfunction instrumentGet(fn: R2Bucket['get'], name: string): R2Bucket['get'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['get']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst getOptions = argArray[1] as R2GetOptions | undefined\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'get',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\n\t\t\t// Capture get options\n\t\t\tif (getOptions) {\n\t\t\t\tif (getOptions.range) {\n\t\t\t\t\tif ('offset' in getOptions.range) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_OFFSET] = getOptions.range.offset\n\t\t\t\t\t\tif ('length' in getOptions.range) {\n\t\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_LENGTH] = getOptions.range.length\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ('suffix' in getOptions.range) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_SUFFIX] = getOptions.range.suffix\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (getOptions.onlyIf) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_ONLY_IF] = JSON.stringify(getOptions.onlyIf)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} get`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2ObjectBody | null\n\t\t\t\taddObjectMetadata(attributes, result)\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// PUT operation\nfunction instrumentPut(fn: R2Bucket['put'], name: string): R2Bucket['put'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['put']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst putOptions = argArray[2] as R2PutOptions | undefined\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'put',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\n\t\t\t// Capture put options\n\t\t\tif (putOptions) {\n\t\t\t\tif (putOptions.httpMetadata) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_HTTP_METADATA] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.customMetadata) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_CUSTOM_METADATA] = Object.keys(putOptions.customMetadata).join(',')\n\t\t\t\t}\n\t\t\t\tif (putOptions.md5) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_MD5] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha1) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA1] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha256) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA256] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha384) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA384] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.sha512) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_SHA512] = true\n\t\t\t\t}\n\t\t\t\tif (putOptions.storageClass) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_PUT_STORAGE_CLASS] = putOptions.storageClass\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} put`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2Object\n\t\t\t\taddObjectMetadata(attributes, result)\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// DELETE operation\nfunction instrumentDelete(fn: R2Bucket['delete'], name: string): R2Bucket['delete'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['delete']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst keys = argArray[0] as string | string[]\n\t\t\tconst isArray = Array.isArray(keys)\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'delete',\n\t\t\t}\n\n\t\t\tif (isArray) {\n\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\tattributes[ATTR_DB_QUERY_TEXT] = keys[0]\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_KEY] = keys[0]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattributes[ATTR_DB_QUERY_TEXT] = keys\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_KEY] = keys\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} delete`, options, async (span) => {\n\t\t\t\tawait Reflect.apply(target, thisArg, argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// LIST operation\nfunction instrumentList(fn: R2Bucket['list'], name: string): R2Bucket['list'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['list']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst listOptions = argArray[0] as R2ListOptions | undefined\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'list',\n\t\t\t}\n\n\t\t\t// Capture list options\n\t\t\tif (listOptions) {\n\t\t\t\tif (listOptions.prefix) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_PREFIX] = listOptions.prefix\n\t\t\t\t}\n\t\t\t\tif (listOptions.limit) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_LIMIT] = listOptions.limit\n\t\t\t\t}\n\t\t\t\tif (listOptions.delimiter) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_DELIMITER] = listOptions.delimiter\n\t\t\t\t}\n\t\t\t\tif (listOptions.startAfter) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_START_AFTER] = listOptions.startAfter\n\t\t\t\t}\n\t\t\t\tif (listOptions.include) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_QUERY_INCLUDE] = listOptions.include.join(',')\n\t\t\t\t}\n\t\t\t\tif (listOptions.cursor) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_CURSOR] = listOptions.cursor\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} list`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2Objects\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_TRUNCATED] = result.truncated\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_OBJECTS_COUNT] = result.objects.length\n\t\t\t\tif (result.delimitedPrefixes) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_DELIMITED_PREFIXES_COUNT] = result.delimitedPrefixes.length\n\t\t\t\t}\n\t\t\t\tif (result.truncated && 'cursor' in result && result.cursor) {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_LIST_CURSOR] = result.cursor\n\t\t\t\t}\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// CREATE MULTIPART UPLOAD operation\nfunction instrumentCreateMultipartUpload(\n\tfn: R2Bucket['createMultipartUpload'],\n\tname: string,\n): R2Bucket['createMultipartUpload'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['createMultipartUpload']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'createMultipartUpload',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} createMultipartUpload`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2MultipartUpload\n\t\t\t\tattributes[ATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID] = result.uploadId\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// RESUME MULTIPART UPLOAD operation\nfunction instrumentResumeMultipartUpload(\n\tfn: R2Bucket['resumeMultipartUpload'],\n\tname: string,\n): R2Bucket['resumeMultipartUpload'] {\n\tconst tracer = trace.getTracer('r2')\n\tconst handler: ProxyHandler<R2Bucket['resumeMultipartUpload']> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst uploadId = argArray[1] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'R2',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: 'resumeMultipartUpload',\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_QUERY_KEY]: key,\n\t\t\t\t[ATTR_CLOUDFLARE_R2_MULTIPART_UPLOAD_ID]: uploadId,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`R2 ${name} resumeMultipartUpload`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as R2MultipartUpload\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentR2Bucket(bucket: R2Bucket, name: string): R2Bucket {\n\tconst bucketHandler: ProxyHandler<R2Bucket> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Don't instrument non-function properties\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (operation) {\n\t\t\t\tcase 'head':\n\t\t\t\t\treturn instrumentHead(fn, name)\n\t\t\t\tcase 'get':\n\t\t\t\t\treturn instrumentGet(fn, name)\n\t\t\t\tcase 'put':\n\t\t\t\t\treturn instrumentPut(fn, name)\n\t\t\t\tcase 'delete':\n\t\t\t\t\treturn instrumentDelete(fn, name)\n\t\t\t\tcase 'list':\n\t\t\t\t\treturn instrumentList(fn, name)\n\t\t\t\tcase 'createMultipartUpload':\n\t\t\t\t\treturn instrumentCreateMultipartUpload(fn, name)\n\t\t\t\tcase 'resumeMultipartUpload':\n\t\t\t\t\treturn instrumentResumeMultipartUpload(fn, name)\n\t\t\t\tdefault:\n\t\t\t\t\t// Don't instrument unknown methods\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(bucket, bucketHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_CLOUDFLARE_IMAGES_KEY,\n\tATTR_CLOUDFLARE_IMAGES_VARIANTS_COUNT,\n\tATTR_CLOUDFLARE_IMAGES_UPLOADED,\n\tATTR_CLOUDFLARE_IMAGES_RESPONSE_ID,\n\tATTR_CLOUDFLARE_IMAGES_RESPONSE_FILENAME,\n\tATTR_CLOUDFLARE_IMAGES_METADATA_KEYS,\n\tATTR_CLOUDFLARE_IMAGES_REQUIRE_SIGNED_URLS,\n} from '../constants'\n\n// Note: Since Images binding isn't in @cloudflare/workers-types yet,\n// we'll use generic types and duck-typing detection\ntype ImagesBinding = {\n\tget: (key: string) => Promise<unknown>\n\tlist: (options?: unknown) => Promise<unknown>\n\tdelete: (key: string) => Promise<void>\n\t[key: string]: unknown\n}\n\n// Instrument GET operation\nfunction instrumentImagesGet(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('images')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'Images',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_CLOUDFLARE_IMAGES_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Images ${name} get`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as any\n\n\t\t\t\t// Add response metadata if available\n\t\t\t\tif (result && typeof result === 'object') {\n\t\t\t\t\tif (result.id) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_RESPONSE_ID] = result.id\n\t\t\t\t\t}\n\t\t\t\t\tif (result.filename) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_RESPONSE_FILENAME] = result.filename\n\t\t\t\t\t}\n\t\t\t\t\tif (result.uploaded) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_UPLOADED] = result.uploaded\n\t\t\t\t\t}\n\t\t\t\t\tif (result.metadata && typeof result.metadata === 'object') {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_METADATA_KEYS] = Object.keys(result.metadata).join(',')\n\t\t\t\t\t}\n\t\t\t\t\tif (result.variants && Array.isArray(result.variants)) {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_VARIANTS_COUNT] = result.variants.length\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof result.requireSignedURLs === 'boolean') {\n\t\t\t\t\t\tattributes[ATTR_CLOUDFLARE_IMAGES_REQUIRE_SIGNED_URLS] = result.requireSignedURLs\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// Instrument LIST operation\nfunction instrumentImagesList(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('images')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'Images',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Images ${name} list`, options, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as any\n\n\t\t\t\t// Add count of images returned\n\t\t\t\tif (result && typeof result === 'object' && Array.isArray(result.images)) {\n\t\t\t\t\tspan.setAttribute('cloudflare.images.list.count', result.images.length)\n\t\t\t\t}\n\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\n// Instrument DELETE operation\nfunction instrumentImagesDelete(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('images')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst key = argArray[0] as string\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'Images',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_CLOUDFLARE_IMAGES_KEY]: key,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Images ${name} delete`, options, async (span) => {\n\t\t\t\tawait Reflect.apply(target, thisArg, argArray)\n\t\t\t\tspan.end()\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentImagesBinding(images: ImagesBinding, name: string): ImagesBinding {\n\tconst imagesHandler: ProxyHandler<ImagesBinding> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Don't instrument non-function properties\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (String(prop)) {\n\t\t\t\tcase 'get':\n\t\t\t\t\treturn instrumentImagesGet(fn, name)\n\t\t\t\tcase 'list':\n\t\t\t\t\treturn instrumentImagesList(fn, name)\n\t\t\t\tcase 'delete':\n\t\t\t\t\treturn instrumentImagesDelete(fn, name)\n\t\t\t\tdefault:\n\t\t\t\t\t// Don't instrument unknown methods\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(images, imagesHandler)\n}\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport {\n\tATTR_CLOUDFLARE_BINDING_TYPE,\n\tATTR_CLOUDFLARE_BINDING_NAME,\n\tATTR_CLOUDFLARE_RATE_LIMIT_KEY,\n\tATTR_CLOUDFLARE_RATE_LIMIT_ALLOWED,\n\tATTR_CLOUDFLARE_RATE_LIMIT_SUCCESS,\n} from '../constants'\n\n// Note: Rate Limiting binding types - using duck typing since not in @cloudflare/workers-types\ntype RateLimitBinding = {\n\tlimit: (options: { key: string }) => Promise<{ success: boolean }>\n\t[key: string]: unknown\n}\n\n// Instrument LIMIT operation\nfunction instrumentRateLimitLimit(fn: Function, name: string): Function {\n\tconst tracer = trace.getTracer('rate_limit')\n\tconst handler: ProxyHandler<Function> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst options = argArray[0] as { key: string }\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_TYPE]: 'RateLimit',\n\t\t\t\t[ATTR_CLOUDFLARE_BINDING_NAME]: name,\n\t\t\t\t[ATTR_CLOUDFLARE_RATE_LIMIT_KEY]: options.key,\n\t\t\t}\n\t\t\tconst spanOptions: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`RateLimit ${name} limit`, spanOptions, async (span) => {\n\t\t\t\tconst result = (await Reflect.apply(target, thisArg, argArray)) as { success: boolean }\n\n\t\t\t\t// Add result attributes\n\t\t\t\tif (result && typeof result === 'object') {\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_RATE_LIMIT_SUCCESS] = result.success\n\t\t\t\t\t// Determine if the request was allowed based on success\n\t\t\t\t\tattributes[ATTR_CLOUDFLARE_RATE_LIMIT_ALLOWED] = result.success\n\t\t\t\t}\n\n\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function instrumentRateLimitBinding(rateLimit: RateLimitBinding, name: string): RateLimitBinding {\n\tconst rateLimitHandler: ProxyHandler<RateLimitBinding> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Don't instrument non-function properties\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (String(prop)) {\n\t\t\t\tcase 'limit':\n\t\t\t\t\treturn instrumentRateLimitLimit(fn, name)\n\t\t\t\tdefault:\n\t\t\t\t\t// Don't instrument unknown methods\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(rateLimit, rateLimitHandler)\n}\n","import { isProxyable, wrap } from '../wrap'\nimport { instrumentDOBinding } from './do'\nimport { instrumentKV } from './kv'\nimport { instrumentQueueSender } from './queue'\nimport { instrumentServiceBinding } from './service'\nimport { instrumentD1 } from './d1'\nimport { instrumentAnalyticsEngineDataset } from './analytics-engine'\nimport { instrumentR2Bucket } from './r2'\nimport { instrumentImagesBinding } from './images'\nimport { instrumentRateLimitBinding } from './rate-limit'\n\nconst isJSRPC = (item?: unknown): item is Service => {\n\t// @ts-expect-error The point of RPC types is to block non-existent properties, but that's the goal here\n\treturn !!(item as Service)?.['__some_property_that_will_never_exist' + Math.random()]\n}\n\nconst isKVNamespace = (item?: unknown): item is KVNamespace => {\n\treturn !isJSRPC(item) && !!(item as KVNamespace)?.getWithMetadata\n}\n\nconst isQueue = (item?: unknown): item is Queue<unknown> => {\n\treturn !isJSRPC(item) && !!(item as Queue<unknown>)?.sendBatch\n}\n\nconst isDurableObject = (item?: unknown): item is DurableObjectNamespace => {\n\treturn !isJSRPC(item) && !!(item as DurableObjectNamespace)?.idFromName\n}\n\nexport const isVersionMetadata = (item?: unknown): item is WorkerVersionMetadata => {\n\treturn (\n\t\t!isJSRPC(item) &&\n\t\ttypeof (item as WorkerVersionMetadata)?.id === 'string' &&\n\t\ttypeof (item as WorkerVersionMetadata)?.tag === 'string'\n\t)\n}\n\nconst isAnalyticsEngineDataset = (item?: unknown): item is AnalyticsEngineDataset => {\n\treturn !isJSRPC(item) && !!(item as AnalyticsEngineDataset)?.writeDataPoint\n}\n\nconst isD1Database = (item?: unknown): item is D1Database => {\n\treturn !!(item as D1Database)?.exec && !!(item as D1Database)?.prepare\n}\n\nconst isR2Bucket = (item?: unknown): item is R2Bucket => {\n\treturn !isJSRPC(item) && !!(item as R2Bucket)?.head && !!(item as R2Bucket)?.list\n}\n\nconst isImagesBinding = (item?: unknown): boolean => {\n\t// Images binding detection - has get, list, delete methods\n\t// Note: Using generic detection since Images binding isn't in @cloudflare/workers-types yet\n\tconst obj = item as any\n\treturn (\n\t\t!isJSRPC(item) &&\n\t\ttypeof obj?.get === 'function' &&\n\t\ttypeof obj?.list === 'function' &&\n\t\ttypeof obj?.delete === 'function' &&\n\t\t// Distinguish from other bindings with similar methods\n\t\t!isR2Bucket(item) &&\n\t\t!isKVNamespace(item)\n\t)\n}\n\nconst isRateLimitBinding = (item?: unknown): boolean => {\n\t// Rate Limiting binding detection - has limit method\n\tconst obj = item as any\n\treturn !isJSRPC(item) && typeof obj?.limit === 'function' && !isDurableObject(item)\n}\n\nconst instrumentEnv = <E extends Record<string, unknown>>(env: E): E => {\n\tconst envHandler: ProxyHandler<Record<string, unknown>> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst item = Reflect.get(target, prop, receiver)\n\t\t\tif (!isProxyable(item)) {\n\t\t\t\treturn item\n\t\t\t}\n\t\t\tif (isJSRPC(item)) {\n\t\t\t\treturn instrumentServiceBinding(item, String(prop))\n\t\t\t} else if (isKVNamespace(item)) {\n\t\t\t\treturn instrumentKV(item, String(prop))\n\t\t\t} else if (isQueue(item)) {\n\t\t\t\treturn instrumentQueueSender(item, String(prop))\n\t\t\t} else if (isDurableObject(item)) {\n\t\t\t\treturn instrumentDOBinding(item, String(prop))\n\t\t\t} else if (isVersionMetadata(item)) {\n\t\t\t\t// we do not need to log accesses to the metadata\n\t\t\t\treturn item\n\t\t\t} else if (isAnalyticsEngineDataset(item)) {\n\t\t\t\treturn instrumentAnalyticsEngineDataset(item, String(prop))\n\t\t\t} else if (isD1Database(item)) {\n\t\t\t\treturn instrumentD1(item, String(prop))\n\t\t\t} else if (isR2Bucket(item)) {\n\t\t\t\treturn instrumentR2Bucket(item, String(prop))\n\t\t\t} else if (isImagesBinding(item)) {\n\t\t\t\treturn instrumentImagesBinding(item as any, String(prop))\n\t\t\t} else if (isRateLimitBinding(item)) {\n\t\t\t\treturn instrumentRateLimitBinding(item as any, String(prop))\n\t\t\t} else {\n\t\t\t\treturn item\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(env, envHandler) as E\n}\n\nexport { instrumentEnv }\n","import { Attributes, SpanKind, SpanOptions, trace } from '@opentelemetry/api'\nimport { wrap } from '../wrap'\nimport { Overloads } from './common'\nimport {\n\tATTR_DB_SYSTEM_NAME,\n\tATTR_DB_OPERATION_NAME,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_KEYS,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_START,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_START_AFTER,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_END,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_PREFIX,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_REVERSE,\n\tATTR_CLOUDFLARE_DO_KV_QUERY_LIMIT,\n\tATTR_CLOUDFLARE_DO_KV_RESPONSE_DELETED_COUNT,\n\tATTR_CLOUDFLARE_DO_ALLOW_CONCURRENCY,\n\tATTR_CLOUDFLARE_DO_ALLOW_UNCONFIRMED,\n\tATTR_CLOUDFLARE_DO_NO_CACHE,\n\tATTR_CLOUDFLARE_DO_SQL_QUERY_BINDINGS,\n\tATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_READ,\n\tATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_WRITTEN,\n\tATTR_DB_QUERY_TEXT,\n} from '../constants'\n\ntype ExtraAttributeFn = (argArray: any[], result: any) => Attributes\n\nconst dbSystem = 'Cloudflare DO'\n\ntype DurableObjectCommonOptions = Pick<DurableObjectPutOptions, 'allowConcurrency' | 'allowUnconfirmed' | 'noCache'>\nfunction isDurableObjectCommonOptions(options: any): options is DurableObjectCommonOptions {\n\treturn (\n\t\ttypeof options === 'object' &&\n\t\t('allowConcurrency' in options || 'allowUnconfirmed' in options || 'noCache' in options)\n\t)\n}\n\n/** Applies attributes for common Durable Objects options:\n * `allowConcurrency`, `allowUnconfirmed`, and `noCache`\n */\nfunction applyOptionsAttributes(attrs: Attributes, options: DurableObjectCommonOptions) {\n\tif ('allowConcurrency' in options) {\n\t\tattrs[ATTR_CLOUDFLARE_DO_ALLOW_CONCURRENCY] = options.allowConcurrency\n\t}\n\tif ('allowUnconfirmed' in options) {\n\t\tattrs[ATTR_CLOUDFLARE_DO_ALLOW_UNCONFIRMED] = options.allowUnconfirmed\n\t}\n\tif ('noCache' in options) {\n\t\tattrs[ATTR_CLOUDFLARE_DO_NO_CACHE] = options.noCache\n\t}\n}\n\nconst StorageAttributes: Record<string | symbol, ExtraAttributeFn> = {\n\tdelete(argArray, result: Awaited<ReturnType<Overloads<DurableObjectStorage['delete']>>>) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['delete']>>\n\t\tlet attrs: Attributes = {}\n\t\tif (Array.isArray(args[0])) {\n\t\t\tconst keys = args[0]\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: keys[0],\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT]: keys.length,\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_RESPONSE_DELETED_COUNT]: result,\n\t\t\t}\n\t\t} else {\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: args[0],\n\t\t\t}\n\t\t}\n\t\tif (args[1]) {\n\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t}\n\t\treturn attrs\n\t},\n\tdeleteAll(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['deleteAll']>>\n\t\tlet attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tapplyOptionsAttributes(attrs, args[0])\n\t\t}\n\t\treturn attrs\n\t},\n\tget(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['get']>>\n\t\tlet attrs: Attributes = {}\n\t\tif (Array.isArray(args[0])) {\n\t\t\tconst keys = args[0]\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: keys[0],\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT]: keys.length,\n\t\t\t}\n\t\t} else {\n\t\t\tattrs = {\n\t\t\t\t[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS]: args[0],\n\t\t\t}\n\t\t}\n\t\tif (args[1]) {\n\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t}\n\t\treturn attrs\n\t},\n\tlist(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['list']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tconst options = args[0]\n\t\t\tapplyOptionsAttributes(attrs, options)\n\t\t\tif ('start' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_START] = options.start\n\t\t\t}\n\t\t\tif ('startAfter' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_START_AFTER] = options.startAfter\n\t\t\t}\n\t\t\tif ('end' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_END] = options.end\n\t\t\t}\n\t\t\tif ('prefix' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_PREFIX] = options.prefix\n\t\t\t}\n\t\t\tif ('reverse' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_REVERSE] = options.reverse\n\t\t\t}\n\t\t\tif ('limit' in options) {\n\t\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_LIMIT] = options.limit\n\t\t\t}\n\t\t}\n\t\treturn attrs\n\t},\n\tput(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['put']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (typeof args[0] === 'string') {\n\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS] = args[0]\n\t\t\tif (args[2]) {\n\t\t\t\tapplyOptionsAttributes(attrs, args[2])\n\t\t\t}\n\t\t} else {\n\t\t\tconst keys = Object.keys(args[0])\n\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS] = keys[0]\n\t\t\tattrs[ATTR_CLOUDFLARE_DO_KV_QUERY_KEYS_COUNT] = keys.length\n\t\t\tif (isDurableObjectCommonOptions(args[1])) {\n\t\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t\t}\n\t\t}\n\t\treturn attrs\n\t},\n\tgetAlarm(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['getAlarm']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tapplyOptionsAttributes(attrs, args[0])\n\t\t}\n\t\treturn attrs\n\t},\n\tsetAlarm(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['setAlarm']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0] instanceof Date) {\n\t\t\tattrs['db.cf.do.alarm_time'] = args[0].getTime()\n\t\t} else {\n\t\t\tattrs['db.cf.do.alarm_time'] = args[0]\n\t\t}\n\t\tif (args[1]) {\n\t\t\tapplyOptionsAttributes(attrs, args[1])\n\t\t}\n\t\treturn attrs\n\t},\n\tdeleteAlarm(argArray) {\n\t\tconst args = argArray as Parameters<Overloads<DurableObjectStorage['deleteAlarm']>>\n\t\tconst attrs: Attributes = {}\n\t\tif (args[0]) {\n\t\t\tapplyOptionsAttributes(attrs, args[0])\n\t\t}\n\t\treturn attrs\n\t},\n}\n\nfunction instrumentStorageFn(fn: Function, operation: string) {\n\tconst tracer = trace.getTracer('do_storage')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t\t\t}\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Durable Object Storage ${operation}`, options, async (span) => {\n\t\t\t\tconst result = await Reflect.apply(target, thisArg, argArray)\n\t\t\t\tconst extraAttrsFn = StorageAttributes[operation]\n\t\t\t\tconst extraAttrs = extraAttrsFn ? extraAttrsFn(argArray, result) : {}\n\t\t\t\tspan.setAttributes(extraAttrs)\n\t\t\t\tspan.end()\n\t\t\t\treturn result\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nexport function instrumentStorage(storage: DurableObjectStorage): DurableObjectStorage {\n\tconst storageHandler: ProxyHandler<DurableObjectStorage> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst operation = String(prop)\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\t// Check if this is the sql property (DurableObjectStorage.sql)\n\t\t\tif (prop === 'sql' && typeof fn === 'object' && fn !== null) {\n\t\t\t\treturn instrumentSQLStorage(fn as SqlStorage)\n\t\t\t}\n\n\t\t\treturn instrumentStorageFn(fn, operation)\n\t\t},\n\t}\n\treturn wrap(storage, storageHandler)\n}\n\n// SQL Storage API Instrumentation\ntype SQLStorageCursor = {\n\trowsRead: number\n\trowsWritten: number\n\t[Symbol.iterator](): IterableIterator<any>\n\ttoArray(): any[]\n\tone(): any\n\tnext(): { done?: boolean; value?: any }\n}\n\nfunction instrumentSQLStorageExec(fn: SqlStorage['exec'], operation: string): SqlStorage['exec'] {\n\tconst tracer = trace.getTracer('do_sql_storage')\n\tconst fnHandler: ProxyHandler<any> = {\n\t\tapply: (target, thisArg, argArray) => {\n\t\t\tconst query = argArray[0] as string\n\t\t\tconst bindings = argArray.slice(1) as unknown[]\n\n\t\t\tconst attributes: Attributes = {\n\t\t\t\t[ATTR_DB_SYSTEM_NAME]: dbSystem,\n\t\t\t\t[ATTR_DB_OPERATION_NAME]: operation,\n\t\t\t\t[ATTR_DB_QUERY_TEXT]: query,\n\t\t\t}\n\n\t\t\tif (bindings && bindings.length > 0) {\n\t\t\t\tattributes[ATTR_CLOUDFLARE_DO_SQL_QUERY_BINDINGS] = bindings.length\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\t\t\treturn tracer.startActiveSpan(`Durable Object SQL ${operation}`, options, (span) => {\n\t\t\t\tconst cursor = Reflect.apply(target, thisArg, argArray) as SQLStorageCursor\n\t\t\t\tlet spanEnded = false\n\n\t\t\t\tconst endSpanWithMetrics = () => {\n\t\t\t\t\tif (spanEnded) return\n\t\t\t\t\tspanEnded = true\n\n\t\t\t\t\t// Capture metrics from cursor\n\t\t\t\t\tif (typeof cursor.rowsRead === 'number') {\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_READ, cursor.rowsRead)\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof cursor.rowsWritten === 'number') {\n\t\t\t\t\t\tspan.setAttribute(ATTR_CLOUDFLARE_DO_SQL_RESPONSE_ROWS_WRITTEN, cursor.rowsWritten)\n\t\t\t\t\t}\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\n\t\t\t\t// For DDL statements (CREATE, DROP, ALTER) and multi-statement queries that aren't typically iterated,\n\t\t\t\t// end the span immediately after capturing available metrics\n\t\t\t\t// This handles cases like: ctx.storage.sql.exec('CREATE TABLE ...')\n\t\t\t\t// We use a microtask to allow synchronous property access to complete first\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!spanEnded) {\n\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Wrap the cursor to intercept iteration methods\n\t\t\t\tconst wrappedCursor = new Proxy(cursor, {\n\t\t\t\t\tget(target, prop, receiver) {\n\t\t\t\t\t\tconst value = Reflect.get(target, prop, receiver)\n\n\t\t\t\t\t\t// Intercept methods that consume the cursor\n\t\t\t\t\t\tif (prop === 'toArray') {\n\t\t\t\t\t\t\treturn function (this: any, ...args: any[]) {\n\t\t\t\t\t\t\t\tconst result = typeof value === 'function' ? value.apply(target, args) : value\n\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (prop === 'one') {\n\t\t\t\t\t\t\treturn function (this: any, ...args: any[]) {\n\t\t\t\t\t\t\t\tconst result = typeof value === 'function' ? value.apply(target, args) : value\n\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Intercept Symbol.iterator (used by spread operator and for-of)\n\t\t\t\t\t\tif (prop === Symbol.iterator) {\n\t\t\t\t\t\t\treturn function (this: any) {\n\t\t\t\t\t\t\t\tconst iterator = (typeof value === 'function' ? value.apply(target) : value) as Iterator<any>\n\t\t\t\t\t\t\t\tlet iterationComplete = false\n\n\t\t\t\t\t\t\t\t// Wrap the iterator to detect when iteration completes\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tnext() {\n\t\t\t\t\t\t\t\t\t\tconst result = iterator.next()\n\t\t\t\t\t\t\t\t\t\tif (result.done && !iterationComplete) {\n\t\t\t\t\t\t\t\t\t\t\titerationComplete = true\n\t\t\t\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t[Symbol.iterator]() {\n\t\t\t\t\t\t\t\t\t\treturn this\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Intercept next() for manual iteration\n\t\t\t\t\t\tif (prop === 'next') {\n\t\t\t\t\t\t\treturn function (this: any, ...args: any[]) {\n\t\t\t\t\t\t\t\tconst result = typeof value === 'function' ? value.apply(target, args) : value\n\t\t\t\t\t\t\t\tif (result && result.done) {\n\t\t\t\t\t\t\t\t\tendSpanWithMetrics()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn typeof value === 'function' ? value.bind(target) : value\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\treturn wrappedCursor\n\t\t\t})\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nfunction instrumentSQLStorage(sql: SqlStorage): SqlStorage {\n\tconst sqlHandler: ProxyHandler<SqlStorage> = {\n\t\tget: (target, prop, receiver) => {\n\t\t\tconst fn = Reflect.get(target, prop, receiver)\n\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn fn\n\t\t\t}\n\n\t\t\tswitch (prop) {\n\t\t\t\tcase 'exec':\n\t\t\t\t\treturn instrumentSQLStorageExec(fn, 'exec')\n\t\t\t\tdefault:\n\t\t\t\t\treturn fn\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(sql, sqlHandler)\n}\n","import { context as api_context, propagation, Context } from '@opentelemetry/api'\n\n/**\n * Magic symbol to identify RPC context carrier objects\n * This helps us distinguish our injected context from user arguments\n */\nconst RPC_CONTEXT_MARKER = '__otel_rpc_ctx__'\n\n/**\n * RPC Context Carrier\n * A plain object that can be serialized and passed through RPC calls\n */\nexport interface RpcContextCarrier {\n\t[RPC_CONTEXT_MARKER]: true\n\theaders: Record<string, string>\n\t// Metadata about the RPC call\n\tdoName?: string // DO name if available (from id.name)\n}\n\n/**\n * Check if an object is an RPC context carrier\n */\nexport function isRpcContextCarrier(obj: unknown): obj is RpcContextCarrier {\n\treturn typeof obj === 'object' && obj !== null && RPC_CONTEXT_MARKER in obj && obj[RPC_CONTEXT_MARKER] === true\n}\n\n/**\n * Inject the current trace context into an RPC context carrier\n * This serializes the active context into a plain object that can be\n * passed as an argument through RPC calls\n */\nexport function injectRpcContext(ctx: Context = api_context.active(), doName?: string): RpcContextCarrier {\n\tconst carrier: RpcContextCarrier = {\n\t\t[RPC_CONTEXT_MARKER]: true,\n\t\theaders: {},\n\t}\n\n\t// Add DO name if provided\n\tif (doName) {\n\t\tcarrier.doName = doName\n\t}\n\n\t// Use OpenTelemetry's propagation API to inject context into headers\n\tpropagation.inject(ctx, carrier.headers, {\n\t\tset: (headers, key, value) => {\n\t\t\theaders[key] = typeof value === 'string' ? value : String(value)\n\t\t},\n\t})\n\n\treturn carrier\n}\n\n/**\n * Extract trace context from an RPC context carrier\n * This deserializes the context from the carrier object back into\n * an OpenTelemetry Context that can be used as a parent span\n */\nexport function extractRpcContext(carrier: RpcContextCarrier): Context {\n\treturn propagation.extract(api_context.active(), carrier.headers, {\n\t\tget(headers, key) {\n\t\t\treturn headers[key] || undefined\n\t\t},\n\t\tkeys(headers) {\n\t\t\treturn Object.keys(headers)\n\t\t},\n\t})\n}\n\n/**\n * Remove RPC context carrier from arguments array if present\n * Returns a tuple of [extracted context or undefined, cleaned args]\n */\nexport function extractAndRemoveRpcContext(args: unknown[]): [Context | undefined, unknown[]] {\n\tif (args.length > 0 && isRpcContextCarrier(args[0])) {\n\t\tconst carrier = args[0]\n\t\tconst extractedContext = extractRpcContext(carrier)\n\t\tconst cleanedArgs = args.slice(1)\n\t\treturn [extractedContext, cleanedArgs]\n\t}\n\treturn [undefined, args]\n}\n","import { context as api_context, trace, SpanOptions, SpanKind, Exception, SpanStatusCode } from '@opentelemetry/api'\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions'\nimport { passthroughGet, unwrap, wrap } from '../wrap'\nimport {\n\tgetParentContextFromHeaders,\n\tgatherIncomingCfAttributes,\n\tgatherRequestAttributes,\n\tgatherResponseAttributes,\n\tinstrumentClientFetch,\n} from './fetch'\nimport { instrumentEnv } from './env'\nimport { getActiveConfig, Initialiser, setConfig } from '../config'\nimport { instrumentStorage } from './do-storage'\nimport { DOConstructorTrigger } from '../types'\nimport { ATTR_CLOUDFLARE_JSRPC_METHOD, ATTR_RPC_SYSTEM, ATTR_RPC_SERVICE, ATTR_RPC_METHOD } from '../constants'\nimport { injectRpcContext, extractAndRemoveRpcContext } from './rpc-context'\n\nimport { DurableObject as DurableObjectClass } from 'cloudflare:workers'\n\ntype DO = DurableObject | DurableObjectClass\ntype FetchFn = DurableObject['fetch']\ntype AlarmFn = DurableObject['alarm']\ntype Env = Record<string, unknown>\n\nexport interface InstrumentOptions extends Omit<SpanOptions, 'kind'> {\n\t// Any standard SpanOptions (attributes, links, etc.)\n}\n\nexport type InstrumentMethod = {\n\t<T>(name: string, fn: () => Promise<T>): Promise<T>\n\t<T>(name: string, options: InstrumentOptions, fn: () => Promise<T>): Promise<T>\n}\n\n/**\n * Base class for instrumented Durable Objects with TypeScript support for injected methods.\n * Extend this instead of DurableObject to automatically get typing for `this.instrument()`.\n *\n * @example\n * ```typescript\n * import { InstrumentedDurableObject } from '@inference-net/otel-cf-workers'\n *\n * export class MyDO extends InstrumentedDurableObject<Env> {\n * async someMethod() {\n * // this.instrument is available with full TypeScript support!\n * await this.instrument('custom-operation', async () => {\n * // Your code here\n * })\n * }\n * }\n * ```\n */\nexport class InstrumentedDurableObject<Env = unknown> extends DurableObjectClass<Env> {\n\tdeclare instrument: InstrumentMethod\n}\n\nfunction createInstrumentMethod(state: DurableObjectState, initialiser: Initialiser, env: Env): InstrumentMethod {\n\treturn async function instrument<T>(\n\t\tname: string,\n\t\toptionsOrFn: InstrumentOptions | (() => Promise<T>),\n\t\tmaybeFn?: () => Promise<T>,\n\t): Promise<T> {\n\t\t// Parse arguments - support both forms\n\t\tconst options: InstrumentOptions = typeof optionsOrFn === 'function' ? {} : optionsOrFn\n\t\tconst fn = typeof optionsOrFn === 'function' ? optionsOrFn : maybeFn!\n\n\t\tconst tracer = trace.getTracer('DO custom span')\n\n\t\tconst spanOptions: SpanOptions = {\n\t\t\t...options,\n\t\t\tattributes: {\n\t\t\t\t'do.id': state.id.toString(),\n\t\t\t\t...(state.id.name && { 'do.name': state.id.name }),\n\t\t\t\t...options.attributes,\n\t\t\t},\n\t\t}\n\n\t\t// Ensure config is available in context\n\t\t// If already in a traced context (fetch/alarm/RPC), config will exist\n\t\t// If not, we need to initialize it\n\t\tconst executeWithConfig = async () => {\n\t\t\tconst currentContext = api_context.active()\n\t\t\tconst existingConfig = getActiveConfig()\n\n\t\t\tlet context = currentContext\n\t\t\tif (!existingConfig) {\n\t\t\t\t// No config in context - we're being called outside fetch/alarm/RPC\n\t\t\t\t// Initialize config for this call\n\t\t\t\tconst config = initialiser(env, { id: state.id.toString(), name: state.id.name })\n\t\t\t\tcontext = setConfig(config, currentContext)\n\t\t\t}\n\n\t\t\t// Use the current active context - if we're inside fetch/alarm/RPC,\n\t\t\t// this will be a child span. Otherwise, it's a root span.\n\t\t\treturn api_context.with(context, () =>\n\t\t\t\ttracer.startActiveSpan(name, spanOptions, async (span) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await fn()\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\treturn executeWithConfig()\n\t}\n}\n\nfunction instrumentRpcMethod(method: Function, methodName: string, nsName: string, stubId: DurableObjectId): Function {\n\tconst tracer = trace.getTracer('do_rpc_client')\n\n\tconst rpcHandler: ProxyHandler<Function> = {\n\t\tapply: async (target, thisArg, argArray) => {\n\t\t\tconst attributes = {\n\t\t\t\t[ATTR_RPC_SYSTEM]: 'cloudflare_rpc',\n\t\t\t\t[ATTR_RPC_SERVICE]: nsName,\n\t\t\t\t[ATTR_RPC_METHOD]: methodName,\n\t\t\t\t[ATTR_CLOUDFLARE_JSRPC_METHOD]: methodName,\n\t\t\t\t'do.namespace': nsName,\n\t\t\t\t'do.id': stubId.toString(),\n\t\t\t\t'do.id.name': stubId.name,\n\t\t\t}\n\n\t\t\tconst options: SpanOptions = {\n\t\t\t\tkind: SpanKind.CLIENT,\n\t\t\t\tattributes,\n\t\t\t}\n\n\t\t\t// Use DO name if available, otherwise namespace\n\t\t\tconst serviceName = stubId.name || nsName\n\t\t\tconst spanName = `RPC ${serviceName}.${methodName}`\n\n\t\t\treturn tracer.startActiveSpan(spanName, options, async (span) => {\n\t\t\t\ttry {\n\t\t\t\t\t// Inject trace context as first argument, including DO name if available\n\t\t\t\t\tconst contextCarrier = injectRpcContext(api_context.active(), stubId.name)\n\t\t\t\t\tconst argsWithContext = [contextCarrier, ...argArray]\n\n\t\t\t\t\tconst result = await Reflect.apply(target, thisArg, argsWithContext)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\treturn result\n\t\t\t\t} catch (error) {\n\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\tthrow error\n\t\t\t\t} finally {\n\t\t\t\t\tspan.end()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t}\n\n\treturn wrap(method, rpcHandler)\n}\n\nfunction instrumentBindingStub(stub: DurableObjectStub, nsName: string): DurableObjectStub {\n\tconst stubHandler: ProxyHandler<typeof stub> = {\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === 'fetch') {\n\t\t\t\tconst fetcher = Reflect.get(target, prop)\n\t\t\t\tconst attrs = {\n\t\t\t\t\tname: `Durable Object ${nsName}`,\n\t\t\t\t\t'do.namespace': nsName,\n\t\t\t\t\t'do.id': target.id.toString(),\n\t\t\t\t\t'do.id.name': target.id.name,\n\t\t\t\t}\n\t\t\t\treturn instrumentClientFetch(fetcher, () => ({ includeTraceContext: true }), attrs)\n\t\t\t} else {\n\t\t\t\t// Get the property value\n\t\t\t\tconst value = passthroughGet(target, prop, receiver)\n\n\t\t\t\t// Check if it's an RPC method (function from the DO class)\n\t\t\t\tif (typeof value === 'function' && typeof prop === 'string') {\n\t\t\t\t\t// Instrument RPC method calls\n\t\t\t\t\treturn instrumentRpcMethod(value, prop, nsName, target.id)\n\t\t\t\t}\n\n\t\t\t\treturn value\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(stub, stubHandler)\n}\n\nfunction instrumentBindingGet(getFn: DurableObjectNamespace['get'], nsName: string): DurableObjectNamespace['get'] {\n\tconst getHandler: ProxyHandler<DurableObjectNamespace['get']> = {\n\t\tapply(target, thisArg, argArray) {\n\t\t\tconst stub: DurableObjectStub = Reflect.apply(target, thisArg, argArray)\n\t\t\treturn instrumentBindingStub(stub, nsName)\n\t\t},\n\t}\n\treturn wrap(getFn, getHandler)\n}\n\n// getByName is just a convenience wrapper that calls idFromName + get\n// We still need to instrument it to capture the stub\nfunction instrumentBindingGetByName(\n\tgetByNameFn: DurableObjectNamespace['getByName'],\n\tnsName: string,\n): DurableObjectNamespace['getByName'] {\n\tconst getByNameHandler: ProxyHandler<DurableObjectNamespace['getByName']> = {\n\t\tapply(target, thisArg, argArray) {\n\t\t\tconst stub: DurableObjectStub = Reflect.apply(target, thisArg, argArray)\n\t\t\t// The name passed to getByName should be available on stub.id.name\n\t\t\t// but we'll also track it ourselves to be safe\n\t\t\treturn instrumentBindingStub(stub, nsName)\n\t\t},\n\t}\n\treturn wrap(getByNameFn, getByNameHandler)\n}\n\nexport function instrumentDOBinding(ns: DurableObjectNamespace, nsName: string) {\n\tconst nsHandler: ProxyHandler<typeof ns> = {\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === 'get') {\n\t\t\t\tconst fn = Reflect.get(ns, prop, receiver)\n\t\t\t\treturn instrumentBindingGet(fn, nsName)\n\t\t\t} else if (prop === 'getByName') {\n\t\t\t\tconst fn = Reflect.get(ns, prop, receiver)\n\t\t\t\treturn instrumentBindingGetByName(fn, nsName)\n\t\t\t} else {\n\t\t\t\treturn passthroughGet(target, prop, receiver)\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(ns, nsHandler)\n}\n\nexport function instrumentState(state: DurableObjectState) {\n\tconst stateHandler: ProxyHandler<DurableObjectState> = {\n\t\tget(target, prop, receiver) {\n\t\t\tconst result = Reflect.get(target, prop, unwrap(receiver))\n\t\t\tif (prop === 'storage') {\n\t\t\t\treturn instrumentStorage(result)\n\t\t\t} else if (typeof result === 'function') {\n\t\t\t\treturn result.bind(target)\n\t\t\t} else {\n\t\t\t\treturn result\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(state, stateHandler)\n}\n\nlet cold_start = true\nexport function executeDOFetch(fetchFn: FetchFn, request: Request, id: DurableObjectId): Promise<Response> {\n\tconst spanContext = getParentContextFromHeaders(request.headers)\n\n\tconst tracer = trace.getTracer('DO fetchHandler')\n\tconst attributes = {\n\t\t[SemanticAttributes.FAAS_TRIGGER]: 'http',\n\t\t[SemanticAttributes.FAAS_COLDSTART]: cold_start,\n\t}\n\tcold_start = false\n\tObject.assign(attributes, gatherRequestAttributes(request))\n\tObject.assign(attributes, gatherIncomingCfAttributes(request))\n\tconst options: SpanOptions = {\n\t\tattributes,\n\t\tkind: SpanKind.SERVER,\n\t}\n\n\tconst name = id.name || ''\n\tconst promise = tracer.startActiveSpan(`Durable Object Fetch ${name}`, options, spanContext, async (span) => {\n\t\ttry {\n\t\t\tconst response: Response = await fetchFn(request)\n\t\t\tif (response.ok) {\n\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t}\n\t\t\tspan.setAttributes(gatherResponseAttributes(response))\n\t\t\tspan.end()\n\n\t\t\treturn response\n\t\t} catch (error) {\n\t\t\tspan.recordException(error as Exception)\n\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\tspan.end()\n\t\t\tthrow error\n\t\t}\n\t})\n\treturn promise\n}\n\nexport function executeDOAlarm(alarmFn: NonNullable<AlarmFn>, id: DurableObjectId): Promise<void> {\n\tconst tracer = trace.getTracer('DO alarmHandler')\n\n\tconst name = id.name || ''\n\tconst promise = tracer.startActiveSpan(`Durable Object Alarm ${name}`, async (span) => {\n\t\tspan.setAttribute(SemanticAttributes.FAAS_COLDSTART, cold_start)\n\t\tcold_start = false\n\t\tspan.setAttribute('do.id', id.toString())\n\t\tif (id.name) span.setAttribute('do.name', id.name)\n\n\t\ttry {\n\t\t\tawait alarmFn()\n\t\t\tspan.end()\n\t\t} catch (error) {\n\t\t\tspan.recordException(error as Exception)\n\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\tspan.end()\n\t\t\tthrow error\n\t\t}\n\t})\n\treturn promise\n}\n\nfunction instrumentFetchFn(fetchFn: FetchFn, initialiser: Initialiser, env: Env, id: DurableObjectId): FetchFn {\n\tconst fetchHandler: ProxyHandler<FetchFn> = {\n\t\tasync apply(target, thisArg, argArray: Parameters<FetchFn>) {\n\t\t\tconst request = argArray[0]\n\t\t\tconst config = initialiser(env, request)\n\t\t\tconst context = setConfig(config)\n\t\t\ttry {\n\t\t\t\tconst bound = target.bind(unwrap(thisArg))\n\t\t\t\treturn await api_context.with(context, executeDOFetch, undefined, bound, request, id)\n\t\t\t} catch (error) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(fetchFn, fetchHandler)\n}\n\nfunction instrumentAlarmFn(alarmFn: AlarmFn, initialiser: Initialiser, env: Env, id: DurableObjectId) {\n\tif (!alarmFn) return undefined\n\n\tconst alarmHandler: ProxyHandler<NonNullable<AlarmFn>> = {\n\t\tasync apply(target, thisArg) {\n\t\t\tconst config = initialiser(env, 'do-alarm')\n\t\t\tconst context = setConfig(config)\n\t\t\ttry {\n\t\t\t\tconst bound = target.bind(unwrap(thisArg))\n\t\t\t\treturn await api_context.with(context, executeDOAlarm, undefined, bound, id)\n\t\t\t} catch (error) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(alarmFn, alarmHandler)\n}\n\nfunction instrumentRpcHandlerMethod(\n\tfn: Function,\n\tmethodName: string,\n\tinitialiser: Initialiser,\n\tenv: Env,\n\tid: DurableObjectId,\n): Function {\n\tif (!fn) return fn\n\n\tconst fnHandler: ProxyHandler<Function> = {\n\t\tasync apply(target, thisArg, argArray) {\n\t\t\tthisArg = unwrap(thisArg)\n\t\t\tconst config = initialiser(env, 'do-rpc')\n\n\t\t\t// Extract and remove RPC context carrier from arguments\n\t\t\tconst [extractedContext, cleanedArgs] = extractAndRemoveRpcContext(argArray)\n\n\t\t\t// Get DO name from carrier if available, fall back to id.name\n\t\t\tconst carrierDoName = argArray.length > 0 && extractedContext ? (argArray[0] as any).doName : undefined\n\t\t\tconst doName = carrierDoName || id.name || undefined\n\n\t\t\t// Build the context: start with extracted parent context (if any), then add config\n\t\t\tlet context = extractedContext || api_context.active()\n\t\t\tcontext = setConfig(config, context)\n\n\t\t\tconst tracer = trace.getTracer('do_rpc_handler')\n\n\t\t\tconst executeRpc = async () => {\n\t\t\t\tconst attributes: Record<string, string> = {\n\t\t\t\t\t[ATTR_RPC_SYSTEM]: 'cloudflare_rpc',\n\t\t\t\t\t[ATTR_RPC_METHOD]: methodName,\n\t\t\t\t\t[ATTR_CLOUDFLARE_JSRPC_METHOD]: methodName,\n\t\t\t\t\t[SemanticAttributes.FAAS_TRIGGER]: 'rpc',\n\t\t\t\t\t'do.id': id.toString(),\n\t\t\t\t}\n\n\t\t\t\tif (doName) {\n\t\t\t\t\tattributes['do.name'] = doName\n\t\t\t\t}\n\n\t\t\t\tconst options: SpanOptions = {\n\t\t\t\t\tkind: SpanKind.SERVER,\n\t\t\t\t\tattributes,\n\t\t\t\t}\n\n\t\t\t\tconst spanName = doName ? `${doName}.${methodName}` : `${attributes['do.id']}.${methodName}`\n\n\t\t\t\t// Use the current context (which includes extracted parent) for the span\n\t\t\t\treturn tracer.startActiveSpan(spanName, options, api_context.active(), async (span) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst bound = target.bind(thisArg)\n\t\t\t\t\t\t// Use cleaned args (without context carrier) for the actual method call\n\t\t\t\t\t\tconst result = await bound.apply(thisArg, cleanedArgs)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t\t\treturn result\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tspan.end()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn await api_context.with(context, executeRpc)\n\t\t},\n\t}\n\treturn wrap(fn, fnHandler)\n}\n\nfunction instrumentDurableObject(doObj: DO, initialiser: Initialiser, env: Env, state: DurableObjectState) {\n\tconst objHandler: ProxyHandler<DurableObject> = {\n\t\tget(target, prop) {\n\t\t\t// instrument, env, and ctx are now real properties, so this won't be called for them\n\t\t\t// This proxy mainly handles fetch, alarm, and RPC method wrapping\n\t\t\tif (prop === 'fetch') {\n\t\t\t\tconst fetchFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentFetchFn(fetchFn, initialiser, env, state.id)\n\t\t\t} else if (prop === 'alarm') {\n\t\t\t\tconst alarmFn = Reflect.get(target, prop)\n\t\t\t\treturn instrumentAlarmFn(alarmFn, initialiser, env, state.id)\n\t\t\t} else {\n\t\t\t\tconst result = Reflect.get(target, prop)\n\t\t\t\tif (typeof result === 'function' && typeof prop === 'string') {\n\t\t\t\t\tresult.bind(doObj)\n\t\t\t\t\t// Instrument as RPC handler method (server-side)\n\t\t\t\t\treturn instrumentRpcHandlerMethod(result, prop, initialiser, env, state.id)\n\t\t\t\t}\n\t\t\t\treturn result\n\t\t\t}\n\t\t},\n\t}\n\treturn wrap(doObj, objHandler)\n}\n\nexport type DOClass = { new (state: DurableObjectState, env: any): DO }\n\nexport function instrumentDOClass<C extends DOClass>(doClass: C, initialiser: Initialiser): C {\n\tconst classHandler: ProxyHandler<C> = {\n\t\tconstruct(target, [orig_state, orig_env]: ConstructorParameters<DOClass>) {\n\t\t\tconst trigger: DOConstructorTrigger = {\n\t\t\t\tid: orig_state.id.toString(),\n\t\t\t\tname: orig_state.id.name,\n\t\t\t}\n\t\t\tconst constructorConfig = initialiser(orig_env, trigger)\n\t\t\tconst context = setConfig(constructorConfig)\n\t\t\tconst state = instrumentState(orig_state)\n\t\t\tconst env = instrumentEnv(orig_env)\n\n\t\t\t// Always pass original state/env to constructor\n\t\t\t// The DurableObject base class (if extends DurableObject) expects the real types\n\t\t\tconst createDO = () => new target(orig_state, orig_env)\n\t\t\tconst doObj = api_context.with(context, createDO)\n\n\t\t\t// Always inject instrumented versions as real properties\n\t\t\t// This works for both class-style and legacy DOs, and avoids proxy issues\n\t\t\tconst instrumentMethod = createInstrumentMethod(state, initialiser, env)\n\n\t\t\tObject.defineProperty(doObj, 'instrument', {\n\t\t\t\tvalue: instrumentMethod,\n\t\t\t\twritable: false,\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\n\t\t\tObject.defineProperty(doObj, 'env', {\n\t\t\t\tvalue: env,\n\t\t\t\twritable: false,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\n\t\t\tObject.defineProperty(doObj, 'ctx', {\n\t\t\t\tvalue: state,\n\t\t\t\twritable: false,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\n\t\t\treturn instrumentDurableObject(doObj, initialiser, env, state)\n\t\t},\n\t}\n\treturn wrap(doClass, classHandler)\n}\n","import { SpanKind } from '@opentelemetry/api'\nimport { HandlerInstrumentation, InitialSpanInfo, OrPromise } from '../types'\nimport {\n\tATTR_FAAS_CRON,\n\tATTR_FAAS_TIME,\n\tATTR_FAAS_TRIGGER,\n\tFAAS_TRIGGER_VALUE_TIMER,\n} from '@opentelemetry/semantic-conventions/incubating'\nimport { ATTR_CLOUDFLARE_SCHEDULED_TIME } from '../constants'\n\nexport const scheduledInstrumentation: HandlerInstrumentation<ScheduledController, OrPromise<void>> = {\n\tgetInitialSpanInfo: function (controller: ScheduledController): InitialSpanInfo {\n\t\tconst scheduledTimeISO = new Date(controller.scheduledTime).toISOString()\n\t\treturn {\n\t\t\tname: `scheduledHandler ${controller.cron}`,\n\t\t\toptions: {\n\t\t\t\tattributes: {\n\t\t\t\t\t[ATTR_FAAS_TRIGGER]: FAAS_TRIGGER_VALUE_TIMER,\n\t\t\t\t\t[ATTR_FAAS_CRON]: controller.cron,\n\t\t\t\t\t[ATTR_FAAS_TIME]: scheduledTimeISO,\n\t\t\t\t\t[ATTR_CLOUDFLARE_SCHEDULED_TIME]: scheduledTimeISO,\n\t\t\t\t},\n\t\t\t\tkind: SpanKind.INTERNAL,\n\t\t\t},\n\t\t}\n\t},\n}\n","import { isVersionMetadata } from './env'\n\nexport function versionAttributes(env: unknown): Record<string, string | undefined> {\n\tconst attributes = {} as Record<string, string | undefined>\n\n\tif (typeof env === 'object' && env !== null) {\n\t\tfor (const [binding, data] of Object.entries(env)) {\n\t\t\tif (isVersionMetadata(data)) {\n\t\t\t\tattributes['cf.workers_version_metadata.binding'] = binding\n\t\t\t\tattributes['cf.workers_version_metadata.id'] = data.id\n\t\t\t\tattributes['cf.workers_version_metadata.tag'] = data.tag\n\t\t\t\t// Version metadata bindings are identical, so we can stop after the first one found\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn attributes\n}\n","import { trace } from '@opentelemetry/api'\nimport { WorkerTracer } from '../tracer'\nimport { passthroughGet, wrap } from '../wrap'\n\ntype ContextAndTracker = { ctx: ExecutionContext; tracker: PromiseTracker }\ntype WaitUntilFn = ExecutionContext['waitUntil']\n\nexport class PromiseTracker {\n\t_outstandingPromises: Promise<unknown>[] = []\n\n\tget outstandingPromiseCount() {\n\t\treturn this._outstandingPromises.length\n\t}\n\n\ttrack(promise: Promise<unknown>): void {\n\t\tthis._outstandingPromises.push(promise)\n\t}\n\n\tasync wait() {\n\t\tawait allSettledMutable(this._outstandingPromises)\n\t}\n}\n\nfunction createWaitUntil(fn: WaitUntilFn, context: ExecutionContext, tracker: PromiseTracker): WaitUntilFn {\n\tconst handler: ProxyHandler<WaitUntilFn> = {\n\t\tapply(target, _thisArg, argArray) {\n\t\t\ttracker.track(argArray[0])\n\t\t\treturn Reflect.apply(target, context, argArray)\n\t\t},\n\t}\n\treturn wrap(fn, handler)\n}\n\nexport function proxyExecutionContext(context: ExecutionContext): ContextAndTracker {\n\tconst tracker = new PromiseTracker()\n\tconst ctx = new Proxy(context, {\n\t\tget(target, prop) {\n\t\t\tif (prop === 'waitUntil') {\n\t\t\t\tconst fn = Reflect.get(target, prop)\n\t\t\t\treturn createWaitUntil(fn, context, tracker)\n\t\t\t} else {\n\t\t\t\treturn passthroughGet(target, prop)\n\t\t\t}\n\t\t},\n\t})\n\treturn { ctx, tracker }\n}\n\nexport async function exportSpans(tracker?: PromiseTracker) {\n\tconst tracer = trace.getTracer('export')\n\tif (tracer instanceof WorkerTracer) {\n\t\tawait scheduler.wait(1)\n\t\tawait tracker?.wait()\n\t\tawait tracer.forceFlush()\n\t} else {\n\t\tconsole.error('The global tracer is not of type WorkerTracer and can not export spans')\n\t}\n}\n\n/** Like `Promise.allSettled`, but handles modifications to the promises array */\nasync function allSettledMutable(promises: Promise<unknown>[]): Promise<PromiseSettledResult<unknown>[]> {\n\tlet values: PromiseSettledResult<unknown>[]\n\t// when the length of the array changes, there has been a nested call to waitUntil\n\t// and we should await the promises again\n\tdo {\n\t\tvalues = await Promise.allSettled(promises)\n\t} while (values.length !== promises.length)\n\treturn values\n}\n\n/** Overloads extracts up to 4 overloads for the given function. */\nexport type Overloads<T> = T extends {\n\t(...args: infer P1): infer R1\n\t(...args: infer P2): infer R2\n\t(...args: infer P3): infer R3\n\t(...args: infer P4): infer R4\n}\n\t? ((...args: P1) => R1) | ((...args: P2) => R2) | ((...args: P3) => R3) | ((...args: P4) => R4)\n\t: never\n","import { SpanKind, type SpanOptions } from '@opentelemetry/api'\nimport {\n\tATTR_FAAS_TRIGGER,\n\tATTR_MESSAGING_DESTINATION_NAME,\n\tATTR_RPC_MESSAGE_ID,\n} from '@opentelemetry/semantic-conventions/incubating'\nimport { HandlerInstrumentation, OrPromise } from '../types'\nimport { ATTR_CLOUDFLARE_EMAIL_FROM, ATTR_CLOUDFLARE_EMAIL_TO, ATTR_CLOUDFLARE_EMAIL_SIZE } from '../constants'\n\n/**\n * Converts the message headers into a record ready to be injected\n * as OpenTelemetry attributes\n *\n * @example\n * ```ts\n * const headers = new Headers({ \"Subject\": \"Hello!\", From: \"hello@example.com\" })\n * headerAttributes({ headers })\n * // => {\"email.header.Subject\": \"Hello!\", \"email.header.From\": \"hello@example.com\"}\n * ```\n */\nfunction headerAttributes(message: { headers: Headers }): Record<string, unknown> {\n\treturn Object.fromEntries([...message.headers].map(([key, value]) => [`email.header.${key}`, value] as const))\n}\n\nexport const emailInstrumentation: HandlerInstrumentation<ForwardableEmailMessage, OrPromise<void>> = {\n\tgetInitialSpanInfo: (message) => {\n\t\tconst attributes = {\n\t\t\t[ATTR_FAAS_TRIGGER]: 'other',\n\t\t\t[ATTR_RPC_MESSAGE_ID]: message.headers.get('Message-Id') ?? undefined,\n\t\t\t[ATTR_MESSAGING_DESTINATION_NAME]: message.to,\n\t\t\t[ATTR_CLOUDFLARE_EMAIL_FROM]: message.from,\n\t\t\t[ATTR_CLOUDFLARE_EMAIL_TO]: message.to,\n\t\t\t[ATTR_CLOUDFLARE_EMAIL_SIZE]: message.rawSize,\n\t\t}\n\t\tObject.assign(attributes, headerAttributes(message))\n\t\tconst options = {\n\t\t\tattributes,\n\t\t\tkind: SpanKind.CONSUMER,\n\t\t} satisfies SpanOptions\n\n\t\treturn {\n\t\t\tname: `emailHandler ${message.to}`,\n\t\t\toptions,\n\t\t}\n\t},\n}\n","import { context as api_context, Exception, propagation, SpanStatusCode, trace } from '@opentelemetry/api'\nimport { Resource, resourceFromAttributes } from '@opentelemetry/resources'\nimport { W3CTraceContextPropagator } from '@opentelemetry/core'\n\nimport { Initialiser, parseConfig, setConfig, ResolvedConfig } from './config'\nimport { WorkerTracerProvider } from './provider'\nimport { Trigger, OrPromise, HandlerInstrumentation, ConfigurationOption } from './types'\nimport { WorkerLoggerProvider, getLogger } from './logs/provider'\nimport { unwrap } from './wrap'\nimport { WorkerTracer } from './tracer'\n\nimport { fetchInstrumentation, instrumentGlobalFetch } from './instrumentation/fetch'\nimport { instrumentGlobalCache } from './instrumentation/cache'\nimport { QueueInstrumentation } from './instrumentation/queue'\nimport { DOClass, instrumentDOClass } from './instrumentation/do'\nimport { scheduledInstrumentation } from './instrumentation/scheduled'\nimport { instrumentEnv } from './instrumentation/env'\nimport { versionAttributes } from './instrumentation/version'\nimport { PromiseTracker, proxyExecutionContext } from './instrumentation/common'\nimport { emailInstrumentation } from './instrumentation/email'\nimport { PACKAGE_VERSION } from './constants'\nimport { env } from 'cloudflare:workers'\n\ntype FetchHandler = ExportedHandlerFetchHandler<unknown, unknown>\ntype ScheduledHandler = ExportedHandlerScheduledHandler<unknown>\ntype QueueHandler = ExportedHandlerQueueHandler\ntype EmailHandler = EmailExportedHandler\n\ntype Env = Record<string, any>\ntype HandlerFn<T extends Trigger, E extends Env, R extends any> = (\n\ttrigger: T,\n\tenv: E,\n\tctx: ExecutionContext,\n) => R | Promise<R>\n\nexport function isRequest(trigger: Trigger): trigger is Request {\n\treturn trigger instanceof Request\n}\n\nexport function isMessageBatch(trigger: Trigger): trigger is MessageBatch {\n\treturn !!(trigger as MessageBatch).ackAll\n}\n\nexport function isAlarm(trigger: Trigger): trigger is 'do-alarm' {\n\treturn trigger === 'do-alarm'\n}\n\nfunction findVersionMeta(): WorkerVersionMetadata | undefined {\n\treturn Object.values(env).find((binding: any) => {\n\t\treturn (\n\t\t\tObject.getPrototypeOf(binding).constructor.name === 'Object' &&\n\t\t\tbinding.id !== undefined &&\n\t\t\tbinding.tag !== undefined\n\t\t)\n\t})\n}\n\nconst createResource = (serviceConfig: any, versionMeta?: WorkerVersionMetadata): Resource => {\n\tconsole.log({ versionMeta })\n\tconst workerResourceAttrs = {\n\t\t'cloud.provider': 'cloudflare',\n\t\t'cloud.platform': 'cloudflare.workers',\n\t\t'cloud.region': 'earth',\n\t\t'faas.max_memory': 134217728,\n\t\t'telemetry.sdk.language': 'js',\n\t\t'telemetry.sdk.name': '@inference-net/otel-cf-workers',\n\t\t'telemetry.sdk.version': PACKAGE_VERSION,\n\t\t'cf.worker.version.id': versionMeta?.id,\n\t\t'cf.worker.version.tag': versionMeta?.tag,\n\t\t'cf.worker.version.timestamp': versionMeta?.timestamp,\n\t}\n\tconst serviceResource = resourceFromAttributes({\n\t\t'service.name': serviceConfig.name,\n\t\t'service.namespace': serviceConfig.namespace,\n\t\t'service.version': serviceConfig.version,\n\t})\n\tconst resource = resourceFromAttributes(workerResourceAttrs)\n\treturn resource.merge(serviceResource)\n}\n\nlet initialised = false\nfunction init(config: ResolvedConfig, serviceConfig: any, propagator: any): void {\n\tif (!initialised) {\n\t\tconst resource = createResource(serviceConfig, findVersionMeta())\n\n\t\t// Initialize traces if configured\n\t\tif (config.trace) {\n\t\t\tif (config.trace.instrumentation.instrumentGlobalCache) {\n\t\t\t\tinstrumentGlobalCache()\n\t\t\t}\n\t\t\tif (config.trace.instrumentation.instrumentGlobalFetch) {\n\t\t\t\tinstrumentGlobalFetch()\n\t\t\t}\n\n\t\t\tconst traceProvider = new WorkerTracerProvider(config.trace.spanProcessors, resource)\n\t\t\ttraceProvider.register()\n\t\t}\n\n\t\t// Initialize logs if configured\n\t\tif (config.logs && config.logs.processors.length > 0) {\n\t\t\tconst logsProvider = new WorkerLoggerProvider(config.logs.processors, resource)\n\t\t\tlogsProvider.register()\n\n\t\t\t// Instrument console if enabled\n\t\t\tif (config.logs.instrumentation.instrumentConsole) {\n\t\t\t\timport('./logs/console').then(({ instrumentConsole }) => {\n\t\t\t\t\tinstrumentConsole()\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Set global propagator\n\t\tpropagation.setGlobalPropagator(propagator)\n\n\t\tinitialised = true\n\t}\n}\n\nfunction createInitialiser(config: ConfigurationOption): Initialiser {\n\tif (typeof config === 'function') {\n\t\treturn (env, trigger) => {\n\t\t\tconst userConfig = config(env, trigger)\n\t\t\tconst conf = parseConfig(userConfig)\n\t\t\tconst propagator = userConfig.propagator || new W3CTraceContextPropagator()\n\t\t\tinit(conf, userConfig.service, propagator)\n\t\t\treturn conf\n\t\t}\n\t} else {\n\t\treturn () => {\n\t\t\tconst conf = parseConfig(config)\n\t\t\tconst propagator = config.propagator || new W3CTraceContextPropagator()\n\t\t\tinit(conf, config.service, propagator)\n\t\t\treturn conf\n\t\t}\n\t}\n}\n\nexport async function exportTelemetry(traceId: string, tracker?: PromiseTracker) {\n\tconst tracer = trace.getTracer('export')\n\tconst logger = getLogger('export')\n\n\t// Export traces\n\tif (tracer instanceof WorkerTracer) {\n\t\tawait scheduler.wait(1)\n\t\tawait tracker?.wait()\n\t\tawait tracer.forceFlush(traceId)\n\t}\n\n\t// Export logs\n\tif (logger && typeof logger.forceFlush === 'function') {\n\t\tawait logger.forceFlush()\n\t}\n}\n\n// Backward compatibility\nexport const exportSpans = exportTelemetry\n\ntype HandlerFnArgs<T extends Trigger, E extends Env> = (T | E | ExecutionContext)[]\ntype OrderedHandlerFnArgs<T extends Trigger, E extends Env> = [trigger: T, env: E, ctx: ExecutionContext]\n\nlet cold_start = true\nfunction createHandlerFlowFn<T extends Trigger, E extends Env, R extends any>(\n\tinstrumentation: HandlerInstrumentation<T, R>,\n): (handlerFn: HandlerFn<T, E, R>, [trigger, env, context]: HandlerFnArgs<T, E>) => ReturnType<HandlerFn<T, E, R>> {\n\treturn (handlerFn, args) => {\n\t\tconst [trigger, env, context] = args as OrderedHandlerFnArgs<T, E>\n\t\tconst proxiedEnv = instrumentEnv(env)\n\t\tconst { ctx: proxiedCtx, tracker } = proxyExecutionContext(context)\n\n\t\tconst instrumentedTrigger = instrumentation.instrumentTrigger ? instrumentation.instrumentTrigger(trigger) : trigger\n\n\t\tconst tracer = trace.getTracer('handler') as WorkerTracer\n\n\t\tconst { name, options, context: spanContext } = instrumentation.getInitialSpanInfo(trigger)\n\t\tconst attrs = options.attributes || {}\n\t\tattrs['faas.coldstart'] = cold_start\n\t\toptions.attributes = attrs\n\t\tObject.assign(attrs, versionAttributes(env))\n\t\tcold_start = false\n\n\t\tconst parentContext = spanContext || api_context.active()\n\t\tconst result = tracer.startActiveSpan(name, options, parentContext, async (span) => {\n\t\t\ttry {\n\t\t\t\tconst result = await handlerFn(instrumentedTrigger, proxiedEnv, proxiedCtx)\n\n\t\t\t\t// Check if this is a WebSocket upgrade request - if so, don't touch the response\n\t\t\t\tconst isWebSocketUpgrade =\n\t\t\t\t\tisRequest(trigger) &&\n\t\t\t\t\ttrigger.headers.get('upgrade')?.toLowerCase() === 'websocket' &&\n\t\t\t\t\ttrigger.headers.has('sec-websocket-key')\n\n\t\t\t\tif (isWebSocketUpgrade) {\n\t\t\t\t\tconst logger = getLogger('handler')\n\t\t\t\t\tlogger.trace('WebSocket upgrade detected, closing span without reading response')\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK })\n\t\t\t\t} else {\n\t\t\t\t\tif (instrumentation.getAttributesFromResult) {\n\t\t\t\t\t\tconst attributes = instrumentation.getAttributesFromResult(result)\n\t\t\t\t\t\tspan.setAttributes(attributes)\n\t\t\t\t\t}\n\n\t\t\t\t\tif (instrumentation.executionSucces) {\n\t\t\t\t\t\tinstrumentation.executionSucces(span, trigger, result)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result\n\t\t\t} catch (error) {\n\t\t\t\tspan.recordException(error as Exception)\n\t\t\t\tspan.setStatus({ code: SpanStatusCode.ERROR })\n\t\t\t\tif (instrumentation.executionFailed) {\n\t\t\t\t\tinstrumentation.executionFailed(span, trigger, error)\n\t\t\t\t}\n\t\t\t\tthrow error\n\t\t\t} finally {\n\t\t\t\tspan.end()\n\t\t\t\tcontext.waitUntil(exportTelemetry(span.spanContext().traceId, tracker))\n\t\t\t}\n\t\t})\n\n\t\treturn result\n\t}\n}\n\nfunction createHandlerProxy<T extends Trigger, E extends Env, R extends OrPromise<any>>(\n\thandler: unknown,\n\thandlerFn: HandlerFn<T, E, R>,\n\tinitialiser: Initialiser,\n\tinstrumentation: HandlerInstrumentation<T, R>,\n): HandlerFn<T, E, R> {\n\treturn (trigger: T, env: E, ctx: ExecutionContext): ReturnType<HandlerFn<T, E, R>> => {\n\t\tconst config = initialiser(env, trigger)\n\t\tconst context = setConfig(config)\n\n\t\tconst flowFn = createHandlerFlowFn<T, E, R>(instrumentation)\n\t\treturn api_context.with(context, flowFn, handler, handlerFn, [trigger, env, ctx]) as R\n\t}\n}\n\nexport function instrument<E extends Env, Q, C>(\n\thandler: ExportedHandler<E, Q, C>,\n\tconfig: ConfigurationOption,\n): ExportedHandler<E, Q, C> {\n\tconst initialiser = createInitialiser(config)\n\n\tif (handler.fetch) {\n\t\tconst fetcher = unwrap(handler.fetch) as FetchHandler\n\t\thandler.fetch = createHandlerProxy(handler, fetcher, initialiser, fetchInstrumentation)\n\t}\n\n\tif (handler.scheduled) {\n\t\tconst scheduler = unwrap(handler.scheduled) as ScheduledHandler\n\t\thandler.scheduled = createHandlerProxy(handler, scheduler, initialiser, scheduledInstrumentation)\n\t}\n\n\tif (handler.queue) {\n\t\tconst queuer = unwrap(handler.queue) as QueueHandler\n\t\thandler.queue = createHandlerProxy(handler, queuer, initialiser, new QueueInstrumentation())\n\t}\n\n\tif (handler.email) {\n\t\tconst emailer = unwrap(handler.email) as EmailHandler\n\t\thandler.email = createHandlerProxy(handler, emailer, initialiser, emailInstrumentation)\n\t}\n\n\treturn handler\n}\n\nexport function instrumentDO(doClass: DOClass, config: ConfigurationOption) {\n\tconst initialiser = createInitialiser(config)\n\n\treturn instrumentDOClass(doClass, initialiser)\n}\n\nexport const __unwrappedFetch = unwrap(fetch)\n","import { SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { ExportResult, ExportResultCode } from '@opentelemetry/core'\n\n// First implementation, completely synchronous, more tested.\n\nexport class MultiSpanExporter implements SpanExporter {\n\tprivate exporters: Array<SpanExporter>\n\tconstructor(exporters: Array<SpanExporter>) {\n\t\tthis.exporters = exporters\n\t}\n\n\texport(items: any[], resultCallback: (result: ExportResult) => void): void {\n\t\tfor (const exporter of this.exporters) {\n\t\t\texporter.export(items, resultCallback)\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tfor (const exporter of this.exporters) {\n\t\t\tawait exporter.shutdown()\n\t\t}\n\t}\n}\n\n// async\n\nexport class MultiSpanExporterAsync implements SpanExporter {\n\tprivate exporters: Array<SpanExporter>\n\tconstructor(exporters: Array<SpanExporter>) {\n\t\tthis.exporters = exporters\n\t}\n\n\texport(items: any[], resultCallback: (result: ExportResult) => void): void {\n\t\tconst promises = this.exporters.map(\n\t\t\t(exporter) =>\n\t\t\t\tnew Promise<ExportResult>((resolve) => {\n\t\t\t\t\texporter.export(items, resolve)\n\t\t\t\t}),\n\t\t)\n\n\t\tPromise.all(promises).then((results) => {\n\t\t\tconst failed = results.filter((result) => result.code === ExportResultCode.FAILED)\n\t\t\tif (failed.length > 0) {\n\t\t\t\t// not ideal, but just return the first error\n\t\t\t\tresultCallback({ code: ExportResultCode.FAILED, error: failed[0]!.error })\n\t\t\t} else {\n\t\t\t\tresultCallback({ code: ExportResultCode.SUCCESS })\n\t\t\t}\n\t\t})\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tawait Promise.all(this.exporters.map((exporter) => exporter.shutdown()))\n\t}\n}\n","import { ExportResultCode } from '@opentelemetry/core'\nimport { OTLPExporterError } from '@opentelemetry/otlp-exporter-base'\nimport {\n\tLogTransport,\n\tReadableLogRecord,\n\tExportResultCallback,\n\tOTLPTransportConfig,\n\tConsoleTransportConfig,\n} from './types'\nimport { unwrap } from '../wrap'\nimport { DEFAULT_OTLP_HEADERS, SEVERITY_NUMBERS } from '../constants'\nimport { LogLevel } from '../types'\n\nfunction levelToSeverity(level: LogLevel): number {\n\tswitch (level) {\n\t\tcase 'TRACE':\n\t\t\treturn SEVERITY_NUMBERS.TRACE\n\t\tcase 'DEBUG':\n\t\t\treturn SEVERITY_NUMBERS.DEBUG\n\t\tcase 'INFO':\n\t\t\treturn SEVERITY_NUMBERS.INFO\n\t\tcase 'WARN':\n\t\t\treturn SEVERITY_NUMBERS.WARN\n\t\tcase 'ERROR':\n\t\t\treturn SEVERITY_NUMBERS.ERROR\n\t\tcase 'FATAL':\n\t\t\treturn SEVERITY_NUMBERS.FATAL\n\t}\n}\n\n/**\n * OTLP HTTP/JSON Transport for Logs\n * Sends logs to an OpenTelemetry-compatible backend using OTLP/HTTP protocol\n */\nexport class OTLPTransport implements LogTransport {\n\treadonly name = 'otlp'\n\tprivate headers: Record<string, string>\n\tprivate url: string\n\tprivate minSeverity: number\n\n\tconstructor(config: OTLPTransportConfig) {\n\t\tthis.url = config.url\n\t\tthis.headers = Object.assign({}, DEFAULT_OTLP_HEADERS, config.headers)\n\t\tthis.minSeverity = levelToSeverity(config.level ?? 'TRACE')\n\t}\n\n\texport(logs: ReadableLogRecord[], callback: ExportResultCallback): void {\n\t\tconst filteredLogs = logs.filter((log) => (log.severityNumber ?? 0) >= this.minSeverity)\n\t\tif (filteredLogs.length === 0) {\n\t\t\tcallback({ code: ExportResultCode.SUCCESS })\n\t\t\treturn\n\t\t}\n\n\t\tthis._export(filteredLogs)\n\t\t\t.then(() => {\n\t\t\t\tcallback({ code: ExportResultCode.SUCCESS })\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tcallback({ code: ExportResultCode.FAILED, error })\n\t\t\t})\n\t}\n\n\tprivate async _export(logs: ReadableLogRecord[]): Promise<void> {\n\t\ttry {\n\t\t\tawait this.send(logs)\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tprivate async send(logs: ReadableLogRecord[]): Promise<void> {\n\t\t// Transform to OTLP JSON format\n\t\tconst otlpLogs = this.transformToOTLP(logs)\n\t\tconst body = JSON.stringify(otlpLogs)\n\n\t\tconst params: RequestInit = {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.headers,\n\t\t\tbody,\n\t\t}\n\n\t\tconst response = await unwrap(fetch)(this.url, params)\n\n\t\tif (!response.ok) {\n\t\t\tthrow new OTLPExporterError(`Exporter received a statusCode: ${response.status}`)\n\t\t}\n\t}\n\n\tprivate transformToOTLP(logs: ReadableLogRecord[]): any {\n\t\t// Group logs by resource and scope\n\t\tconst resourceLogsMap = new Map<string, Map<string, ReadableLogRecord[]>>()\n\n\t\tfor (const log of logs) {\n\t\t\tconst resourceKey = JSON.stringify(log.resource.attributes)\n\t\t\tconst scopeKey = JSON.stringify(log.instrumentationScope)\n\n\t\t\tif (!resourceLogsMap.has(resourceKey)) {\n\t\t\t\tresourceLogsMap.set(resourceKey, new Map())\n\t\t\t}\n\n\t\t\tconst scopeLogsMap = resourceLogsMap.get(resourceKey)!\n\t\t\tif (!scopeLogsMap.has(scopeKey)) {\n\t\t\t\tscopeLogsMap.set(scopeKey, [])\n\t\t\t}\n\n\t\t\tscopeLogsMap.get(scopeKey)!.push(log)\n\t\t}\n\n\t\t// Build OTLP structure\n\t\tconst resourceLogs: any[] = []\n\n\t\tfor (const [resourceKey, scopeLogsMap] of resourceLogsMap) {\n\t\t\tconst resource = logs.find((l) => JSON.stringify(l.resource.attributes) === resourceKey)!.resource\n\n\t\t\tconst scopeLogs: any[] = []\n\t\t\tfor (const [_scopeKey, scopeRecords] of scopeLogsMap) {\n\t\t\t\tconst scope = scopeRecords[0]!.instrumentationScope\n\n\t\t\t\tscopeLogs.push({\n\t\t\t\t\tscope: {\n\t\t\t\t\t\tname: scope.name,\n\t\t\t\t\t\tversion: scope.version,\n\t\t\t\t\t},\n\t\t\t\t\tlogRecords: scopeRecords.map((log) => this.transformLogRecord(log)),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tresourceLogs.push({\n\t\t\t\tresource: {\n\t\t\t\t\tattributes: this.transformAttributes(resource.attributes),\n\t\t\t\t},\n\t\t\t\tscopeLogs,\n\t\t\t})\n\t\t}\n\n\t\treturn { resourceLogs }\n\t}\n\n\tprivate transformLogRecord(log: ReadableLogRecord): any {\n\t\tconst record: any = {\n\t\t\ttimeUnixNano: this.hrTimeToString(log.timeUnixNano),\n\t\t\tobservedTimeUnixNano: this.hrTimeToString(log.observedTimeUnixNano),\n\t\t\tseverityNumber: log.severityNumber,\n\t\t\tseverityText: log.severityText,\n\t\t\tbody: this.transformBody(log.body),\n\t\t\tattributes: this.transformAttributes(log.attributes),\n\t\t\tdroppedAttributesCount: log.droppedAttributesCount || 0,\n\t\t}\n\n\t\tif (log.traceId) {\n\t\t\trecord.traceId = log.traceId\n\t\t}\n\t\tif (log.spanId) {\n\t\t\trecord.spanId = log.spanId\n\t\t}\n\t\tif (log.traceFlags !== undefined) {\n\t\t\trecord.flags = log.traceFlags\n\t\t}\n\n\t\treturn record\n\t}\n\n\tprivate transformBody(body: any): any {\n\t\tif (body === undefined || body === null) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (typeof body === 'string') {\n\t\t\treturn { stringValue: body }\n\t\t}\n\t\t// For objects, JSON stringify\n\t\treturn { stringValue: JSON.stringify(body) }\n\t}\n\n\tprivate transformAttributes(attrs: Record<string, any>): any[] {\n\t\treturn Object.entries(attrs).map(([key, value]) => ({\n\t\t\tkey,\n\t\t\tvalue: this.transformAttributeValue(value),\n\t\t}))\n\t}\n\n\tprivate transformAttributeValue(value: any): any {\n\t\tif (typeof value === 'string') {\n\t\t\treturn { stringValue: value }\n\t\t} else if (typeof value === 'number') {\n\t\t\tif (Number.isInteger(value)) {\n\t\t\t\treturn { intValue: value.toString() }\n\t\t\t}\n\t\t\treturn { doubleValue: value }\n\t\t} else if (typeof value === 'boolean') {\n\t\t\treturn { boolValue: value }\n\t\t} else if (Array.isArray(value)) {\n\t\t\treturn {\n\t\t\t\tarrayValue: {\n\t\t\t\t\tvalues: value.map((v) => this.transformAttributeValue(v)),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\t// Fallback to string\n\t\treturn { stringValue: String(value) }\n\t}\n\n\tprivate hrTimeToString(hrTime: [number, number]): string {\n\t\t// Convert [seconds, nanoseconds] to nanoseconds string\n\t\tconst nanos = BigInt(hrTime[0]) * BigInt(1_000_000_000) + BigInt(hrTime[1])\n\t\treturn nanos.toString()\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\t// No cleanup needed\n\t}\n}\n\n/**\n * Console Transport for Logs\n * Pretty-prints logs to the console for development\n */\nexport class ConsoleTransport implements LogTransport {\n\treadonly name = 'console'\n\tprivate options: ConsoleTransportConfig\n\tprivate minSeverity: number\n\n\tconstructor(options: ConsoleTransportConfig = {}) {\n\t\tthis.options = {\n\t\t\tpretty: options.pretty ?? true,\n\t\t\tcolors: options.colors ?? false,\n\t\t\tincludeTimestamp: options.includeTimestamp ?? true,\n\t\t\ttransformLog: options.transformLog ?? ((l) => l),\n\t\t}\n\t\tthis.minSeverity = levelToSeverity(options.level ?? 'TRACE')\n\t}\n\n\texport(logs: ReadableLogRecord[], callback: ExportResultCallback): void {\n\t\ttry {\n\t\t\tfor (const log of logs) {\n\t\t\t\tif ((log.severityNumber ?? 0) < this.minSeverity) continue\n\t\t\t\tthis.printLog(this.options.transformLog ? this.options.transformLog(log) : log)\n\t\t\t}\n\t\t\tcallback({ code: ExportResultCode.SUCCESS })\n\t\t} catch (error) {\n\t\t\tcallback({ code: ExportResultCode.FAILED, error: error as Error })\n\t\t}\n\t}\n\n\tprivate printLog(log: ReadableLogRecord): void {\n\t\tif (this.options.pretty) {\n\t\t\tthis.prettyPrint(log)\n\t\t} else {\n\t\t\tconsole.log(JSON.stringify(this.serializeLog(log)))\n\t\t}\n\t}\n\n\tprivate prettyPrint(log: ReadableLogRecord): void {\n\t\tconst parts: string[] = []\n\n\t\t// Timestamp\n\t\tif (this.options.includeTimestamp) {\n\t\t\tconst timestamp = new Date(log.timeUnixNano[0] * 1000).toISOString()\n\t\t\tparts.push(`[${timestamp}]`)\n\t\t}\n\n\t\t// Severity\n\t\tconst severity = log.severityText || this.getSeverityText(log.severityNumber)\n\t\tparts.push(severity.padEnd(5))\n\n\t\t// Trace context\n\t\tif (log.traceId) {\n\t\t\tparts.push(`[trace: ${log.traceId.substring(0, 16)}...]`)\n\t\t}\n\n\t\t// Body\n\t\tconst body = typeof log.body === 'string' ? log.body : JSON.stringify(log.body)\n\t\tparts.push(body)\n\n\t\t// Log the message\n\t\tconst message = parts.join(' ')\n\n\t\t// Route to appropriate console method\n\t\tswitch (severity) {\n\t\t\tcase 'TRACE':\n\t\t\tcase 'DEBUG':\n\t\t\t\tconsole.debug(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tcase 'INFO':\n\t\t\t\tconsole.info(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tcase 'WARN':\n\t\t\t\tconsole.warn(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tcase 'ERROR':\n\t\t\tcase 'FATAL':\n\t\t\t\tconsole.error(message, log.attributes)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tconsole.log(message, log.attributes)\n\t\t}\n\t}\n\n\tprivate serializeLog(log: ReadableLogRecord): any {\n\t\treturn {\n\t\t\ttimestamp: new Date(log.timeUnixNano[0] * 1000).toISOString(),\n\t\t\tseverity: log.severityText || this.getSeverityText(log.severityNumber),\n\t\t\tbody: log.body,\n\t\t\tattributes: log.attributes,\n\t\t\ttraceId: log.traceId,\n\t\t\tspanId: log.spanId,\n\t\t\tresource: log.resource.attributes,\n\t\t\tscope: log.instrumentationScope,\n\t\t}\n\t}\n\n\tprivate getSeverityText(severityNumber?: number): string {\n\t\tif (!severityNumber) return 'INFO'\n\t\tif (severityNumber <= 4) return 'TRACE'\n\t\tif (severityNumber <= 8) return 'DEBUG'\n\t\tif (severityNumber <= 12) return 'INFO'\n\t\tif (severityNumber <= 16) return 'WARN'\n\t\tif (severityNumber <= 20) return 'ERROR'\n\t\treturn 'FATAL'\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\t// No cleanup needed\n\t}\n}\n"],"names":["millisToHr","getHrTime","context","api_context","span","headers","target","prop","dbSystem","fetcher","DurableObjectClass","cold_start","env","result","scheduler"],"mappings":"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"}
|