autotel-aws 0.2.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.
Files changed (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +540 -0
  3. package/dist/attributes.cjs +49 -0
  4. package/dist/attributes.cjs.map +1 -0
  5. package/dist/attributes.d.cts +117 -0
  6. package/dist/attributes.d.ts +117 -0
  7. package/dist/attributes.js +4 -0
  8. package/dist/attributes.js.map +1 -0
  9. package/dist/chunk-35F3UBOO.cjs +48 -0
  10. package/dist/chunk-35F3UBOO.cjs.map +1 -0
  11. package/dist/chunk-4TGVGEUN.cjs +84 -0
  12. package/dist/chunk-4TGVGEUN.cjs.map +1 -0
  13. package/dist/chunk-CIGXV6HA.js +192 -0
  14. package/dist/chunk-CIGXV6HA.js.map +1 -0
  15. package/dist/chunk-D5INYMRP.cjs +350 -0
  16. package/dist/chunk-D5INYMRP.cjs.map +1 -0
  17. package/dist/chunk-DF5PT3JK.js +387 -0
  18. package/dist/chunk-DF5PT3JK.js.map +1 -0
  19. package/dist/chunk-DGUM43GV.js +10 -0
  20. package/dist/chunk-DGUM43GV.js.map +1 -0
  21. package/dist/chunk-DHHLKZHI.cjs +23 -0
  22. package/dist/chunk-DHHLKZHI.cjs.map +1 -0
  23. package/dist/chunk-FKZOELBT.js +78 -0
  24. package/dist/chunk-FKZOELBT.js.map +1 -0
  25. package/dist/chunk-HMTKKKKP.cjs +390 -0
  26. package/dist/chunk-HMTKKKKP.cjs.map +1 -0
  27. package/dist/chunk-I4CKQ4RD.js +153 -0
  28. package/dist/chunk-I4CKQ4RD.js.map +1 -0
  29. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  30. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  31. package/dist/chunk-JMSFE6FJ.js +24 -0
  32. package/dist/chunk-JMSFE6FJ.js.map +1 -0
  33. package/dist/chunk-KUIOI74B.cjs +394 -0
  34. package/dist/chunk-KUIOI74B.cjs.map +1 -0
  35. package/dist/chunk-NQ65Y5AI.cjs +195 -0
  36. package/dist/chunk-NQ65Y5AI.cjs.map +1 -0
  37. package/dist/chunk-OB4XTAVK.cjs +345 -0
  38. package/dist/chunk-OB4XTAVK.cjs.map +1 -0
  39. package/dist/chunk-OHFR7WX5.js +341 -0
  40. package/dist/chunk-OHFR7WX5.js.map +1 -0
  41. package/dist/chunk-PZGYL7XZ.js +40 -0
  42. package/dist/chunk-PZGYL7XZ.js.map +1 -0
  43. package/dist/chunk-Q3DMMQ7K.cjs +164 -0
  44. package/dist/chunk-Q3DMMQ7K.cjs.map +1 -0
  45. package/dist/chunk-UZEJV2YD.cjs +139 -0
  46. package/dist/chunk-UZEJV2YD.cjs.map +1 -0
  47. package/dist/chunk-V4IQWFYN.js +341 -0
  48. package/dist/chunk-V4IQWFYN.js.map +1 -0
  49. package/dist/chunk-VZHQH75L.cjs +26 -0
  50. package/dist/chunk-VZHQH75L.cjs.map +1 -0
  51. package/dist/chunk-X6BY6PCK.js +386 -0
  52. package/dist/chunk-X6BY6PCK.js.map +1 -0
  53. package/dist/chunk-YG56NRIO.js +131 -0
  54. package/dist/chunk-YG56NRIO.js.map +1 -0
  55. package/dist/chunk-ZPDRKCAR.js +21 -0
  56. package/dist/chunk-ZPDRKCAR.js.map +1 -0
  57. package/dist/config-C7zV8Zm6.d.cts +125 -0
  58. package/dist/config-DxjTT8jd.d.ts +125 -0
  59. package/dist/dynamodb.cjs +14 -0
  60. package/dist/dynamodb.cjs.map +1 -0
  61. package/dist/dynamodb.d.cts +93 -0
  62. package/dist/dynamodb.d.ts +93 -0
  63. package/dist/dynamodb.js +5 -0
  64. package/dist/dynamodb.js.map +1 -0
  65. package/dist/eventbridge.cjs +279 -0
  66. package/dist/eventbridge.cjs.map +1 -0
  67. package/dist/eventbridge.d.cts +360 -0
  68. package/dist/eventbridge.d.ts +360 -0
  69. package/dist/eventbridge.js +273 -0
  70. package/dist/eventbridge.js.map +1 -0
  71. package/dist/index.cjs +251 -0
  72. package/dist/index.cjs.map +1 -0
  73. package/dist/index.d.cts +126 -0
  74. package/dist/index.d.ts +126 -0
  75. package/dist/index.js +48 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/kinesis.cjs +23 -0
  78. package/dist/kinesis.cjs.map +1 -0
  79. package/dist/kinesis.d.cts +360 -0
  80. package/dist/kinesis.d.ts +360 -0
  81. package/dist/kinesis.js +6 -0
  82. package/dist/kinesis.js.map +1 -0
  83. package/dist/lambda-auto.cjs +19 -0
  84. package/dist/lambda-auto.cjs.map +1 -0
  85. package/dist/lambda-auto.d.cts +2 -0
  86. package/dist/lambda-auto.d.ts +2 -0
  87. package/dist/lambda-auto.js +17 -0
  88. package/dist/lambda-auto.js.map +1 -0
  89. package/dist/lambda.cjs +42 -0
  90. package/dist/lambda.cjs.map +1 -0
  91. package/dist/lambda.d.cts +231 -0
  92. package/dist/lambda.d.ts +231 -0
  93. package/dist/lambda.js +5 -0
  94. package/dist/lambda.js.map +1 -0
  95. package/dist/s3.cjs +14 -0
  96. package/dist/s3.cjs.map +1 -0
  97. package/dist/s3.d.cts +77 -0
  98. package/dist/s3.d.ts +77 -0
  99. package/dist/s3.js +5 -0
  100. package/dist/s3.js.map +1 -0
  101. package/dist/sdk.cjs +31 -0
  102. package/dist/sdk.cjs.map +1 -0
  103. package/dist/sdk.d.cts +155 -0
  104. package/dist/sdk.d.ts +155 -0
  105. package/dist/sdk.js +6 -0
  106. package/dist/sdk.js.map +1 -0
  107. package/dist/sns.cjs +19 -0
  108. package/dist/sns.cjs.map +1 -0
  109. package/dist/sns.d.cts +256 -0
  110. package/dist/sns.d.ts +256 -0
  111. package/dist/sns.js +6 -0
  112. package/dist/sns.js.map +1 -0
  113. package/dist/sqs.cjs +23 -0
  114. package/dist/sqs.cjs.map +1 -0
  115. package/dist/sqs.d.cts +384 -0
  116. package/dist/sqs.d.ts +384 -0
  117. package/dist/sqs.js +6 -0
  118. package/dist/sqs.js.map +1 -0
  119. package/dist/step-functions.cjs +35 -0
  120. package/dist/step-functions.cjs.map +1 -0
  121. package/dist/step-functions.d.cts +423 -0
  122. package/dist/step-functions.d.ts +423 -0
  123. package/dist/step-functions.js +6 -0
  124. package/dist/step-functions.js.map +1 -0
  125. package/dist/testing.cjs +61 -0
  126. package/dist/testing.cjs.map +1 -0
  127. package/dist/testing.d.cts +39 -0
  128. package/dist/testing.d.ts +39 -0
  129. package/dist/testing.js +58 -0
  130. package/dist/testing.js.map +1 -0
  131. package/dist/types-3_ak5jhy.d.cts +76 -0
  132. package/dist/types-3_ak5jhy.d.ts +76 -0
  133. package/dist/types-UiBv_I_M.d.ts +16 -0
  134. package/dist/types-kTFVdSqO.d.cts +16 -0
  135. package/dist/xray.cjs +26 -0
  136. package/dist/xray.cjs.map +1 -0
  137. package/dist/xray.d.cts +23 -0
  138. package/dist/xray.d.ts +23 -0
  139. package/dist/xray.js +5 -0
  140. package/dist/xray.js.map +1 -0
  141. package/package.json +184 -0
package/dist/sqs.d.ts ADDED
@@ -0,0 +1,384 @@
1
+ import { TraceContext } from 'autotel';
2
+
3
+ /**
4
+ * SQS-specific instrumentation
5
+ *
6
+ * Provides semantic helpers for tracing SQS operations with proper OpenTelemetry
7
+ * messaging semantic conventions. Automatically sets `messaging.*` and `aws.sqs.*` attributes.
8
+ *
9
+ * @example Send message
10
+ * ```typescript
11
+ * import { traceSQS } from 'autotel-aws/sqs';
12
+ * import { SQSClient, SendMessageCommand } from '@aws-sdk/client-sqs';
13
+ *
14
+ * const sqs = new SQSClient({});
15
+ *
16
+ * export const sendMessage = traceSQS({
17
+ * operation: 'send',
18
+ * queueName: 'my-queue',
19
+ * queueUrl: 'https://sqs.us-east-1.amazonaws.com/123456789/my-queue'
20
+ * })(ctx => async (body: string, attributes?: Record<string, string>) => {
21
+ * const result = await sqs.send(new SendMessageCommand({
22
+ * QueueUrl: 'https://sqs.us-east-1.amazonaws.com/123456789/my-queue',
23
+ * MessageBody: body,
24
+ * MessageAttributes: attributes
25
+ * }));
26
+ *
27
+ * if (result.MessageId) {
28
+ * ctx.setAttribute('messaging.message.id', result.MessageId);
29
+ * }
30
+ *
31
+ * return result;
32
+ * });
33
+ *
34
+ * // Usage: await sendMessage('Hello!', { correlationId: { StringValue: '123', DataType: 'String' } });
35
+ * ```
36
+ *
37
+ * @example Receive and process messages
38
+ * ```typescript
39
+ * export const receiveMessages = traceSQS({
40
+ * operation: 'receive',
41
+ * queueName: 'my-queue'
42
+ * })(ctx => async (maxMessages: number) => {
43
+ * const result = await sqs.send(new ReceiveMessageCommand({
44
+ * QueueUrl: 'https://sqs.../my-queue',
45
+ * MaxNumberOfMessages: maxMessages
46
+ * }));
47
+ *
48
+ * ctx.setAttribute('messaging.batch.message_count', result.Messages?.length ?? 0);
49
+ * return result.Messages;
50
+ * });
51
+ * ```
52
+ */
53
+
54
+ /**
55
+ * SQS operation configuration
56
+ */
57
+ interface TraceSQSConfig {
58
+ /**
59
+ * SQS operation type
60
+ * - 'send' - SendMessage, SendMessageBatch
61
+ * - 'receive' - ReceiveMessage
62
+ */
63
+ operation: 'send' | 'receive';
64
+ /**
65
+ * Queue name (last segment of queue URL)
66
+ * Sets `messaging.destination.name` attribute.
67
+ */
68
+ queueName: string;
69
+ /**
70
+ * Full queue URL
71
+ * Sets `aws.sqs.queue_url` attribute.
72
+ */
73
+ queueUrl?: string;
74
+ }
75
+ /**
76
+ * Trace SQS operations with semantic attributes
77
+ *
78
+ * Creates a traced function that automatically sets SQS messaging semantic attributes
79
+ * following OpenTelemetry conventions.
80
+ *
81
+ * @param config - SQS operation configuration
82
+ * @returns A higher-order function that wraps your SQS operation with tracing
83
+ *
84
+ * @remarks
85
+ * Semantic attributes set automatically:
86
+ * - `messaging.system` - 'aws_sqs'
87
+ * - `messaging.destination.name` - Queue name
88
+ * - `messaging.operation` - 'send' or 'receive'
89
+ * - `aws.sqs.queue_url` - Full queue URL (if provided)
90
+ *
91
+ * Additional attributes you should set in your handler:
92
+ * - `messaging.message.id` - Message ID from response
93
+ * - `messaging.batch.message_count` - Number of messages in batch
94
+ *
95
+ * @see https://opentelemetry.io/docs/specs/semconv/messaging/aws-sqs/
96
+ */
97
+ declare function traceSQS(config: TraceSQSConfig): <TArgs extends unknown[], TReturn>(fn: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>) => (...args: TArgs) => Promise<TReturn>;
98
+ /**
99
+ * Configuration for SQS Producer
100
+ */
101
+ interface SQSProducerConfig {
102
+ /**
103
+ * Full SQS queue URL
104
+ */
105
+ queueUrl: string;
106
+ /**
107
+ * Inject W3C Trace Context into message attributes
108
+ * Enables distributed tracing across producer/consumer
109
+ * @default true
110
+ */
111
+ injectTraceContext?: boolean;
112
+ /**
113
+ * Optional service name for tracing
114
+ */
115
+ service?: string;
116
+ }
117
+ /**
118
+ * Message to send via SQS Producer
119
+ */
120
+ interface SQSMessage {
121
+ /**
122
+ * Message body (string)
123
+ */
124
+ body: string;
125
+ /**
126
+ * Optional message attributes
127
+ */
128
+ attributes?: Record<string, {
129
+ StringValue: string;
130
+ DataType: string;
131
+ }>;
132
+ /**
133
+ * Optional message group ID (for FIFO queues)
134
+ */
135
+ messageGroupId?: string;
136
+ /**
137
+ * Optional deduplication ID (for FIFO queues)
138
+ */
139
+ messageDeduplicationId?: string;
140
+ /**
141
+ * Optional delay in seconds (0-900)
142
+ */
143
+ delaySeconds?: number;
144
+ }
145
+ /**
146
+ * SQS Producer with automatic trace context injection
147
+ *
148
+ * Wraps an SQS client to automatically:
149
+ * - Create spans for send operations
150
+ * - Inject W3C Trace Context into message attributes
151
+ * - Set proper semantic attributes
152
+ *
153
+ * @example Basic usage
154
+ * ```typescript
155
+ * import { SQSProducer } from 'autotel-aws/sqs';
156
+ * import { SQSClient } from '@aws-sdk/client-sqs';
157
+ *
158
+ * const sqs = new SQSClient({ region: 'us-east-1' });
159
+ * const producer = new SQSProducer(sqs, {
160
+ * queueUrl: 'https://sqs.us-east-1.amazonaws.com/123456789/my-queue'
161
+ * });
162
+ *
163
+ * // Send with automatic trace context
164
+ * const result = await producer.send({ body: 'Hello!' });
165
+ * console.log('Message ID:', result.messageId);
166
+ * ```
167
+ *
168
+ * @example With custom attributes
169
+ * ```typescript
170
+ * await producer.send({
171
+ * body: JSON.stringify({ orderId: '12345' }),
172
+ * attributes: {
173
+ * 'correlationId': { StringValue: 'abc-123', DataType: 'String' },
174
+ * 'eventType': { StringValue: 'ORDER_CREATED', DataType: 'String' }
175
+ * }
176
+ * });
177
+ * ```
178
+ *
179
+ * @example Batch send
180
+ * ```typescript
181
+ * const results = await producer.sendBatch([
182
+ * { body: 'Message 1' },
183
+ * { body: 'Message 2' },
184
+ * { body: 'Message 3' }
185
+ * ]);
186
+ * console.log(`Sent ${results.successful.length} messages`);
187
+ * ```
188
+ */
189
+ declare class SQSProducer<TClient extends {
190
+ send: (command: any) => Promise<any>;
191
+ } = any> {
192
+ private client;
193
+ private config;
194
+ private queueName;
195
+ constructor(client: TClient, config: SQSProducerConfig);
196
+ /**
197
+ * Inject trace context into message attributes
198
+ */
199
+ private injectContext;
200
+ /**
201
+ * Send a single message to the queue
202
+ *
203
+ * @param message - Message to send
204
+ * @returns Promise with message ID and other metadata
205
+ */
206
+ send(message: SQSMessage): Promise<{
207
+ messageId?: string;
208
+ sequenceNumber?: string;
209
+ md5OfMessageBody?: string;
210
+ }>;
211
+ /**
212
+ * Send multiple messages in a batch
213
+ *
214
+ * @param messages - Array of messages to send (max 10)
215
+ * @returns Promise with successful and failed message results
216
+ */
217
+ sendBatch(messages: SQSMessage[]): Promise<{
218
+ successful: Array<{
219
+ id: string;
220
+ messageId?: string;
221
+ sequenceNumber?: string;
222
+ }>;
223
+ failed: Array<{
224
+ id: string;
225
+ code?: string;
226
+ message?: string;
227
+ }>;
228
+ }>;
229
+ }
230
+ /**
231
+ * Configuration for SQS Consumer
232
+ */
233
+ interface SQSConsumerConfig {
234
+ /**
235
+ * Full SQS queue URL
236
+ */
237
+ queueUrl: string;
238
+ /**
239
+ * Extract W3C Trace Context from message attributes
240
+ * Creates child spans linked to the producer
241
+ * @default true
242
+ */
243
+ extractTraceContext?: boolean;
244
+ /**
245
+ * Maximum number of messages to receive per poll
246
+ * @default 10
247
+ */
248
+ maxMessages?: number;
249
+ /**
250
+ * Visibility timeout in seconds
251
+ * @default 30
252
+ */
253
+ visibilityTimeout?: number;
254
+ /**
255
+ * Wait time for long polling in seconds (0-20)
256
+ * @default 20
257
+ */
258
+ waitTimeSeconds?: number;
259
+ /**
260
+ * Optional service name for tracing
261
+ */
262
+ service?: string;
263
+ }
264
+ /**
265
+ * Received SQS message with parsed attributes
266
+ */
267
+ interface ReceivedSQSMessage {
268
+ /**
269
+ * Message ID
270
+ */
271
+ messageId: string;
272
+ /**
273
+ * Receipt handle for deletion
274
+ */
275
+ receiptHandle: string;
276
+ /**
277
+ * Message body (string)
278
+ */
279
+ body: string;
280
+ /**
281
+ * Parsed message attributes
282
+ */
283
+ attributes: Record<string, string>;
284
+ /**
285
+ * System attributes (ApproximateReceiveCount, etc.)
286
+ */
287
+ systemAttributes: Record<string, string>;
288
+ /**
289
+ * Original AWS SDK message object
290
+ */
291
+ raw: any;
292
+ }
293
+ /**
294
+ * Message processor function type
295
+ */
296
+ type MessageProcessor = (message: ReceivedSQSMessage, ctx: TraceContext) => Promise<void>;
297
+ /**
298
+ * SQS Consumer with automatic trace context extraction
299
+ *
300
+ * Wraps an SQS client to automatically:
301
+ * - Create spans for receive/process operations
302
+ * - Extract W3C Trace Context from message attributes
303
+ * - Link consumer spans to producer spans
304
+ * - Delete messages after successful processing
305
+ *
306
+ * @example Basic usage
307
+ * ```typescript
308
+ * import { SQSConsumer } from 'autotel-aws/sqs';
309
+ * import { SQSClient } from '@aws-sdk/client-sqs';
310
+ *
311
+ * const sqs = new SQSClient({ region: 'us-east-1' });
312
+ * const consumer = new SQSConsumer(sqs, {
313
+ * queueUrl: 'https://sqs.us-east-1.amazonaws.com/123456789/my-queue'
314
+ * });
315
+ *
316
+ * // Process messages with automatic tracing
317
+ * await consumer.processMessages(async (message, ctx) => {
318
+ * ctx.setAttribute('order.id', JSON.parse(message.body).orderId);
319
+ * await handleOrder(message.body);
320
+ * });
321
+ * ```
322
+ *
323
+ * @example With polling loop
324
+ * ```typescript
325
+ * // Start continuous polling
326
+ * const controller = new AbortController();
327
+ *
328
+ * consumer.poll(async (message, ctx) => {
329
+ * await processMessage(message);
330
+ * }, { signal: controller.signal });
331
+ *
332
+ * // Stop polling gracefully
333
+ * controller.abort();
334
+ * ```
335
+ */
336
+ declare class SQSConsumer<TClient extends {
337
+ send: (command: any) => Promise<any>;
338
+ } = any> {
339
+ private client;
340
+ private config;
341
+ private queueName;
342
+ constructor(client: TClient, config: SQSConsumerConfig);
343
+ /**
344
+ * Extract trace context from message attributes
345
+ */
346
+ private extractContext;
347
+ /**
348
+ * Parse AWS SDK message into our format
349
+ */
350
+ private parseMessage;
351
+ /**
352
+ * Receive messages from the queue
353
+ *
354
+ * @returns Array of received messages
355
+ */
356
+ receive(): Promise<ReceivedSQSMessage[]>;
357
+ /**
358
+ * Delete a message from the queue
359
+ *
360
+ * @param receiptHandle - Receipt handle of the message to delete
361
+ */
362
+ delete(receiptHandle: string): Promise<void>;
363
+ /**
364
+ * Process messages with automatic trace context extraction
365
+ *
366
+ * Receives messages, processes each with the provided handler,
367
+ * and deletes successfully processed messages.
368
+ *
369
+ * @param processor - Function to process each message
370
+ * @returns Number of messages processed
371
+ */
372
+ processMessages(processor: MessageProcessor): Promise<number>;
373
+ /**
374
+ * Start continuous polling loop
375
+ *
376
+ * @param processor - Function to process each message
377
+ * @param options - Polling options including abort signal
378
+ */
379
+ poll(processor: MessageProcessor, options?: {
380
+ signal?: AbortSignal;
381
+ }): Promise<void>;
382
+ }
383
+
384
+ export { type MessageProcessor, type ReceivedSQSMessage, SQSConsumer, type SQSConsumerConfig, type SQSMessage, SQSProducer, type SQSProducerConfig, type TraceSQSConfig, traceSQS };
package/dist/sqs.js ADDED
@@ -0,0 +1,6 @@
1
+ export { SQSConsumer, SQSProducer, traceSQS } from './chunk-OHFR7WX5.js';
2
+ import './chunk-YG56NRIO.js';
3
+ import './chunk-I4CKQ4RD.js';
4
+ import './chunk-DGUM43GV.js';
5
+ //# sourceMappingURL=sqs.js.map
6
+ //# sourceMappingURL=sqs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"sqs.js"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var chunkKUIOI74B_cjs = require('./chunk-KUIOI74B.cjs');
4
+ require('./chunk-UZEJV2YD.cjs');
5
+ require('./chunk-Q3DMMQ7K.cjs');
6
+ require('./chunk-JEQ2X3Z6.cjs');
7
+
8
+
9
+
10
+ Object.defineProperty(exports, "StepFunctionsActivityWorker", {
11
+ enumerable: true,
12
+ get: function () { return chunkKUIOI74B_cjs.StepFunctionsActivityWorker; }
13
+ });
14
+ Object.defineProperty(exports, "StepFunctionsExecutor", {
15
+ enumerable: true,
16
+ get: function () { return chunkKUIOI74B_cjs.StepFunctionsExecutor; }
17
+ });
18
+ Object.defineProperty(exports, "extractStepFunctionsContext", {
19
+ enumerable: true,
20
+ get: function () { return chunkKUIOI74B_cjs.extractStepFunctionsContext; }
21
+ });
22
+ Object.defineProperty(exports, "injectTraceContext", {
23
+ enumerable: true,
24
+ get: function () { return chunkKUIOI74B_cjs.injectTraceContext; }
25
+ });
26
+ Object.defineProperty(exports, "stripTraceContext", {
27
+ enumerable: true,
28
+ get: function () { return chunkKUIOI74B_cjs.stripTraceContext; }
29
+ });
30
+ Object.defineProperty(exports, "traceStepFunction", {
31
+ enumerable: true,
32
+ get: function () { return chunkKUIOI74B_cjs.traceStepFunction; }
33
+ });
34
+ //# sourceMappingURL=step-functions.cjs.map
35
+ //# sourceMappingURL=step-functions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"step-functions.cjs"}