autotel-aws 0.13.13 → 0.13.14

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.
Files changed (205) hide show
  1. package/dist/attributes.cjs +155 -46
  2. package/dist/attributes.cjs.map +1 -1
  3. package/dist/attributes.d.cts +64 -62
  4. package/dist/attributes.d.cts.map +1 -0
  5. package/dist/attributes.d.ts +64 -62
  6. package/dist/attributes.d.ts.map +1 -0
  7. package/dist/attributes.js +146 -3
  8. package/dist/attributes.js.map +1 -1
  9. package/dist/cloudwatch.cjs +324 -358
  10. package/dist/cloudwatch.cjs.map +1 -1
  11. package/dist/cloudwatch.d.cts +126 -153
  12. package/dist/cloudwatch.d.cts.map +1 -0
  13. package/dist/cloudwatch.d.ts +126 -153
  14. package/dist/cloudwatch.d.ts.map +1 -0
  15. package/dist/cloudwatch.js +323 -356
  16. package/dist/cloudwatch.js.map +1 -1
  17. package/dist/config-D8QZwF1e.d.ts +123 -0
  18. package/dist/config-D8QZwF1e.d.ts.map +1 -0
  19. package/dist/config-SPkMWWXY.d.cts +123 -0
  20. package/dist/config-SPkMWWXY.d.cts.map +1 -0
  21. package/dist/dynamodb.cjs +89 -11
  22. package/dist/dynamodb.cjs.map +1 -1
  23. package/dist/dynamodb.d.cts +15 -63
  24. package/dist/dynamodb.d.cts.map +1 -0
  25. package/dist/dynamodb.d.ts +15 -63
  26. package/dist/dynamodb.d.ts.map +1 -0
  27. package/dist/dynamodb.js +90 -4
  28. package/dist/dynamodb.js.map +1 -1
  29. package/dist/eventbridge.cjs +423 -261
  30. package/dist/eventbridge.cjs.map +1 -1
  31. package/dist/eventbridge.d.cts +113 -174
  32. package/dist/eventbridge.d.cts.map +1 -0
  33. package/dist/eventbridge.d.ts +113 -174
  34. package/dist/eventbridge.d.ts.map +1 -0
  35. package/dist/eventbridge.js +422 -259
  36. package/dist/eventbridge.js.map +1 -1
  37. package/dist/index.cjs +117 -241
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.cts +42 -55
  40. package/dist/index.d.cts.map +1 -0
  41. package/dist/index.d.ts +42 -55
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +62 -41
  44. package/dist/index.js.map +1 -1
  45. package/dist/kinesis.cjs +485 -20
  46. package/dist/kinesis.cjs.map +1 -1
  47. package/dist/kinesis.d.cts +179 -226
  48. package/dist/kinesis.d.cts.map +1 -0
  49. package/dist/kinesis.d.ts +179 -226
  50. package/dist/kinesis.d.ts.map +1 -0
  51. package/dist/kinesis.js +484 -5
  52. package/dist/kinesis.js.map +1 -1
  53. package/dist/lambda-B0LQa5vS.d.ts +168 -0
  54. package/dist/lambda-B0LQa5vS.d.ts.map +1 -0
  55. package/dist/lambda-DR33vPpL.cjs +500 -0
  56. package/dist/lambda-DR33vPpL.cjs.map +1 -0
  57. package/dist/lambda-DYyKH-f-.js +453 -0
  58. package/dist/lambda-DYyKH-f-.js.map +1 -0
  59. package/dist/lambda-DnroO4Od.d.cts +168 -0
  60. package/dist/lambda-DnroO4Od.d.cts.map +1 -0
  61. package/dist/lambda-auto.cjs +33 -16
  62. package/dist/lambda-auto.cjs.map +1 -1
  63. package/dist/lambda-auto.d.cts +1 -2
  64. package/dist/lambda-auto.d.ts +1 -2
  65. package/dist/lambda-auto.js +35 -15
  66. package/dist/lambda-auto.js.map +1 -1
  67. package/dist/lambda.cjs +11 -42
  68. package/dist/lambda.d.cts +3 -231
  69. package/dist/lambda.d.ts +3 -231
  70. package/dist/lambda.js +3 -5
  71. package/dist/s3.cjs +70 -11
  72. package/dist/s3.cjs.map +1 -1
  73. package/dist/s3.d.cts +15 -51
  74. package/dist/s3.d.cts.map +1 -0
  75. package/dist/s3.d.ts +15 -51
  76. package/dist/s3.d.ts.map +1 -0
  77. package/dist/s3.js +71 -4
  78. package/dist/s3.js.map +1 -1
  79. package/dist/sdk-C-o7ngkk.js +198 -0
  80. package/dist/sdk-C-o7ngkk.js.map +1 -0
  81. package/dist/sdk-C9Nvlh7R.cjs +222 -0
  82. package/dist/sdk-C9Nvlh7R.cjs.map +1 -0
  83. package/dist/sdk-CXqc4o_q.d.ts +135 -0
  84. package/dist/sdk-CXqc4o_q.d.ts.map +1 -0
  85. package/dist/sdk-DkAItj4z.d.cts +135 -0
  86. package/dist/sdk-DkAItj4z.d.cts.map +1 -0
  87. package/dist/sdk-wrapper-BDrcyEQ_.cjs +161 -0
  88. package/dist/sdk-wrapper-BDrcyEQ_.cjs.map +1 -0
  89. package/dist/sdk-wrapper-BVr62EfA.js +120 -0
  90. package/dist/sdk-wrapper-BVr62EfA.js.map +1 -0
  91. package/dist/sdk.cjs +8 -31
  92. package/dist/sdk.d.cts +3 -156
  93. package/dist/sdk.d.ts +3 -156
  94. package/dist/sdk.js +3 -6
  95. package/dist/sns.cjs +305 -16
  96. package/dist/sns.cjs.map +1 -1
  97. package/dist/sns.d.cts +109 -155
  98. package/dist/sns.d.cts.map +1 -0
  99. package/dist/sns.d.ts +109 -155
  100. package/dist/sns.d.ts.map +1 -0
  101. package/dist/sns.js +305 -5
  102. package/dist/sns.js.map +1 -1
  103. package/dist/sqs.cjs +455 -20
  104. package/dist/sqs.cjs.map +1 -1
  105. package/dist/sqs.d.cts +191 -240
  106. package/dist/sqs.d.cts.map +1 -0
  107. package/dist/sqs.d.ts +191 -240
  108. package/dist/sqs.d.ts.map +1 -0
  109. package/dist/sqs.js +454 -5
  110. package/dist/sqs.js.map +1 -1
  111. package/dist/step-functions.cjs +557 -32
  112. package/dist/step-functions.cjs.map +1 -1
  113. package/dist/step-functions.d.cts +155 -210
  114. package/dist/step-functions.d.cts.map +1 -0
  115. package/dist/step-functions.d.ts +155 -210
  116. package/dist/step-functions.d.ts.map +1 -0
  117. package/dist/step-functions.js +553 -5
  118. package/dist/step-functions.js.map +1 -1
  119. package/dist/testing.cjs +60 -58
  120. package/dist/testing.cjs.map +1 -1
  121. package/dist/testing.d.cts +20 -23
  122. package/dist/testing.d.cts.map +1 -0
  123. package/dist/testing.d.ts +20 -23
  124. package/dist/testing.d.ts.map +1 -0
  125. package/dist/testing.js +59 -57
  126. package/dist/testing.js.map +1 -1
  127. package/dist/{types-B2Mi8Goj.d.cts → types-0uHbJsBN.d.ts} +5 -7
  128. package/dist/types-0uHbJsBN.d.ts.map +1 -0
  129. package/dist/types-DOUDks8I.d.cts +71 -0
  130. package/dist/types-DOUDks8I.d.cts.map +1 -0
  131. package/dist/types-DOUDks8I.d.ts +71 -0
  132. package/dist/types-DOUDks8I.d.ts.map +1 -0
  133. package/dist/{types-BqTI4s4V.d.ts → types-iyHj03Q1.d.cts} +5 -7
  134. package/dist/types-iyHj03Q1.d.cts.map +1 -0
  135. package/dist/xray-B46i6z6K.js +59 -0
  136. package/dist/xray-B46i6z6K.js.map +1 -0
  137. package/dist/xray-CG4jciQs.d.ts +19 -0
  138. package/dist/xray-CG4jciQs.d.ts.map +1 -0
  139. package/dist/xray-Cd2UiVRA.cjs +75 -0
  140. package/dist/xray-Cd2UiVRA.cjs.map +1 -0
  141. package/dist/xray-DDcKCKKo.d.cts +19 -0
  142. package/dist/xray-DDcKCKKo.d.cts.map +1 -0
  143. package/dist/xray.cjs +10 -23
  144. package/dist/xray.d.cts +3 -24
  145. package/dist/xray.d.ts +3 -24
  146. package/dist/xray.js +3 -5
  147. package/package.json +5 -5
  148. package/dist/chunk-35F3UBOO.cjs +0 -48
  149. package/dist/chunk-35F3UBOO.cjs.map +0 -1
  150. package/dist/chunk-4THGOYZL.js +0 -387
  151. package/dist/chunk-4THGOYZL.js.map +0 -1
  152. package/dist/chunk-CIGXV6HA.js +0 -192
  153. package/dist/chunk-CIGXV6HA.js.map +0 -1
  154. package/dist/chunk-DGUM43GV.js +0 -10
  155. package/dist/chunk-DGUM43GV.js.map +0 -1
  156. package/dist/chunk-DHHLKZHI.cjs +0 -23
  157. package/dist/chunk-DHHLKZHI.cjs.map +0 -1
  158. package/dist/chunk-HMTKKKKP.cjs +0 -390
  159. package/dist/chunk-HMTKKKKP.cjs.map +0 -1
  160. package/dist/chunk-I4CKQ4RD.js +0 -153
  161. package/dist/chunk-I4CKQ4RD.js.map +0 -1
  162. package/dist/chunk-JEQ2X3Z6.cjs +0 -12
  163. package/dist/chunk-JEQ2X3Z6.cjs.map +0 -1
  164. package/dist/chunk-JL33WEVE.js +0 -341
  165. package/dist/chunk-JL33WEVE.js.map +0 -1
  166. package/dist/chunk-JMSFE6FJ.js +0 -24
  167. package/dist/chunk-JMSFE6FJ.js.map +0 -1
  168. package/dist/chunk-JPDJPOIB.js +0 -78
  169. package/dist/chunk-JPDJPOIB.js.map +0 -1
  170. package/dist/chunk-KNRQYDAS.cjs +0 -394
  171. package/dist/chunk-KNRQYDAS.cjs.map +0 -1
  172. package/dist/chunk-NQ65Y5AI.cjs +0 -195
  173. package/dist/chunk-NQ65Y5AI.cjs.map +0 -1
  174. package/dist/chunk-OB4XTAVK.cjs +0 -345
  175. package/dist/chunk-OB4XTAVK.cjs.map +0 -1
  176. package/dist/chunk-OHFR7WX5.js +0 -341
  177. package/dist/chunk-OHFR7WX5.js.map +0 -1
  178. package/dist/chunk-PZGYL7XZ.js +0 -40
  179. package/dist/chunk-PZGYL7XZ.js.map +0 -1
  180. package/dist/chunk-Q3DMMQ7K.cjs +0 -164
  181. package/dist/chunk-Q3DMMQ7K.cjs.map +0 -1
  182. package/dist/chunk-SPC4VYOI.cjs +0 -350
  183. package/dist/chunk-SPC4VYOI.cjs.map +0 -1
  184. package/dist/chunk-UZEJV2YD.cjs +0 -139
  185. package/dist/chunk-UZEJV2YD.cjs.map +0 -1
  186. package/dist/chunk-VZHQH75L.cjs +0 -26
  187. package/dist/chunk-VZHQH75L.cjs.map +0 -1
  188. package/dist/chunk-X6BY6PCK.js +0 -386
  189. package/dist/chunk-X6BY6PCK.js.map +0 -1
  190. package/dist/chunk-XOF2H2PI.cjs +0 -84
  191. package/dist/chunk-XOF2H2PI.cjs.map +0 -1
  192. package/dist/chunk-YG56NRIO.js +0 -131
  193. package/dist/chunk-YG56NRIO.js.map +0 -1
  194. package/dist/chunk-ZPDRKCAR.js +0 -21
  195. package/dist/chunk-ZPDRKCAR.js.map +0 -1
  196. package/dist/config-DbZv4bpy.d.ts +0 -125
  197. package/dist/config-srkLBXZH.d.cts +0 -125
  198. package/dist/lambda.cjs.map +0 -1
  199. package/dist/lambda.js.map +0 -1
  200. package/dist/sdk.cjs.map +0 -1
  201. package/dist/sdk.js.map +0 -1
  202. package/dist/types-B9IaHmGa.d.cts +0 -73
  203. package/dist/types-B9IaHmGa.d.ts +0 -73
  204. package/dist/xray.cjs.map +0 -1
  205. package/dist/xray.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cloudwatch/endpoints.ts","../src/cloudwatch/sigv4.ts","../src/cloudwatch/trace-exporter.ts","../src/cloudwatch/log-exporter.ts","../src/cloudwatch/metric-exporter.ts"],"names":["ExportResultCode","safeReadText"],"mappings":"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","file":"cloudwatch.js","sourcesContent":["/**\n * CloudWatch native OTLP HTTP endpoints.\n *\n * Reference: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPEndpoint.html\n *\n * All three endpoints accept OTLP/HTTP (JSON or protobuf, optional gzip)\n * and require AWS Signature V4 authentication. They land data in:\n *\n * - traces → X-Ray + Application Signals + Transaction Search\n * - logs → CloudWatch Logs (needs x-aws-log-group + x-aws-log-stream headers)\n * - metrics → CloudWatch Metrics, queryable via PromQL\n */\n\nexport interface CloudWatchEndpointInput {\n readonly region: string;\n}\n\n/** Traces — signed against the `xray` service. */\nexport function cloudWatchTracesEndpoint({ region }: CloudWatchEndpointInput): string {\n return `https://xray.${region}.amazonaws.com/v1/traces`;\n}\n\n/** Logs — signed against the `logs` service. Requires log group/stream headers. */\nexport function cloudWatchLogsEndpoint({ region }: CloudWatchEndpointInput): string {\n return `https://logs.${region}.amazonaws.com/v1/logs`;\n}\n\n/** Metrics — signed against the `monitoring` service. */\nexport function cloudWatchMetricsEndpoint({ region }: CloudWatchEndpointInput): string {\n return `https://monitoring.${region}.amazonaws.com/v1/metrics`;\n}\n\n/**\n * The SigV4 service name used when signing requests for each endpoint.\n * These do NOT always match the host prefix — they're the canonical\n * AWS service identifiers used by the SigV4 signer.\n */\nexport const SIGV4_SERVICE = {\n traces: 'xray',\n logs: 'logs',\n metrics: 'monitoring',\n} as const;\n\nexport type CloudWatchSignal = keyof typeof SIGV4_SERVICE;\n","/**\n * SigV4 signing helper for CloudWatch OTLP HTTP endpoints.\n *\n * Uses `@smithy/signature-v4` + `@aws-crypto/sha256-js` (optional peer deps).\n * Returns the headers required to POST a signed OTLP request.\n */\n\nimport type { CloudWatchSignal } from './endpoints';\nimport { SIGV4_SERVICE } from './endpoints';\n\nexport interface AwsCredentialsLike {\n readonly accessKeyId: string;\n readonly secretAccessKey: string;\n readonly sessionToken?: string;\n}\n\nexport type AwsCredentialsProvider =\n | AwsCredentialsLike\n | (() => AwsCredentialsLike | Promise<AwsCredentialsLike>);\n\nexport interface SignOtlpRequestInput {\n /** The full endpoint URL (e.g. https://xray.eu-west-1.amazonaws.com/v1/traces). */\n url: string;\n /** OTLP payload — already serialized + (optionally) gzipped. */\n body: Uint8Array;\n /** AWS region (e.g. \"eu-west-1\"). Must match the host. */\n region: string;\n /** Which CloudWatch endpoint we're hitting (selects the SigV4 service name). */\n signal: CloudWatchSignal;\n /** Static credentials or a provider. Falls back to the AWS SDK default chain when omitted. */\n credentials?: AwsCredentialsProvider;\n /** Extra headers to include in the canonical request (signed). */\n additionalHeaders?: Record<string, string>;\n /** Content-Type — defaults to OTLP/JSON. Use `application/x-protobuf` for proto. */\n contentType?: 'application/json' | 'application/x-protobuf';\n /** Content-Encoding (e.g. \"gzip\"). Omit for identity. */\n contentEncoding?: 'gzip';\n}\n\n/**\n * Compute SigV4-signed headers for an OTLP HTTP POST to a CloudWatch endpoint.\n *\n * Throws if the optional `@smithy/signature-v4` / `@aws-crypto/sha256-js`\n * peer dependencies aren't installed — install them alongside autotel-aws\n * when you want to ship telemetry directly from app code (no collector).\n */\nexport async function signCloudWatchOtlpRequest(\n input: SignOtlpRequestInput,\n): Promise<Record<string, string>> {\n const { SignatureV4 } = await loadSigV4();\n const { Sha256 } = await loadSha256();\n\n const credentials = await resolveCredentials(input.credentials);\n const parsed = new URL(input.url);\n const contentType = input.contentType ?? 'application/json';\n\n const headers: Record<string, string> = {\n host: parsed.host,\n 'content-type': contentType,\n ...(input.contentEncoding && { 'content-encoding': input.contentEncoding }),\n ...input.additionalHeaders,\n };\n\n const signer = new SignatureV4({\n service: SIGV4_SERVICE[input.signal],\n region: input.region,\n credentials,\n sha256: Sha256,\n });\n\n const signed = await signer.sign({\n method: 'POST',\n protocol: parsed.protocol,\n hostname: parsed.hostname,\n port: parsed.port ? Number(parsed.port) : undefined,\n path: parsed.pathname + parsed.search,\n headers,\n body: input.body,\n });\n\n return signed.headers as Record<string, string>;\n}\n\nasync function resolveCredentials(\n source: AwsCredentialsProvider | undefined,\n): Promise<AwsCredentialsLike> {\n if (typeof source === 'function') return source();\n if (source) return source;\n return loadDefaultCredentials();\n}\n\nasync function loadDefaultCredentials(): Promise<AwsCredentialsLike> {\n try {\n // Optional peer dep — only required when caller doesn't pass credentials.\n const mod = await import('@aws-sdk/credential-providers');\n return await mod.fromNodeProviderChain()();\n } catch (error) {\n throw new Error(\n 'autotel-aws/cloudwatch: no credentials supplied and `@aws-sdk/credential-providers` is not installed. ' +\n 'Either pass `credentials` explicitly or install the package.',\n { cause: error },\n );\n }\n}\n\nasync function loadSigV4(): Promise<typeof import('@smithy/signature-v4')> {\n try {\n return await import('@smithy/signature-v4');\n } catch (error) {\n throw new Error(\n 'autotel-aws/cloudwatch: `@smithy/signature-v4` is required to sign OTLP requests. ' +\n 'Install it (and `@aws-crypto/sha256-js`) alongside autotel-aws.',\n { cause: error },\n );\n }\n}\n\nasync function loadSha256(): Promise<typeof import('@aws-crypto/sha256-js')> {\n try {\n return await import('@aws-crypto/sha256-js');\n } catch (error) {\n throw new Error(\n 'autotel-aws/cloudwatch: `@aws-crypto/sha256-js` is required to sign OTLP requests. ' +\n 'Install it alongside `@smithy/signature-v4`.',\n { cause: error },\n );\n }\n}\n","/**\n * SpanExporter that ships OTLP/JSON straight to the CloudWatch traces\n * endpoint (https://xray.<region>.amazonaws.com/v1/traces) using SigV4.\n *\n * No collector required. Useful in Lambda when you don't want to attach\n * the ADOT extension layer, or any other env where you'd rather not run\n * a sidecar.\n *\n * Lands in: X-Ray + Application Signals + Transaction Search.\n */\n\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode } from '@opentelemetry/core';\nimport { JsonTraceSerializer } from '@opentelemetry/otlp-transformer';\nimport type {\n ReadableSpan,\n SpanExporter,\n} from '@opentelemetry/sdk-trace-base';\n\nimport { cloudWatchTracesEndpoint } from './endpoints';\nimport {\n signCloudWatchOtlpRequest,\n type AwsCredentialsProvider,\n} from './sigv4';\n\nexport interface CloudWatchTraceExporterConfig {\n /** AWS region — defaults to `process.env.AWS_REGION`. */\n region?: string;\n /** Override the endpoint (mainly for tests / VPC endpoints). */\n endpoint?: string;\n /** Static credentials or a provider. Defaults to the AWS SDK default chain. */\n credentials?: AwsCredentialsProvider;\n /** Per-export timeout in ms. Defaults to 10s (CloudWatch's documented soft cap). */\n timeoutMs?: number;\n /** Optional `fetch` override (Node 18+ has it globally; useful in tests). */\n fetchImpl?: typeof fetch;\n}\n\n/**\n * OTLP/JSON exporter for CloudWatch's traces endpoint.\n *\n * Use with `BatchSpanProcessor` or `SimpleSpanProcessor` from\n * `@opentelemetry/sdk-trace-base`. For Lambda, `SimpleSpanProcessor`\n * (synchronous export per span) is fine for small workloads;\n * `BatchSpanProcessor` is better for higher-throughput functions but\n * needs `forceFlush()` before the handler returns.\n */\nexport class CloudWatchTraceExporter implements SpanExporter {\n private readonly region: string;\n private readonly endpoint: string;\n private readonly credentials?: AwsCredentialsProvider;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private shutdownOnce = false;\n\n constructor(config: CloudWatchTraceExporterConfig = {}) {\n const region = config.region ?? process.env.AWS_REGION;\n if (!region) {\n throw new Error(\n 'CloudWatchTraceExporter: `region` is required (pass it explicitly or set AWS_REGION).',\n );\n }\n this.region = region;\n this.endpoint = config.endpoint ?? cloudWatchTracesEndpoint({ region });\n this.credentials = config.credentials;\n this.timeoutMs = config.timeoutMs ?? 10_000;\n this.fetchImpl = config.fetchImpl ?? globalThis.fetch;\n if (typeof this.fetchImpl !== 'function') {\n throw new TypeError(\n 'CloudWatchTraceExporter: global `fetch` is not available — pass `fetchImpl` explicitly (Node 18+ has it natively).',\n );\n }\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this.shutdownOnce) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('CloudWatchTraceExporter: already shut down'),\n });\n return;\n }\n if (spans.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.sendBatch(spans).then(\n () => resultCallback({ code: ExportResultCode.SUCCESS }),\n (error: unknown) =>\n resultCallback({\n code: ExportResultCode.FAILED,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n }\n\n async shutdown(): Promise<void> {\n this.shutdownOnce = true;\n }\n\n async forceFlush(): Promise<void> {\n // Batching is the responsibility of the span processor. Nothing to flush here.\n }\n\n private async sendBatch(spans: ReadableSpan[]): Promise<void> {\n const body = JsonTraceSerializer.serializeRequest(spans);\n if (!body) {\n throw new Error('CloudWatchTraceExporter: serializer produced no body');\n }\n\n const headers = await signCloudWatchOtlpRequest({\n url: this.endpoint,\n body,\n region: this.region,\n signal: 'traces',\n credentials: this.credentials,\n contentType: 'application/json',\n });\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let response: Response;\n try {\n response = await this.fetchImpl(this.endpoint, {\n method: 'POST',\n headers,\n body,\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const text = await safeReadText(response);\n throw new Error(\n `CloudWatchTraceExporter: HTTP ${response.status} ${response.statusText} ${text}`.trim(),\n );\n }\n }\n}\n\nasync function safeReadText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n","/**\n * LogRecordExporter that ships OTLP/JSON logs to the CloudWatch logs\n * endpoint (https://logs.<region>.amazonaws.com/v1/logs) using SigV4.\n *\n * CloudWatch Logs requires `x-aws-log-group` and `x-aws-log-stream`\n * headers — both must already exist (this exporter does NOT create them).\n *\n * In Lambda, the runtime auto-provisions a log group + stream per function;\n * read them from `AWS_LAMBDA_LOG_GROUP_NAME` / `AWS_LAMBDA_LOG_STREAM_NAME`\n * (set automatically when the function runs).\n */\n\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode } from '@opentelemetry/core';\nimport { JsonLogsSerializer } from '@opentelemetry/otlp-transformer';\nimport type {\n LogRecordExporter,\n ReadableLogRecord,\n} from '@opentelemetry/sdk-logs';\n\nimport { cloudWatchLogsEndpoint } from './endpoints';\nimport {\n signCloudWatchOtlpRequest,\n type AwsCredentialsProvider,\n} from './sigv4';\n\nexport interface CloudWatchLogExporterConfig {\n region?: string;\n endpoint?: string;\n credentials?: AwsCredentialsProvider;\n /**\n * Existing CloudWatch log group to write into. Defaults to\n * `AWS_LAMBDA_LOG_GROUP_NAME` (set automatically by the Lambda runtime).\n */\n logGroup?: string;\n /**\n * Existing CloudWatch log stream. Defaults to\n * `AWS_LAMBDA_LOG_STREAM_NAME`.\n */\n logStream?: string;\n /**\n * Optional comma-separated list of field paths CloudWatch may truncate\n * if the event exceeds 1 MB (sent as `x-aws-truncatable-fields`).\n */\n truncatableFields?: string;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n}\n\nexport class CloudWatchLogExporter implements LogRecordExporter {\n private readonly region: string;\n private readonly endpoint: string;\n private readonly credentials?: AwsCredentialsProvider;\n private readonly logGroup: string;\n private readonly logStream: string;\n private readonly truncatableFields?: string;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private shutdownOnce = false;\n\n constructor(config: CloudWatchLogExporterConfig = {}) {\n const region = config.region ?? process.env.AWS_REGION;\n if (!region) {\n throw new Error(\n 'CloudWatchLogExporter: `region` is required (pass it explicitly or set AWS_REGION).',\n );\n }\n const logGroup = config.logGroup ?? process.env.AWS_LAMBDA_LOG_GROUP_NAME;\n const logStream = config.logStream ?? process.env.AWS_LAMBDA_LOG_STREAM_NAME;\n if (!logGroup || !logStream) {\n throw new Error(\n 'CloudWatchLogExporter: `logGroup` and `logStream` are required ' +\n '(in Lambda they come from AWS_LAMBDA_LOG_GROUP_NAME / AWS_LAMBDA_LOG_STREAM_NAME).',\n );\n }\n this.region = region;\n this.endpoint = config.endpoint ?? cloudWatchLogsEndpoint({ region });\n this.credentials = config.credentials;\n this.logGroup = logGroup;\n this.logStream = logStream;\n this.truncatableFields = config.truncatableFields;\n this.timeoutMs = config.timeoutMs ?? 10_000;\n this.fetchImpl = config.fetchImpl ?? globalThis.fetch;\n if (typeof this.fetchImpl !== 'function') {\n throw new TypeError(\n 'CloudWatchLogExporter: global `fetch` is not available — pass `fetchImpl` explicitly.',\n );\n }\n }\n\n export(\n logs: ReadableLogRecord[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this.shutdownOnce) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('CloudWatchLogExporter: already shut down'),\n });\n return;\n }\n if (logs.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.sendBatch(logs).then(\n () => resultCallback({ code: ExportResultCode.SUCCESS }),\n (error: unknown) =>\n resultCallback({\n code: ExportResultCode.FAILED,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n }\n\n async shutdown(): Promise<void> {\n this.shutdownOnce = true;\n }\n\n async forceFlush(): Promise<void> {}\n\n private async sendBatch(logs: ReadableLogRecord[]): Promise<void> {\n const body = JsonLogsSerializer.serializeRequest(logs);\n if (!body) {\n throw new Error('CloudWatchLogExporter: serializer produced no body');\n }\n\n const additionalHeaders: Record<string, string> = {\n 'x-aws-log-group': this.logGroup,\n 'x-aws-log-stream': this.logStream,\n };\n if (this.truncatableFields) {\n additionalHeaders['x-aws-truncatable-fields'] = this.truncatableFields;\n }\n\n const headers = await signCloudWatchOtlpRequest({\n url: this.endpoint,\n body,\n region: this.region,\n signal: 'logs',\n credentials: this.credentials,\n contentType: 'application/json',\n additionalHeaders,\n });\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let response: Response;\n try {\n response = await this.fetchImpl(this.endpoint, {\n method: 'POST',\n headers,\n body,\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const text = await safeReadText(response);\n throw new Error(\n `CloudWatchLogExporter: HTTP ${response.status} ${response.statusText} ${text}`.trim(),\n );\n }\n }\n}\n\nasync function safeReadText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n","/**\n * PushMetricExporter that ships OTLP/JSON metrics to the CloudWatch\n * metrics endpoint (https://monitoring.<region>.amazonaws.com/v1/metrics)\n * using SigV4.\n *\n * Lands in: CloudWatch Metrics — queryable via PromQL alongside the AWS\n * vended namespaces.\n */\n\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode } from '@opentelemetry/core';\nimport { JsonMetricsSerializer } from '@opentelemetry/otlp-transformer';\nimport {\n AggregationTemporality,\n type AggregationTemporalitySelector,\n type InstrumentType,\n type PushMetricExporter,\n type ResourceMetrics,\n} from '@opentelemetry/sdk-metrics';\n\nimport { cloudWatchMetricsEndpoint } from './endpoints';\nimport {\n signCloudWatchOtlpRequest,\n type AwsCredentialsProvider,\n} from './sigv4';\n\nexport interface CloudWatchMetricExporterConfig {\n region?: string;\n endpoint?: string;\n credentials?: AwsCredentialsProvider;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n /**\n * Aggregation temporality. CloudWatch's OTLP metrics endpoint accepts\n * delta and cumulative; delta is generally cheaper for counters.\n */\n temporalitySelector?: AggregationTemporalitySelector;\n}\n\nconst DEFAULT_TEMPORALITY: AggregationTemporalitySelector = (\n _instrumentType: InstrumentType,\n) => AggregationTemporality.DELTA;\n\nexport class CloudWatchMetricExporter implements PushMetricExporter {\n private readonly region: string;\n private readonly endpoint: string;\n private readonly credentials?: AwsCredentialsProvider;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly temporalitySelector: AggregationTemporalitySelector;\n private shutdownOnce = false;\n\n constructor(config: CloudWatchMetricExporterConfig = {}) {\n const region = config.region ?? process.env.AWS_REGION;\n if (!region) {\n throw new Error(\n 'CloudWatchMetricExporter: `region` is required (pass it explicitly or set AWS_REGION).',\n );\n }\n this.region = region;\n this.endpoint = config.endpoint ?? cloudWatchMetricsEndpoint({ region });\n this.credentials = config.credentials;\n this.timeoutMs = config.timeoutMs ?? 10_000;\n this.fetchImpl = config.fetchImpl ?? globalThis.fetch;\n this.temporalitySelector =\n config.temporalitySelector ?? DEFAULT_TEMPORALITY;\n if (typeof this.fetchImpl !== 'function') {\n throw new TypeError(\n 'CloudWatchMetricExporter: global `fetch` is not available — pass `fetchImpl` explicitly.',\n );\n }\n }\n\n export(\n metrics: ResourceMetrics,\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this.shutdownOnce) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('CloudWatchMetricExporter: already shut down'),\n });\n return;\n }\n\n this.sendBatch(metrics).then(\n () => resultCallback({ code: ExportResultCode.SUCCESS }),\n (error: unknown) =>\n resultCallback({\n code: ExportResultCode.FAILED,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n }\n\n async shutdown(): Promise<void> {\n this.shutdownOnce = true;\n }\n\n async forceFlush(): Promise<void> {}\n\n selectAggregationTemporality(\n instrumentType: InstrumentType,\n ): AggregationTemporality {\n return this.temporalitySelector(instrumentType);\n }\n\n private async sendBatch(metrics: ResourceMetrics): Promise<void> {\n const body = JsonMetricsSerializer.serializeRequest(metrics);\n if (!body) {\n throw new Error('CloudWatchMetricExporter: serializer produced no body');\n }\n\n const headers = await signCloudWatchOtlpRequest({\n url: this.endpoint,\n body,\n region: this.region,\n signal: 'metrics',\n credentials: this.credentials,\n contentType: 'application/json',\n });\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let response: Response;\n try {\n response = await this.fetchImpl(this.endpoint, {\n method: 'POST',\n headers,\n body,\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const text = await safeReadText(response);\n throw new Error(\n `CloudWatchMetricExporter: HTTP ${response.status} ${response.statusText} ${text}`.trim(),\n );\n }\n }\n}\n\nasync function safeReadText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n"]}
1
+ {"version":3,"file":"cloudwatch.js","names":["safeReadText","safeReadText"],"sources":["../src/cloudwatch/endpoints.ts","../src/cloudwatch/sigv4.ts","../src/cloudwatch/trace-exporter.ts","../src/cloudwatch/log-exporter.ts","../src/cloudwatch/metric-exporter.ts"],"sourcesContent":["/**\n * CloudWatch native OTLP HTTP endpoints.\n *\n * Reference: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPEndpoint.html\n *\n * All three endpoints accept OTLP/HTTP (JSON or protobuf, optional gzip)\n * and require AWS Signature V4 authentication. They land data in:\n *\n * - traces → X-Ray + Application Signals + Transaction Search\n * - logs → CloudWatch Logs (needs x-aws-log-group + x-aws-log-stream headers)\n * - metrics → CloudWatch Metrics, queryable via PromQL\n */\n\nexport interface CloudWatchEndpointInput {\n readonly region: string;\n}\n\n/** Traces — signed against the `xray` service. */\nexport function cloudWatchTracesEndpoint({ region }: CloudWatchEndpointInput): string {\n return `https://xray.${region}.amazonaws.com/v1/traces`;\n}\n\n/** Logs — signed against the `logs` service. Requires log group/stream headers. */\nexport function cloudWatchLogsEndpoint({ region }: CloudWatchEndpointInput): string {\n return `https://logs.${region}.amazonaws.com/v1/logs`;\n}\n\n/** Metrics — signed against the `monitoring` service. */\nexport function cloudWatchMetricsEndpoint({ region }: CloudWatchEndpointInput): string {\n return `https://monitoring.${region}.amazonaws.com/v1/metrics`;\n}\n\n/**\n * The SigV4 service name used when signing requests for each endpoint.\n * These do NOT always match the host prefix — they're the canonical\n * AWS service identifiers used by the SigV4 signer.\n */\nexport const SIGV4_SERVICE = {\n traces: 'xray',\n logs: 'logs',\n metrics: 'monitoring',\n} as const;\n\nexport type CloudWatchSignal = keyof typeof SIGV4_SERVICE;\n","/**\n * SigV4 signing helper for CloudWatch OTLP HTTP endpoints.\n *\n * Uses `@smithy/signature-v4` + `@aws-crypto/sha256-js` (optional peer deps).\n * Returns the headers required to POST a signed OTLP request.\n */\n\nimport type { CloudWatchSignal } from './endpoints';\nimport { SIGV4_SERVICE } from './endpoints';\n\nexport interface AwsCredentialsLike {\n readonly accessKeyId: string;\n readonly secretAccessKey: string;\n readonly sessionToken?: string;\n}\n\nexport type AwsCredentialsProvider =\n | AwsCredentialsLike\n | (() => AwsCredentialsLike | Promise<AwsCredentialsLike>);\n\nexport interface SignOtlpRequestInput {\n /** The full endpoint URL (e.g. https://xray.eu-west-1.amazonaws.com/v1/traces). */\n url: string;\n /** OTLP payload — already serialized + (optionally) gzipped. */\n body: Uint8Array;\n /** AWS region (e.g. \"eu-west-1\"). Must match the host. */\n region: string;\n /** Which CloudWatch endpoint we're hitting (selects the SigV4 service name). */\n signal: CloudWatchSignal;\n /** Static credentials or a provider. Falls back to the AWS SDK default chain when omitted. */\n credentials?: AwsCredentialsProvider;\n /** Extra headers to include in the canonical request (signed). */\n additionalHeaders?: Record<string, string>;\n /** Content-Type — defaults to OTLP/JSON. Use `application/x-protobuf` for proto. */\n contentType?: 'application/json' | 'application/x-protobuf';\n /** Content-Encoding (e.g. \"gzip\"). Omit for identity. */\n contentEncoding?: 'gzip';\n}\n\n/**\n * Compute SigV4-signed headers for an OTLP HTTP POST to a CloudWatch endpoint.\n *\n * Throws if the optional `@smithy/signature-v4` / `@aws-crypto/sha256-js`\n * peer dependencies aren't installed — install them alongside autotel-aws\n * when you want to ship telemetry directly from app code (no collector).\n */\nexport async function signCloudWatchOtlpRequest(\n input: SignOtlpRequestInput,\n): Promise<Record<string, string>> {\n const { SignatureV4 } = await loadSigV4();\n const { Sha256 } = await loadSha256();\n\n const credentials = await resolveCredentials(input.credentials);\n const parsed = new URL(input.url);\n const contentType = input.contentType ?? 'application/json';\n\n const headers: Record<string, string> = {\n host: parsed.host,\n 'content-type': contentType,\n ...(input.contentEncoding && { 'content-encoding': input.contentEncoding }),\n ...input.additionalHeaders,\n };\n\n const signer = new SignatureV4({\n service: SIGV4_SERVICE[input.signal],\n region: input.region,\n credentials,\n sha256: Sha256,\n });\n\n const signed = await signer.sign({\n method: 'POST',\n protocol: parsed.protocol,\n hostname: parsed.hostname,\n port: parsed.port ? Number(parsed.port) : undefined,\n path: parsed.pathname + parsed.search,\n headers,\n body: input.body,\n });\n\n return signed.headers as Record<string, string>;\n}\n\nasync function resolveCredentials(\n source: AwsCredentialsProvider | undefined,\n): Promise<AwsCredentialsLike> {\n if (typeof source === 'function') return source();\n if (source) return source;\n return loadDefaultCredentials();\n}\n\nasync function loadDefaultCredentials(): Promise<AwsCredentialsLike> {\n try {\n // Optional peer dep — only required when caller doesn't pass credentials.\n const mod = await import('@aws-sdk/credential-providers');\n return await mod.fromNodeProviderChain()();\n } catch (error) {\n throw new Error(\n 'autotel-aws/cloudwatch: no credentials supplied and `@aws-sdk/credential-providers` is not installed. ' +\n 'Either pass `credentials` explicitly or install the package.',\n { cause: error },\n );\n }\n}\n\nasync function loadSigV4(): Promise<typeof import('@smithy/signature-v4')> {\n try {\n return await import('@smithy/signature-v4');\n } catch (error) {\n throw new Error(\n 'autotel-aws/cloudwatch: `@smithy/signature-v4` is required to sign OTLP requests. ' +\n 'Install it (and `@aws-crypto/sha256-js`) alongside autotel-aws.',\n { cause: error },\n );\n }\n}\n\nasync function loadSha256(): Promise<typeof import('@aws-crypto/sha256-js')> {\n try {\n return await import('@aws-crypto/sha256-js');\n } catch (error) {\n throw new Error(\n 'autotel-aws/cloudwatch: `@aws-crypto/sha256-js` is required to sign OTLP requests. ' +\n 'Install it alongside `@smithy/signature-v4`.',\n { cause: error },\n );\n }\n}\n","/**\n * SpanExporter that ships OTLP/JSON straight to the CloudWatch traces\n * endpoint (https://xray.<region>.amazonaws.com/v1/traces) using SigV4.\n *\n * No collector required. Useful in Lambda when you don't want to attach\n * the ADOT extension layer, or any other env where you'd rather not run\n * a sidecar.\n *\n * Lands in: X-Ray + Application Signals + Transaction Search.\n */\n\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode } from '@opentelemetry/core';\nimport { JsonTraceSerializer } from '@opentelemetry/otlp-transformer';\nimport type {\n ReadableSpan,\n SpanExporter,\n} from '@opentelemetry/sdk-trace-base';\n\nimport { cloudWatchTracesEndpoint } from './endpoints';\nimport {\n signCloudWatchOtlpRequest,\n type AwsCredentialsProvider,\n} from './sigv4';\n\nexport interface CloudWatchTraceExporterConfig {\n /** AWS region — defaults to `process.env.AWS_REGION`. */\n region?: string;\n /** Override the endpoint (mainly for tests / VPC endpoints). */\n endpoint?: string;\n /** Static credentials or a provider. Defaults to the AWS SDK default chain. */\n credentials?: AwsCredentialsProvider;\n /** Per-export timeout in ms. Defaults to 10s (CloudWatch's documented soft cap). */\n timeoutMs?: number;\n /** Optional `fetch` override (Node 18+ has it globally; useful in tests). */\n fetchImpl?: typeof fetch;\n}\n\n/**\n * OTLP/JSON exporter for CloudWatch's traces endpoint.\n *\n * Use with `BatchSpanProcessor` or `SimpleSpanProcessor` from\n * `@opentelemetry/sdk-trace-base`. For Lambda, `SimpleSpanProcessor`\n * (synchronous export per span) is fine for small workloads;\n * `BatchSpanProcessor` is better for higher-throughput functions but\n * needs `forceFlush()` before the handler returns.\n */\nexport class CloudWatchTraceExporter implements SpanExporter {\n private readonly region: string;\n private readonly endpoint: string;\n private readonly credentials?: AwsCredentialsProvider;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private shutdownOnce = false;\n\n constructor(config: CloudWatchTraceExporterConfig = {}) {\n const region = config.region ?? process.env.AWS_REGION;\n if (!region) {\n throw new Error(\n 'CloudWatchTraceExporter: `region` is required (pass it explicitly or set AWS_REGION).',\n );\n }\n this.region = region;\n this.endpoint = config.endpoint ?? cloudWatchTracesEndpoint({ region });\n this.credentials = config.credentials;\n this.timeoutMs = config.timeoutMs ?? 10_000;\n this.fetchImpl = config.fetchImpl ?? globalThis.fetch;\n if (typeof this.fetchImpl !== 'function') {\n throw new TypeError(\n 'CloudWatchTraceExporter: global `fetch` is not available — pass `fetchImpl` explicitly (Node 18+ has it natively).',\n );\n }\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this.shutdownOnce) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('CloudWatchTraceExporter: already shut down'),\n });\n return;\n }\n if (spans.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.sendBatch(spans).then(\n () => resultCallback({ code: ExportResultCode.SUCCESS }),\n (error: unknown) =>\n resultCallback({\n code: ExportResultCode.FAILED,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n }\n\n async shutdown(): Promise<void> {\n this.shutdownOnce = true;\n }\n\n async forceFlush(): Promise<void> {\n // Batching is the responsibility of the span processor. Nothing to flush here.\n }\n\n private async sendBatch(spans: ReadableSpan[]): Promise<void> {\n const body = JsonTraceSerializer.serializeRequest(spans);\n if (!body) {\n throw new Error('CloudWatchTraceExporter: serializer produced no body');\n }\n\n const headers = await signCloudWatchOtlpRequest({\n url: this.endpoint,\n body,\n region: this.region,\n signal: 'traces',\n credentials: this.credentials,\n contentType: 'application/json',\n });\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let response: Response;\n try {\n response = await this.fetchImpl(this.endpoint, {\n method: 'POST',\n headers,\n body,\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const text = await safeReadText(response);\n throw new Error(\n `CloudWatchTraceExporter: HTTP ${response.status} ${response.statusText} ${text}`.trim(),\n );\n }\n }\n}\n\nasync function safeReadText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n","/**\n * LogRecordExporter that ships OTLP/JSON logs to the CloudWatch logs\n * endpoint (https://logs.<region>.amazonaws.com/v1/logs) using SigV4.\n *\n * CloudWatch Logs requires `x-aws-log-group` and `x-aws-log-stream`\n * headers — both must already exist (this exporter does NOT create them).\n *\n * In Lambda, the runtime auto-provisions a log group + stream per function;\n * read them from `AWS_LAMBDA_LOG_GROUP_NAME` / `AWS_LAMBDA_LOG_STREAM_NAME`\n * (set automatically when the function runs).\n */\n\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode } from '@opentelemetry/core';\nimport { JsonLogsSerializer } from '@opentelemetry/otlp-transformer';\nimport type {\n LogRecordExporter,\n ReadableLogRecord,\n} from '@opentelemetry/sdk-logs';\n\nimport { cloudWatchLogsEndpoint } from './endpoints';\nimport {\n signCloudWatchOtlpRequest,\n type AwsCredentialsProvider,\n} from './sigv4';\n\nexport interface CloudWatchLogExporterConfig {\n region?: string;\n endpoint?: string;\n credentials?: AwsCredentialsProvider;\n /**\n * Existing CloudWatch log group to write into. Defaults to\n * `AWS_LAMBDA_LOG_GROUP_NAME` (set automatically by the Lambda runtime).\n */\n logGroup?: string;\n /**\n * Existing CloudWatch log stream. Defaults to\n * `AWS_LAMBDA_LOG_STREAM_NAME`.\n */\n logStream?: string;\n /**\n * Optional comma-separated list of field paths CloudWatch may truncate\n * if the event exceeds 1 MB (sent as `x-aws-truncatable-fields`).\n */\n truncatableFields?: string;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n}\n\nexport class CloudWatchLogExporter implements LogRecordExporter {\n private readonly region: string;\n private readonly endpoint: string;\n private readonly credentials?: AwsCredentialsProvider;\n private readonly logGroup: string;\n private readonly logStream: string;\n private readonly truncatableFields?: string;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private shutdownOnce = false;\n\n constructor(config: CloudWatchLogExporterConfig = {}) {\n const region = config.region ?? process.env.AWS_REGION;\n if (!region) {\n throw new Error(\n 'CloudWatchLogExporter: `region` is required (pass it explicitly or set AWS_REGION).',\n );\n }\n const logGroup = config.logGroup ?? process.env.AWS_LAMBDA_LOG_GROUP_NAME;\n const logStream = config.logStream ?? process.env.AWS_LAMBDA_LOG_STREAM_NAME;\n if (!logGroup || !logStream) {\n throw new Error(\n 'CloudWatchLogExporter: `logGroup` and `logStream` are required ' +\n '(in Lambda they come from AWS_LAMBDA_LOG_GROUP_NAME / AWS_LAMBDA_LOG_STREAM_NAME).',\n );\n }\n this.region = region;\n this.endpoint = config.endpoint ?? cloudWatchLogsEndpoint({ region });\n this.credentials = config.credentials;\n this.logGroup = logGroup;\n this.logStream = logStream;\n this.truncatableFields = config.truncatableFields;\n this.timeoutMs = config.timeoutMs ?? 10_000;\n this.fetchImpl = config.fetchImpl ?? globalThis.fetch;\n if (typeof this.fetchImpl !== 'function') {\n throw new TypeError(\n 'CloudWatchLogExporter: global `fetch` is not available — pass `fetchImpl` explicitly.',\n );\n }\n }\n\n export(\n logs: ReadableLogRecord[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this.shutdownOnce) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('CloudWatchLogExporter: already shut down'),\n });\n return;\n }\n if (logs.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.sendBatch(logs).then(\n () => resultCallback({ code: ExportResultCode.SUCCESS }),\n (error: unknown) =>\n resultCallback({\n code: ExportResultCode.FAILED,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n }\n\n async shutdown(): Promise<void> {\n this.shutdownOnce = true;\n }\n\n async forceFlush(): Promise<void> {}\n\n private async sendBatch(logs: ReadableLogRecord[]): Promise<void> {\n const body = JsonLogsSerializer.serializeRequest(logs);\n if (!body) {\n throw new Error('CloudWatchLogExporter: serializer produced no body');\n }\n\n const additionalHeaders: Record<string, string> = {\n 'x-aws-log-group': this.logGroup,\n 'x-aws-log-stream': this.logStream,\n };\n if (this.truncatableFields) {\n additionalHeaders['x-aws-truncatable-fields'] = this.truncatableFields;\n }\n\n const headers = await signCloudWatchOtlpRequest({\n url: this.endpoint,\n body,\n region: this.region,\n signal: 'logs',\n credentials: this.credentials,\n contentType: 'application/json',\n additionalHeaders,\n });\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let response: Response;\n try {\n response = await this.fetchImpl(this.endpoint, {\n method: 'POST',\n headers,\n body,\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const text = await safeReadText(response);\n throw new Error(\n `CloudWatchLogExporter: HTTP ${response.status} ${response.statusText} ${text}`.trim(),\n );\n }\n }\n}\n\nasync function safeReadText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n","/**\n * PushMetricExporter that ships OTLP/JSON metrics to the CloudWatch\n * metrics endpoint (https://monitoring.<region>.amazonaws.com/v1/metrics)\n * using SigV4.\n *\n * Lands in: CloudWatch Metrics — queryable via PromQL alongside the AWS\n * vended namespaces.\n */\n\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode } from '@opentelemetry/core';\nimport { JsonMetricsSerializer } from '@opentelemetry/otlp-transformer';\nimport {\n AggregationTemporality,\n type AggregationTemporalitySelector,\n type InstrumentType,\n type PushMetricExporter,\n type ResourceMetrics,\n} from '@opentelemetry/sdk-metrics';\n\nimport { cloudWatchMetricsEndpoint } from './endpoints';\nimport {\n signCloudWatchOtlpRequest,\n type AwsCredentialsProvider,\n} from './sigv4';\n\nexport interface CloudWatchMetricExporterConfig {\n region?: string;\n endpoint?: string;\n credentials?: AwsCredentialsProvider;\n timeoutMs?: number;\n fetchImpl?: typeof fetch;\n /**\n * Aggregation temporality. CloudWatch's OTLP metrics endpoint accepts\n * delta and cumulative; delta is generally cheaper for counters.\n */\n temporalitySelector?: AggregationTemporalitySelector;\n}\n\nconst DEFAULT_TEMPORALITY: AggregationTemporalitySelector = (\n _instrumentType: InstrumentType,\n) => AggregationTemporality.DELTA;\n\nexport class CloudWatchMetricExporter implements PushMetricExporter {\n private readonly region: string;\n private readonly endpoint: string;\n private readonly credentials?: AwsCredentialsProvider;\n private readonly timeoutMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly temporalitySelector: AggregationTemporalitySelector;\n private shutdownOnce = false;\n\n constructor(config: CloudWatchMetricExporterConfig = {}) {\n const region = config.region ?? process.env.AWS_REGION;\n if (!region) {\n throw new Error(\n 'CloudWatchMetricExporter: `region` is required (pass it explicitly or set AWS_REGION).',\n );\n }\n this.region = region;\n this.endpoint = config.endpoint ?? cloudWatchMetricsEndpoint({ region });\n this.credentials = config.credentials;\n this.timeoutMs = config.timeoutMs ?? 10_000;\n this.fetchImpl = config.fetchImpl ?? globalThis.fetch;\n this.temporalitySelector =\n config.temporalitySelector ?? DEFAULT_TEMPORALITY;\n if (typeof this.fetchImpl !== 'function') {\n throw new TypeError(\n 'CloudWatchMetricExporter: global `fetch` is not available — pass `fetchImpl` explicitly.',\n );\n }\n }\n\n export(\n metrics: ResourceMetrics,\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this.shutdownOnce) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('CloudWatchMetricExporter: already shut down'),\n });\n return;\n }\n\n this.sendBatch(metrics).then(\n () => resultCallback({ code: ExportResultCode.SUCCESS }),\n (error: unknown) =>\n resultCallback({\n code: ExportResultCode.FAILED,\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n );\n }\n\n async shutdown(): Promise<void> {\n this.shutdownOnce = true;\n }\n\n async forceFlush(): Promise<void> {}\n\n selectAggregationTemporality(\n instrumentType: InstrumentType,\n ): AggregationTemporality {\n return this.temporalitySelector(instrumentType);\n }\n\n private async sendBatch(metrics: ResourceMetrics): Promise<void> {\n const body = JsonMetricsSerializer.serializeRequest(metrics);\n if (!body) {\n throw new Error('CloudWatchMetricExporter: serializer produced no body');\n }\n\n const headers = await signCloudWatchOtlpRequest({\n url: this.endpoint,\n body,\n region: this.region,\n signal: 'metrics',\n credentials: this.credentials,\n contentType: 'application/json',\n });\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n let response: Response;\n try {\n response = await this.fetchImpl(this.endpoint, {\n method: 'POST',\n headers,\n body,\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timer);\n }\n\n if (!response.ok) {\n const text = await safeReadText(response);\n throw new Error(\n `CloudWatchMetricExporter: HTTP ${response.status} ${response.statusText} ${text}`.trim(),\n );\n }\n }\n}\n\nasync function safeReadText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { n as AWSServiceConfig } from "./types-DOUDks8I.js";
2
+
3
+ //#region src/config.d.ts
4
+ /**
5
+ * AWS resource detector configuration
6
+ */
7
+ interface AWSResourceDetectorConfig {
8
+ /**
9
+ * Auto-detect EC2 instance metadata
10
+ * @default true
11
+ */
12
+ ec2?: boolean;
13
+ /**
14
+ * Auto-detect ECS task metadata
15
+ * @default true
16
+ */
17
+ ecs?: boolean;
18
+ /**
19
+ * Auto-detect EKS cluster metadata
20
+ * @default true
21
+ */
22
+ eks?: boolean;
23
+ /**
24
+ * Auto-detect Lambda function metadata
25
+ * @default true
26
+ */
27
+ lambda?: boolean;
28
+ }
29
+ /**
30
+ * AWS initialization configuration
31
+ */
32
+ interface AWSInitConfig {
33
+ /**
34
+ * Service name
35
+ */
36
+ service: string;
37
+ /**
38
+ * OTLP endpoint
39
+ */
40
+ endpoint?: string;
41
+ /**
42
+ * OTLP headers (e.g., authentication tokens)
43
+ */
44
+ headers?: Record<string, string>;
45
+ /**
46
+ * Auto-detect AWS resources
47
+ * @default false
48
+ */
49
+ autoDetectResources?: boolean | AWSResourceDetectorConfig;
50
+ /**
51
+ * AWS region
52
+ */
53
+ region?: string;
54
+ /**
55
+ * Additional resource attributes
56
+ */
57
+ resourceAttributes?: Record<string, string>;
58
+ }
59
+ /**
60
+ * Lambda instrumentation configuration
61
+ */
62
+ interface LambdaInstrumentationConfig {
63
+ /**
64
+ * Capture response in span attributes
65
+ * @default false
66
+ */
67
+ captureResponse?: boolean;
68
+ /**
69
+ * Extract trace context from event
70
+ * @default true
71
+ */
72
+ extractTraceContext?: boolean;
73
+ /**
74
+ * Service name override
75
+ */
76
+ service?: string;
77
+ }
78
+ /**
79
+ * SDK instrumentation configuration
80
+ */
81
+ interface SDKInstrumentationConfig {
82
+ /**
83
+ * Capture request payload
84
+ * @default false
85
+ */
86
+ captureRequest?: boolean;
87
+ /**
88
+ * Capture response payload
89
+ * @default false
90
+ */
91
+ captureResponse?: boolean;
92
+ /**
93
+ * Service name override
94
+ */
95
+ service?: string;
96
+ }
97
+ /**
98
+ * X-Ray configuration
99
+ */
100
+ interface XRayConfig {
101
+ /**
102
+ * Enable X-Ray propagator
103
+ * @default false
104
+ */
105
+ propagator?: boolean;
106
+ /**
107
+ * Enable X-Ray remote sampling
108
+ * @default false
109
+ */
110
+ remoteSampling?: boolean;
111
+ /**
112
+ * Use X-Ray trace ID format
113
+ * @default false
114
+ */
115
+ idGenerator?: boolean;
116
+ }
117
+ /**
118
+ * Merge AWS service config with defaults
119
+ */
120
+ declare function mergeServiceConfig(config?: AWSServiceConfig, defaults?: AWSServiceConfig): AWSServiceConfig;
121
+ //#endregion
122
+ export { XRayConfig as a, SDKInstrumentationConfig as i, AWSResourceDetectorConfig as n, mergeServiceConfig as o, LambdaInstrumentationConfig as r, AWSInitConfig as t };
123
+ //# sourceMappingURL=config-D8QZwF1e.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-D8QZwF1e.d.ts","names":[],"sources":["../src/config.ts"],"mappings":";;;;;;UASiB,yBAAA;EAWf;;;;EANA,GAAA;EAwBe;;;;EAlBf,GAAA;EAgDqB;;;;EA1CrB,GAAA;EA0BA;;;;EApBA,MAAA;AAAA;;;AAoC2B;UA9BZ,aAAA;EAoC2B;;;EAhC1C,OAAA;EA2CA;;;EAtCA,QAAA;EAiDe;;;EA5Cf,OAAA,GAAU,MAAA;EAiDV;;;;EA3CA,mBAAA,aAAgC,yBAAA;EA4DjB;;;EAvDf,MAAA;EA4DA;;;EAvDA,kBAAA,GAAqB,MAAA;AAAA;AAyEvB;;;AAAA,UAnEiB,2BAAA;EAqEJ;;;;EAhEX,eAAA;EA+DA;;;;EAzDA,mBAAA;EA2DiB;;;EAtDjB,OAAA;AAAA;;;;UAMe,wBAAA;;;;;EAKf,cAAA;;;;;EAMA,eAAA;;;;EAKA,OAAA;AAAA;;;;UAMe,UAAA;;;;;EAKf,UAAA;;;;;EAMA,cAAA;;;;;EAMA,WAAA;AAAA;;;;iBAMc,kBAAA,CACd,MAAA,GAAS,gBAAA,EACT,QAAA,GAAW,gBAAA,GACV,gBAAA"}
@@ -0,0 +1,123 @@
1
+ import { n as AWSServiceConfig } from "./types-DOUDks8I.cjs";
2
+
3
+ //#region src/config.d.ts
4
+ /**
5
+ * AWS resource detector configuration
6
+ */
7
+ interface AWSResourceDetectorConfig {
8
+ /**
9
+ * Auto-detect EC2 instance metadata
10
+ * @default true
11
+ */
12
+ ec2?: boolean;
13
+ /**
14
+ * Auto-detect ECS task metadata
15
+ * @default true
16
+ */
17
+ ecs?: boolean;
18
+ /**
19
+ * Auto-detect EKS cluster metadata
20
+ * @default true
21
+ */
22
+ eks?: boolean;
23
+ /**
24
+ * Auto-detect Lambda function metadata
25
+ * @default true
26
+ */
27
+ lambda?: boolean;
28
+ }
29
+ /**
30
+ * AWS initialization configuration
31
+ */
32
+ interface AWSInitConfig {
33
+ /**
34
+ * Service name
35
+ */
36
+ service: string;
37
+ /**
38
+ * OTLP endpoint
39
+ */
40
+ endpoint?: string;
41
+ /**
42
+ * OTLP headers (e.g., authentication tokens)
43
+ */
44
+ headers?: Record<string, string>;
45
+ /**
46
+ * Auto-detect AWS resources
47
+ * @default false
48
+ */
49
+ autoDetectResources?: boolean | AWSResourceDetectorConfig;
50
+ /**
51
+ * AWS region
52
+ */
53
+ region?: string;
54
+ /**
55
+ * Additional resource attributes
56
+ */
57
+ resourceAttributes?: Record<string, string>;
58
+ }
59
+ /**
60
+ * Lambda instrumentation configuration
61
+ */
62
+ interface LambdaInstrumentationConfig {
63
+ /**
64
+ * Capture response in span attributes
65
+ * @default false
66
+ */
67
+ captureResponse?: boolean;
68
+ /**
69
+ * Extract trace context from event
70
+ * @default true
71
+ */
72
+ extractTraceContext?: boolean;
73
+ /**
74
+ * Service name override
75
+ */
76
+ service?: string;
77
+ }
78
+ /**
79
+ * SDK instrumentation configuration
80
+ */
81
+ interface SDKInstrumentationConfig {
82
+ /**
83
+ * Capture request payload
84
+ * @default false
85
+ */
86
+ captureRequest?: boolean;
87
+ /**
88
+ * Capture response payload
89
+ * @default false
90
+ */
91
+ captureResponse?: boolean;
92
+ /**
93
+ * Service name override
94
+ */
95
+ service?: string;
96
+ }
97
+ /**
98
+ * X-Ray configuration
99
+ */
100
+ interface XRayConfig {
101
+ /**
102
+ * Enable X-Ray propagator
103
+ * @default false
104
+ */
105
+ propagator?: boolean;
106
+ /**
107
+ * Enable X-Ray remote sampling
108
+ * @default false
109
+ */
110
+ remoteSampling?: boolean;
111
+ /**
112
+ * Use X-Ray trace ID format
113
+ * @default false
114
+ */
115
+ idGenerator?: boolean;
116
+ }
117
+ /**
118
+ * Merge AWS service config with defaults
119
+ */
120
+ declare function mergeServiceConfig(config?: AWSServiceConfig, defaults?: AWSServiceConfig): AWSServiceConfig;
121
+ //#endregion
122
+ export { XRayConfig as a, SDKInstrumentationConfig as i, AWSResourceDetectorConfig as n, mergeServiceConfig as o, LambdaInstrumentationConfig as r, AWSInitConfig as t };
123
+ //# sourceMappingURL=config-SPkMWWXY.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-SPkMWWXY.d.cts","names":[],"sources":["../src/config.ts"],"mappings":";;;;;;UASiB,yBAAA;EAWf;;;;EANA,GAAA;EAwBe;;;;EAlBf,GAAA;EAgDqB;;;;EA1CrB,GAAA;EA0BA;;;;EApBA,MAAA;AAAA;;;AAoC2B;UA9BZ,aAAA;EAoC2B;;;EAhC1C,OAAA;EA2CA;;;EAtCA,QAAA;EAiDe;;;EA5Cf,OAAA,GAAU,MAAA;EAiDV;;;;EA3CA,mBAAA,aAAgC,yBAAA;EA4DjB;;;EAvDf,MAAA;EA4DA;;;EAvDA,kBAAA,GAAqB,MAAA;AAAA;AAyEvB;;;AAAA,UAnEiB,2BAAA;EAqEJ;;;;EAhEX,eAAA;EA+DA;;;;EAzDA,mBAAA;EA2DiB;;;EAtDjB,OAAA;AAAA;;;;UAMe,wBAAA;;;;;EAKf,cAAA;;;;;EAMA,eAAA;;;;EAKA,OAAA;AAAA;;;;UAMe,UAAA;;;;;EAKf,UAAA;;;;;EAMA,cAAA;;;;;EAMA,WAAA;AAAA;;;;iBAMc,kBAAA,CACd,MAAA,GAAS,gBAAA,EACT,QAAA,GAAW,gBAAA,GACV,gBAAA"}
package/dist/dynamodb.cjs CHANGED
@@ -1,14 +1,92 @@
1
- 'use strict';
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_attributes = require('./attributes.cjs');
3
+ let autotel = require("autotel");
2
4
 
3
- var chunkVZHQH75L_cjs = require('./chunk-VZHQH75L.cjs');
4
- require('./chunk-Q3DMMQ7K.cjs');
5
- require('./chunk-JEQ2X3Z6.cjs');
5
+ //#region src/dynamodb/index.ts
6
+ /**
7
+ * DynamoDB-specific instrumentation
8
+ *
9
+ * Provides semantic helpers for tracing DynamoDB operations with proper OpenTelemetry
10
+ * semantic conventions. Automatically sets `db.*` and `aws.dynamodb.*` attributes.
11
+ *
12
+ * @example Basic usage with factory pattern
13
+ * ```typescript
14
+ * import { traceDynamoDB } from 'autotel-aws/dynamodb';
15
+ * import { DynamoDBClient, GetItemCommand } from '@aws-sdk/client-dynamodb';
16
+ *
17
+ * const dynamodb = new DynamoDBClient({});
18
+ *
19
+ * export const getUser = traceDynamoDB({
20
+ * operation: 'GetItem',
21
+ * table: 'users'
22
+ * })(ctx => async (userId: string) => {
23
+ * ctx.setAttribute('db.statement', 'GetItem WHERE id = :id');
24
+ * return await dynamodb.send(new GetItemCommand({
25
+ * TableName: 'users',
26
+ * Key: { id: { S: userId } }
27
+ * }));
28
+ * });
29
+ *
30
+ * // Usage: await getUser('user-123');
31
+ * ```
32
+ *
33
+ * @example Query with consumed capacity tracking
34
+ * ```typescript
35
+ * export const queryOrders = traceDynamoDB({
36
+ * operation: 'Query',
37
+ * table: 'orders'
38
+ * })(ctx => async (customerId: string, limit: number) => {
39
+ * const result = await dynamodb.send(new QueryCommand({
40
+ * TableName: 'orders',
41
+ * KeyConditionExpression: 'customerId = :cid',
42
+ * ExpressionAttributeValues: { ':cid': { S: customerId } },
43
+ * Limit: limit,
44
+ * ReturnConsumedCapacity: 'TOTAL'
45
+ * }));
46
+ *
47
+ * if (result.ConsumedCapacity?.CapacityUnits) {
48
+ * ctx.setAttribute('aws.dynamodb.consumed_capacity', result.ConsumedCapacity.CapacityUnits);
49
+ * }
50
+ *
51
+ * return result.Items;
52
+ * });
53
+ * ```
54
+ */
55
+ /**
56
+ * Trace DynamoDB operations with semantic attributes
57
+ *
58
+ * Creates a traced function that automatically sets DynamoDB semantic attributes
59
+ * following OpenTelemetry database semantic conventions.
60
+ *
61
+ * @param config - DynamoDB operation configuration
62
+ * @returns A higher-order function that wraps your DynamoDB operation with tracing
63
+ *
64
+ * @remarks
65
+ * Semantic attributes set automatically:
66
+ * - `db.system` - 'dynamodb'
67
+ * - `db.operation` - The operation name (GetItem, PutItem, etc.)
68
+ * - `db.name` - Table name
69
+ * - `aws.dynamodb.table_names` - Array containing the table name
70
+ *
71
+ * Additional attributes you should set in your handler:
72
+ * - `db.statement` - Query/operation description
73
+ * - `aws.dynamodb.consumed_capacity` - Consumed capacity units
74
+ * - `aws.dynamodb.index_name` - GSI/LSI name if applicable
75
+ *
76
+ * @see https://opentelemetry.io/docs/specs/semconv/database/dynamodb/
77
+ */
78
+ function traceDynamoDB(config) {
79
+ return function wrapper(fn) {
80
+ return (0, autotel.trace)(`dynamodb.${config.operation}`, (ctx) => async (...args) => {
81
+ ctx.setAttributes(require_attributes.buildDynamoDBAttributes({
82
+ tableName: config.table,
83
+ operation: config.operation
84
+ }));
85
+ return fn(ctx)(...args);
86
+ });
87
+ };
88
+ }
6
89
 
7
-
8
-
9
- Object.defineProperty(exports, "traceDynamoDB", {
10
- enumerable: true,
11
- get: function () { return chunkVZHQH75L_cjs.traceDynamoDB; }
12
- });
13
- //# sourceMappingURL=dynamodb.cjs.map
90
+ //#endregion
91
+ exports.traceDynamoDB = traceDynamoDB;
14
92
  //# sourceMappingURL=dynamodb.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"dynamodb.cjs"}
1
+ {"version":3,"file":"dynamodb.cjs","names":["buildDynamoDBAttributes"],"sources":["../src/dynamodb/index.ts"],"sourcesContent":["/**\n * DynamoDB-specific instrumentation\n *\n * Provides semantic helpers for tracing DynamoDB operations with proper OpenTelemetry\n * semantic conventions. Automatically sets `db.*` and `aws.dynamodb.*` attributes.\n *\n * @example Basic usage with factory pattern\n * ```typescript\n * import { traceDynamoDB } from 'autotel-aws/dynamodb';\n * import { DynamoDBClient, GetItemCommand } from '@aws-sdk/client-dynamodb';\n *\n * const dynamodb = new DynamoDBClient({});\n *\n * export const getUser = traceDynamoDB({\n * operation: 'GetItem',\n * table: 'users'\n * })(ctx => async (userId: string) => {\n * ctx.setAttribute('db.statement', 'GetItem WHERE id = :id');\n * return await dynamodb.send(new GetItemCommand({\n * TableName: 'users',\n * Key: { id: { S: userId } }\n * }));\n * });\n *\n * // Usage: await getUser('user-123');\n * ```\n *\n * @example Query with consumed capacity tracking\n * ```typescript\n * export const queryOrders = traceDynamoDB({\n * operation: 'Query',\n * table: 'orders'\n * })(ctx => async (customerId: string, limit: number) => {\n * const result = await dynamodb.send(new QueryCommand({\n * TableName: 'orders',\n * KeyConditionExpression: 'customerId = :cid',\n * ExpressionAttributeValues: { ':cid': { S: customerId } },\n * Limit: limit,\n * ReturnConsumedCapacity: 'TOTAL'\n * }));\n *\n * if (result.ConsumedCapacity?.CapacityUnits) {\n * ctx.setAttribute('aws.dynamodb.consumed_capacity', result.ConsumedCapacity.CapacityUnits);\n * }\n *\n * return result.Items;\n * });\n * ```\n */\n\nimport { trace, type TraceContext } from 'autotel';\nimport { buildDynamoDBAttributes } from '../attributes';\n\n/**\n * DynamoDB operation configuration\n */\nexport interface TraceDynamoDBConfig {\n /**\n * DynamoDB operation name (e.g., 'GetItem', 'PutItem', 'Query', 'Scan')\n * Used to generate the span name: `dynamodb.{operation}`\n */\n operation: string;\n\n /**\n * DynamoDB table name.\n * Sets `db.name` and `aws.dynamodb.table_names` attributes.\n */\n table: string;\n}\n\n/**\n * Trace DynamoDB operations with semantic attributes\n *\n * Creates a traced function that automatically sets DynamoDB semantic attributes\n * following OpenTelemetry database semantic conventions.\n *\n * @param config - DynamoDB operation configuration\n * @returns A higher-order function that wraps your DynamoDB operation with tracing\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `db.system` - 'dynamodb'\n * - `db.operation` - The operation name (GetItem, PutItem, etc.)\n * - `db.name` - Table name\n * - `aws.dynamodb.table_names` - Array containing the table name\n *\n * Additional attributes you should set in your handler:\n * - `db.statement` - Query/operation description\n * - `aws.dynamodb.consumed_capacity` - Consumed capacity units\n * - `aws.dynamodb.index_name` - GSI/LSI name if applicable\n *\n * @see https://opentelemetry.io/docs/specs/semconv/database/dynamodb/\n */\nexport function traceDynamoDB(config: TraceDynamoDBConfig) {\n return function wrapper<TArgs extends unknown[], TReturn>(\n fn: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): (...args: TArgs) => Promise<TReturn> {\n // Use autotel's trace() which properly handles the factory pattern\n return trace(\n `dynamodb.${config.operation}`,\n (ctx: TraceContext) =>\n async (...args: TArgs): Promise<TReturn> => {\n // Set DynamoDB semantic attributes\n ctx.setAttributes(\n buildDynamoDBAttributes({\n tableName: config.table,\n operation: config.operation,\n }),\n );\n\n // Get the user's handler and execute with forwarded arguments\n const handler = fn(ctx);\n return handler(...args);\n },\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FA,SAAgB,cAAc,QAA6B;CACzD,OAAO,SAAS,QACd,IACsC;EAEtC,0BACE,YAAY,OAAO,cAClB,QACC,OAAO,GAAG,SAAkC;GAE1C,IAAI,cACFA,2CAAwB;IACtB,WAAW,OAAO;IAClB,WAAW,OAAO;GACpB,CAAC,CACH;GAIA,OADgB,GAAG,GACN,CAAC,CAAC,GAAG,IAAI;EACxB,CACJ;CACF;AACF"}
@@ -1,69 +1,20 @@
1
- import { TraceContext } from 'autotel';
2
-
3
- /**
4
- * DynamoDB-specific instrumentation
5
- *
6
- * Provides semantic helpers for tracing DynamoDB operations with proper OpenTelemetry
7
- * semantic conventions. Automatically sets `db.*` and `aws.dynamodb.*` attributes.
8
- *
9
- * @example Basic usage with factory pattern
10
- * ```typescript
11
- * import { traceDynamoDB } from 'autotel-aws/dynamodb';
12
- * import { DynamoDBClient, GetItemCommand } from '@aws-sdk/client-dynamodb';
13
- *
14
- * const dynamodb = new DynamoDBClient({});
15
- *
16
- * export const getUser = traceDynamoDB({
17
- * operation: 'GetItem',
18
- * table: 'users'
19
- * })(ctx => async (userId: string) => {
20
- * ctx.setAttribute('db.statement', 'GetItem WHERE id = :id');
21
- * return await dynamodb.send(new GetItemCommand({
22
- * TableName: 'users',
23
- * Key: { id: { S: userId } }
24
- * }));
25
- * });
26
- *
27
- * // Usage: await getUser('user-123');
28
- * ```
29
- *
30
- * @example Query with consumed capacity tracking
31
- * ```typescript
32
- * export const queryOrders = traceDynamoDB({
33
- * operation: 'Query',
34
- * table: 'orders'
35
- * })(ctx => async (customerId: string, limit: number) => {
36
- * const result = await dynamodb.send(new QueryCommand({
37
- * TableName: 'orders',
38
- * KeyConditionExpression: 'customerId = :cid',
39
- * ExpressionAttributeValues: { ':cid': { S: customerId } },
40
- * Limit: limit,
41
- * ReturnConsumedCapacity: 'TOTAL'
42
- * }));
43
- *
44
- * if (result.ConsumedCapacity?.CapacityUnits) {
45
- * ctx.setAttribute('aws.dynamodb.consumed_capacity', result.ConsumedCapacity.CapacityUnits);
46
- * }
47
- *
48
- * return result.Items;
49
- * });
50
- * ```
51
- */
1
+ import { TraceContext } from "autotel";
52
2
 
3
+ //#region src/dynamodb/index.d.ts
53
4
  /**
54
5
  * DynamoDB operation configuration
55
6
  */
56
7
  interface TraceDynamoDBConfig {
57
- /**
58
- * DynamoDB operation name (e.g., 'GetItem', 'PutItem', 'Query', 'Scan')
59
- * Used to generate the span name: `dynamodb.{operation}`
60
- */
61
- operation: string;
62
- /**
63
- * DynamoDB table name.
64
- * Sets `db.name` and `aws.dynamodb.table_names` attributes.
65
- */
66
- table: string;
8
+ /**
9
+ * DynamoDB operation name (e.g., 'GetItem', 'PutItem', 'Query', 'Scan')
10
+ * Used to generate the span name: `dynamodb.{operation}`
11
+ */
12
+ operation: string;
13
+ /**
14
+ * DynamoDB table name.
15
+ * Sets `db.name` and `aws.dynamodb.table_names` attributes.
16
+ */
17
+ table: string;
67
18
  }
68
19
  /**
69
20
  * Trace DynamoDB operations with semantic attributes
@@ -89,5 +40,6 @@ interface TraceDynamoDBConfig {
89
40
  * @see https://opentelemetry.io/docs/specs/semconv/database/dynamodb/
90
41
  */
91
42
  declare function traceDynamoDB(config: TraceDynamoDBConfig): <TArgs extends unknown[], TReturn>(fn: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>) => (...args: TArgs) => Promise<TReturn>;
92
-
93
- export { type TraceDynamoDBConfig, traceDynamoDB };
43
+ //#endregion
44
+ export { TraceDynamoDBConfig, traceDynamoDB };
45
+ //# sourceMappingURL=dynamodb.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamodb.d.cts","names":[],"sources":["../src/dynamodb/index.ts"],"mappings":";;;;;;UAwDiB,mBAAA;;;;;EAKf,SAAA;;;;;EAMA,KAAK;AAAA;;;;;;;;;;;;;;;;;;;;;;;;iBA0BS,aAAA,CAAc,MAAA,EAAQ,mBAAA,sCAElC,EAAA,GAAK,GAAA,EAAK,YAAA,SAAqB,IAAA,EAAM,KAAA,KAAU,OAAA,CAAQ,OAAA,UAClD,IAAA,EAAM,KAAA,KAAU,OAAA,CAAQ,OAAA"}