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,386 +0,0 @@
1
- import { wrapSDKClient } from './chunk-YG56NRIO.js';
2
- import { buildKinesisAttributes } from './chunk-I4CKQ4RD.js';
3
- import { trace } from 'autotel';
4
- import { propagation, context, SpanStatusCode } from '@opentelemetry/api';
5
-
6
- function traceKinesis(config) {
7
- return function wrapper(fn) {
8
- return trace(
9
- `kinesis.${config.operation}`,
10
- (ctx) => async (...args) => {
11
- ctx.setAttributes(
12
- buildKinesisAttributes({
13
- streamName: config.streamName,
14
- shardId: config.shardId,
15
- operation: config.operation
16
- })
17
- );
18
- const handler = fn(ctx);
19
- return handler(...args);
20
- }
21
- );
22
- };
23
- }
24
- var KinesisProducer = class {
25
- client;
26
- config;
27
- constructor(client, config) {
28
- this.client = wrapSDKClient(client, config.service);
29
- this.config = {
30
- injectTraceContext: true,
31
- ...config
32
- };
33
- }
34
- /**
35
- * Inject trace context into record data
36
- */
37
- injectContext(data) {
38
- let payload;
39
- if (typeof data === "string") {
40
- try {
41
- payload = JSON.parse(data);
42
- } catch {
43
- payload = { _data: data };
44
- }
45
- } else {
46
- payload = data;
47
- }
48
- if (this.config.injectTraceContext) {
49
- const carrier = {};
50
- propagation.inject(context.active(), carrier);
51
- if (carrier.traceparent) {
52
- payload = {
53
- ...payload,
54
- _traceContext: {
55
- traceparent: carrier.traceparent,
56
- tracestate: carrier.tracestate,
57
- baggage: carrier.baggage
58
- }
59
- };
60
- }
61
- }
62
- return Buffer.from(JSON.stringify(payload));
63
- }
64
- /**
65
- * Put a single record to the stream
66
- *
67
- * @param record - Record to put
68
- * @returns Promise with shard ID and sequence number
69
- */
70
- async putRecord(record) {
71
- return trace(`kinesis.put`, async (ctx) => {
72
- ctx.setAttributes(
73
- buildKinesisAttributes({
74
- streamName: this.config.streamName,
75
- operation: "put"
76
- })
77
- );
78
- const input = {
79
- StreamName: this.config.streamName,
80
- Data: this.injectContext(record.data),
81
- PartitionKey: record.partitionKey,
82
- ...record.explicitHashKey && { ExplicitHashKey: record.explicitHashKey },
83
- ...record.sequenceNumberForOrdering && {
84
- SequenceNumberForOrdering: record.sequenceNumberForOrdering
85
- }
86
- };
87
- try {
88
- const { PutRecordCommand } = await import('@aws-sdk/client-kinesis');
89
- const result = await this.client.send(new PutRecordCommand(input));
90
- if (result.ShardId) {
91
- ctx.setAttribute("aws.kinesis.shard_id", result.ShardId);
92
- }
93
- if (result.SequenceNumber) {
94
- ctx.setAttribute("aws.kinesis.sequence_number", result.SequenceNumber);
95
- }
96
- ctx.setStatus({ code: SpanStatusCode.OK });
97
- return {
98
- shardId: result.ShardId,
99
- sequenceNumber: result.SequenceNumber,
100
- encryptionType: result.EncryptionType
101
- };
102
- } catch (error) {
103
- ctx.setStatus({
104
- code: SpanStatusCode.ERROR,
105
- message: error instanceof Error ? error.message : "Put failed"
106
- });
107
- throw error;
108
- }
109
- });
110
- }
111
- /**
112
- * Put multiple records in a batch
113
- *
114
- * @param records - Array of records to put (max 500)
115
- * @returns Promise with successful and failed record results
116
- */
117
- async putRecords(records) {
118
- return trace(`kinesis.putBatch`, async (ctx) => {
119
- ctx.setAttributes(
120
- buildKinesisAttributes({
121
- streamName: this.config.streamName,
122
- operation: "put"
123
- })
124
- );
125
- ctx.setAttribute("messaging.batch.message_count", records.length);
126
- const entries = records.map((record) => ({
127
- Data: this.injectContext(record.data),
128
- PartitionKey: record.partitionKey,
129
- ...record.explicitHashKey && { ExplicitHashKey: record.explicitHashKey }
130
- }));
131
- try {
132
- const { PutRecordsCommand } = await import('@aws-sdk/client-kinesis');
133
- const result = await this.client.send(
134
- new PutRecordsCommand({
135
- StreamName: this.config.streamName,
136
- Records: entries
137
- })
138
- );
139
- const successful = [];
140
- const failed = [];
141
- if (result.Records) {
142
- for (const r of result.Records) {
143
- const record = r;
144
- if (record.ErrorCode) {
145
- failed.push({ errorCode: record.ErrorCode, errorMessage: record.ErrorMessage });
146
- } else {
147
- successful.push({ shardId: record.ShardId, sequenceNumber: record.SequenceNumber });
148
- }
149
- }
150
- }
151
- ctx.setAttribute("messaging.kinesis.successful_count", successful.length);
152
- ctx.setAttribute("messaging.kinesis.failed_count", result.FailedRecordCount || 0);
153
- if (result.FailedRecordCount && result.FailedRecordCount > 0) {
154
- ctx.setStatus({
155
- code: SpanStatusCode.ERROR,
156
- message: `${result.FailedRecordCount} records failed`
157
- });
158
- } else {
159
- ctx.setStatus({ code: SpanStatusCode.OK });
160
- }
161
- return {
162
- successful,
163
- failed,
164
- failedRecordCount: result.FailedRecordCount || 0
165
- };
166
- } catch (error) {
167
- ctx.setStatus({
168
- code: SpanStatusCode.ERROR,
169
- message: error instanceof Error ? error.message : "Batch put failed"
170
- });
171
- throw error;
172
- }
173
- });
174
- }
175
- };
176
- var KinesisConsumer = class {
177
- client;
178
- config;
179
- constructor(client, config) {
180
- this.client = wrapSDKClient(client, config.service);
181
- this.config = {
182
- extractTraceContext: true,
183
- ...config
184
- };
185
- }
186
- /**
187
- * Extract trace context from record data
188
- */
189
- extractContext(data) {
190
- if (!this.config.extractTraceContext || !data?._traceContext) {
191
- return void 0;
192
- }
193
- const tc = data._traceContext;
194
- const carrier = {};
195
- if (tc.traceparent) carrier.traceparent = tc.traceparent;
196
- if (tc.tracestate) carrier.tracestate = tc.tracestate;
197
- if (tc.baggage) carrier.baggage = tc.baggage;
198
- return Object.keys(carrier).length > 0 ? carrier : void 0;
199
- }
200
- /**
201
- * Parse raw record data
202
- */
203
- parseRecord(record) {
204
- const rawData = record.Data ? Buffer.from(record.Data).toString("utf8") : "";
205
- let data;
206
- try {
207
- data = JSON.parse(rawData);
208
- } catch {
209
- data = rawData;
210
- }
211
- return {
212
- sequenceNumber: record.SequenceNumber || "",
213
- approximateArrivalTimestamp: record.ApproximateArrivalTimestamp,
214
- data,
215
- rawData,
216
- partitionKey: record.PartitionKey || "",
217
- encryptionType: record.EncryptionType,
218
- raw: record
219
- };
220
- }
221
- /**
222
- * Get a shard iterator
223
- *
224
- * @param shardId - Shard ID
225
- * @param type - Iterator type
226
- * @param startingSequenceNumber - Starting sequence number (for AT_SEQUENCE_NUMBER, AFTER_SEQUENCE_NUMBER)
227
- * @param timestamp - Starting timestamp (for AT_TIMESTAMP)
228
- * @returns Shard iterator string
229
- */
230
- async getShardIterator(shardId, type, startingSequenceNumber, timestamp) {
231
- return trace(`kinesis.getShardIterator`, async (ctx) => {
232
- ctx.setAttributes(
233
- buildKinesisAttributes({
234
- streamName: this.config.streamName,
235
- shardId,
236
- operation: "get"
237
- })
238
- );
239
- try {
240
- const { GetShardIteratorCommand } = await import('@aws-sdk/client-kinesis');
241
- const result = await this.client.send(
242
- new GetShardIteratorCommand({
243
- StreamName: this.config.streamName,
244
- ShardId: shardId,
245
- ShardIteratorType: type,
246
- ...startingSequenceNumber && { StartingSequenceNumber: startingSequenceNumber },
247
- ...timestamp && { Timestamp: timestamp }
248
- })
249
- );
250
- ctx.setStatus({ code: SpanStatusCode.OK });
251
- return result.ShardIterator || "";
252
- } catch (error) {
253
- ctx.setStatus({
254
- code: SpanStatusCode.ERROR,
255
- message: error instanceof Error ? error.message : "GetShardIterator failed"
256
- });
257
- throw error;
258
- }
259
- });
260
- }
261
- /**
262
- * Get records from a shard iterator
263
- *
264
- * @param shardIterator - Shard iterator
265
- * @param limit - Maximum records to return (max 10000)
266
- * @returns Records and next shard iterator
267
- */
268
- async getRecords(shardIterator, limit) {
269
- return trace(`kinesis.get`, async (ctx) => {
270
- ctx.setAttributes(
271
- buildKinesisAttributes({
272
- streamName: this.config.streamName,
273
- operation: "get"
274
- })
275
- );
276
- try {
277
- const { GetRecordsCommand } = await import('@aws-sdk/client-kinesis');
278
- const result = await this.client.send(
279
- new GetRecordsCommand({
280
- ShardIterator: shardIterator,
281
- ...limit && { Limit: limit }
282
- })
283
- );
284
- const records = (result.Records || []).map((r) => this.parseRecord(r));
285
- ctx.setAttribute("messaging.batch.message_count", records.length);
286
- if (result.MillisBehindLatest !== void 0) {
287
- ctx.setAttribute("aws.kinesis.millis_behind_latest", result.MillisBehindLatest);
288
- }
289
- ctx.setStatus({ code: SpanStatusCode.OK });
290
- return {
291
- records,
292
- nextIterator: result.NextShardIterator,
293
- millisBehindLatest: result.MillisBehindLatest
294
- };
295
- } catch (error) {
296
- ctx.setStatus({
297
- code: SpanStatusCode.ERROR,
298
- message: error instanceof Error ? error.message : "GetRecords failed"
299
- });
300
- throw error;
301
- }
302
- });
303
- }
304
- /**
305
- * Process records with automatic trace context extraction
306
- *
307
- * @param shardIterator - Shard iterator
308
- * @param processor - Function to process each record
309
- * @param limit - Maximum records to process
310
- * @returns Next shard iterator and count of processed records
311
- */
312
- async processRecords(shardIterator, processor, limit) {
313
- const { records, nextIterator } = await this.getRecords(shardIterator, limit);
314
- let processedCount = 0;
315
- for (const record of records) {
316
- const carrier = this.extractContext(record.data);
317
- const processRecord = async () => {
318
- return trace(`kinesis.process`, async (ctx) => {
319
- ctx.setAttributes(
320
- buildKinesisAttributes({
321
- streamName: this.config.streamName,
322
- operation: "get"
323
- })
324
- );
325
- ctx.setAttribute("aws.kinesis.sequence_number", record.sequenceNumber);
326
- ctx.setAttribute("aws.kinesis.partition_key", record.partitionKey);
327
- try {
328
- await processor(record, ctx);
329
- processedCount++;
330
- ctx.setStatus({ code: SpanStatusCode.OK });
331
- } catch (error) {
332
- ctx.setStatus({
333
- code: SpanStatusCode.ERROR,
334
- message: error instanceof Error ? error.message : "Processing failed"
335
- });
336
- throw error;
337
- }
338
- });
339
- };
340
- if (carrier) {
341
- const extractedContext = propagation.extract(context.active(), carrier);
342
- await context.with(extractedContext, processRecord);
343
- } else {
344
- await processRecord();
345
- }
346
- }
347
- return { nextIterator, processedCount };
348
- }
349
- /**
350
- * List shards for the stream
351
- *
352
- * @returns Array of shard IDs
353
- */
354
- async listShards() {
355
- return trace(`kinesis.listShards`, async (ctx) => {
356
- ctx.setAttributes(
357
- buildKinesisAttributes({
358
- streamName: this.config.streamName,
359
- operation: "get"
360
- })
361
- );
362
- try {
363
- const { ListShardsCommand } = await import('@aws-sdk/client-kinesis');
364
- const result = await this.client.send(
365
- new ListShardsCommand({
366
- StreamName: this.config.streamName
367
- })
368
- );
369
- const shardIds = result.Shards?.map((s) => s.ShardId || "") || [];
370
- ctx.setAttribute("aws.kinesis.shard_count", shardIds.length);
371
- ctx.setStatus({ code: SpanStatusCode.OK });
372
- return shardIds;
373
- } catch (error) {
374
- ctx.setStatus({
375
- code: SpanStatusCode.ERROR,
376
- message: error instanceof Error ? error.message : "ListShards failed"
377
- });
378
- throw error;
379
- }
380
- });
381
- }
382
- };
383
-
384
- export { KinesisConsumer, KinesisProducer, traceKinesis };
385
- //# sourceMappingURL=chunk-X6BY6PCK.js.map
386
- //# sourceMappingURL=chunk-X6BY6PCK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/kinesis/index.ts"],"names":[],"mappings":"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","file":"chunk-X6BY6PCK.js","sourcesContent":["/**\n * Kinesis-specific instrumentation\n *\n * Provides semantic helpers for tracing Kinesis Data Streams operations with proper\n * OpenTelemetry messaging semantic conventions.\n *\n * @example Put record to stream\n * ```typescript\n * import { traceKinesis } from 'autotel-aws/kinesis';\n * import { KinesisClient, PutRecordCommand } from '@aws-sdk/client-kinesis';\n *\n * const kinesis = new KinesisClient({});\n *\n * export const putRecord = traceKinesis({\n * operation: 'put',\n * streamName: 'my-stream'\n * })(ctx => async (data: object, partitionKey: string) => {\n * const result = await kinesis.send(new PutRecordCommand({\n * StreamName: 'my-stream',\n * Data: Buffer.from(JSON.stringify(data)),\n * PartitionKey: partitionKey\n * }));\n *\n * ctx.setAttribute('aws.kinesis.shard_id', result.ShardId ?? '');\n * ctx.setAttribute('aws.kinesis.sequence_number', result.SequenceNumber ?? '');\n *\n * return result;\n * });\n *\n * // Usage: await putRecord({ event: 'click' }, 'user-123');\n * ```\n *\n * @example Get records from shard\n * ```typescript\n * export const getRecords = traceKinesis({\n * operation: 'get',\n * streamName: 'my-stream'\n * })(ctx => async (shardIterator: string, limit: number) => {\n * const result = await kinesis.send(new GetRecordsCommand({\n * ShardIterator: shardIterator,\n * Limit: limit\n * }));\n *\n * ctx.setAttribute('messaging.batch.message_count', result.Records?.length ?? 0);\n * return result;\n * });\n * ```\n */\n\nimport { trace, type TraceContext } from 'autotel';\nimport { context, propagation, SpanStatusCode } from '@opentelemetry/api';\nimport { buildKinesisAttributes } from '../attributes';\nimport { wrapSDKClient } from '../common/sdk-wrapper';\n\n/**\n * Kinesis operation configuration\n */\nexport interface TraceKinesisConfig {\n /**\n * Kinesis operation type\n * - 'put' - PutRecord, PutRecords\n * - 'get' - GetRecords, GetShardIterator\n */\n operation: 'put' | 'get';\n\n /**\n * Kinesis stream name\n * Sets `messaging.destination.name` attribute.\n */\n streamName: string;\n\n /**\n * Shard ID (if known at configuration time)\n * Sets `aws.kinesis.shard_id` attribute.\n */\n shardId?: string;\n}\n\n/**\n * Trace Kinesis operations with semantic attributes\n *\n * Creates a traced function that automatically sets Kinesis messaging semantic attributes\n * following OpenTelemetry conventions.\n *\n * @param config - Kinesis operation configuration\n * @returns A higher-order function that wraps your Kinesis operation with tracing\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `messaging.system` - 'aws_kinesis'\n * - `messaging.destination.name` - Stream name\n * - `messaging.operation` - 'put' or 'get'\n * - `aws.kinesis.shard_id` - Shard ID (if provided)\n *\n * Additional attributes you should set in your handler:\n * - `aws.kinesis.sequence_number` - Record sequence number\n * - `messaging.batch.message_count` - Number of records in batch\n *\n * @see https://opentelemetry.io/docs/specs/semconv/messaging/aws-kinesis/\n */\nexport function traceKinesis(config: TraceKinesisConfig) {\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 `kinesis.${config.operation}`,\n (ctx: TraceContext) =>\n async (...args: TArgs): Promise<TReturn> => {\n // Set Kinesis semantic attributes\n ctx.setAttributes(\n buildKinesisAttributes({\n streamName: config.streamName,\n shardId: config.shardId,\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\n// ============================================================================\n// Kinesis Producer - Puts records with automatic trace context injection\n// ============================================================================\n\n/**\n * Configuration for Kinesis Producer\n */\nexport interface KinesisProducerConfig {\n /**\n * Kinesis stream name or ARN\n */\n streamName: string;\n\n /**\n * Inject W3C Trace Context into record data\n * Enables distributed tracing across producer/consumer\n * @default true\n */\n injectTraceContext?: boolean;\n\n /**\n * Optional service name for tracing\n */\n service?: string;\n}\n\n/**\n * Record to put via Kinesis Producer\n */\nexport interface KinesisRecord {\n /**\n * Record data (will be serialized to JSON if object)\n */\n data: string | object;\n\n /**\n * Partition key for sharding\n */\n partitionKey: string;\n\n /**\n * Optional explicit hash key\n */\n explicitHashKey?: string;\n\n /**\n * Optional sequence number for ordering\n */\n sequenceNumberForOrdering?: string;\n}\n\n/**\n * Kinesis Producer with automatic trace context injection\n *\n * Wraps a Kinesis client to automatically:\n * - Create spans for put operations\n * - Inject W3C Trace Context into record data\n * - Set proper semantic attributes\n *\n * @example Basic usage\n * ```typescript\n * import { KinesisProducer } from 'autotel-aws/kinesis';\n * import { KinesisClient } from '@aws-sdk/client-kinesis';\n *\n * const kinesis = new KinesisClient({ region: 'us-east-1' });\n * const producer = new KinesisProducer(kinesis, {\n * streamName: 'my-stream'\n * });\n *\n * // Put with automatic trace context\n * const result = await producer.putRecord({\n * data: { event: 'click', userId: '123' },\n * partitionKey: 'user-123'\n * });\n * console.log('Sequence:', result.sequenceNumber);\n * ```\n *\n * @example Batch put\n * ```typescript\n * const results = await producer.putRecords([\n * { data: { event: 'click' }, partitionKey: 'user-1' },\n * { data: { event: 'view' }, partitionKey: 'user-2' },\n * { data: { event: 'scroll' }, partitionKey: 'user-3' }\n * ]);\n * console.log(`Put ${results.successful.length} records`);\n * ```\n */\nexport class KinesisProducer<\n \n TClient extends { send: (command: any) => Promise<any> } = any,\n> {\n private client: TClient;\n private config: Required<Pick<KinesisProducerConfig, 'streamName'>> & KinesisProducerConfig;\n\n constructor(client: TClient, config: KinesisProducerConfig) {\n this.client = wrapSDKClient(client as any, config.service) as TClient;\n this.config = {\n injectTraceContext: true,\n ...config,\n };\n }\n\n /**\n * Inject trace context into record data\n */\n private injectContext(data: string | object): Buffer {\n let payload: object;\n\n if (typeof data === 'string') {\n try {\n payload = JSON.parse(data);\n } catch {\n // If not valid JSON, wrap in object\n payload = { _data: data };\n }\n } else {\n payload = data;\n }\n\n if (this.config.injectTraceContext) {\n const carrier: Record<string, string> = {};\n propagation.inject(context.active(), carrier);\n\n if (carrier.traceparent) {\n payload = {\n ...payload,\n _traceContext: {\n traceparent: carrier.traceparent,\n tracestate: carrier.tracestate,\n baggage: carrier.baggage,\n },\n };\n }\n }\n\n return Buffer.from(JSON.stringify(payload));\n }\n\n /**\n * Put a single record to the stream\n *\n * @param record - Record to put\n * @returns Promise with shard ID and sequence number\n */\n async putRecord(record: KinesisRecord): Promise<{\n shardId?: string;\n sequenceNumber?: string;\n encryptionType?: string;\n }> {\n return trace(`kinesis.put`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildKinesisAttributes({\n streamName: this.config.streamName,\n operation: 'put',\n }),\n );\n\n const input = {\n StreamName: this.config.streamName,\n Data: this.injectContext(record.data),\n PartitionKey: record.partitionKey,\n ...(record.explicitHashKey && { ExplicitHashKey: record.explicitHashKey }),\n ...(record.sequenceNumberForOrdering && {\n SequenceNumberForOrdering: record.sequenceNumberForOrdering,\n }),\n };\n\n try {\n const { PutRecordCommand } = await import('@aws-sdk/client-kinesis');\n const result = await this.client.send(new PutRecordCommand(input));\n\n if (result.ShardId) {\n ctx.setAttribute('aws.kinesis.shard_id', result.ShardId);\n }\n if (result.SequenceNumber) {\n ctx.setAttribute('aws.kinesis.sequence_number', result.SequenceNumber);\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return {\n shardId: result.ShardId,\n sequenceNumber: result.SequenceNumber,\n encryptionType: result.EncryptionType,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Put failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Put multiple records in a batch\n *\n * @param records - Array of records to put (max 500)\n * @returns Promise with successful and failed record results\n */\n async putRecords(records: KinesisRecord[]): Promise<{\n successful: Array<{ shardId?: string; sequenceNumber?: string }>;\n failed: Array<{ errorCode?: string; errorMessage?: string }>;\n failedRecordCount: number;\n }> {\n return trace(`kinesis.putBatch`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildKinesisAttributes({\n streamName: this.config.streamName,\n operation: 'put',\n }),\n );\n ctx.setAttribute('messaging.batch.message_count', records.length);\n\n const entries = records.map((record) => ({\n Data: this.injectContext(record.data),\n PartitionKey: record.partitionKey,\n ...(record.explicitHashKey && { ExplicitHashKey: record.explicitHashKey }),\n }));\n\n try {\n const { PutRecordsCommand } = await import('@aws-sdk/client-kinesis');\n const result = await this.client.send(\n new PutRecordsCommand({\n StreamName: this.config.streamName,\n Records: entries,\n }),\n );\n\n const successful: Array<{ shardId?: string; sequenceNumber?: string }> = [];\n const failed: Array<{ errorCode?: string; errorMessage?: string }> = [];\n\n if (result.Records) {\n for (const r of result.Records) {\n const record = r as { ShardId?: string; SequenceNumber?: string; ErrorCode?: string; ErrorMessage?: string };\n if (record.ErrorCode) {\n failed.push({ errorCode: record.ErrorCode, errorMessage: record.ErrorMessage });\n } else {\n successful.push({ shardId: record.ShardId, sequenceNumber: record.SequenceNumber });\n }\n }\n }\n\n ctx.setAttribute('messaging.kinesis.successful_count', successful.length);\n ctx.setAttribute('messaging.kinesis.failed_count', result.FailedRecordCount || 0);\n\n if (result.FailedRecordCount && result.FailedRecordCount > 0) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${result.FailedRecordCount} records failed`,\n });\n } else {\n ctx.setStatus({ code: SpanStatusCode.OK });\n }\n\n return {\n successful,\n failed,\n failedRecordCount: result.FailedRecordCount || 0,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Batch put failed',\n });\n throw error;\n }\n });\n }\n}\n\n// ============================================================================\n// Kinesis Consumer - Gets records with trace context extraction\n// ============================================================================\n\n/**\n * Configuration for Kinesis Consumer\n */\nexport interface KinesisConsumerConfig {\n /**\n * Kinesis stream name or ARN\n */\n streamName: string;\n\n /**\n * Extract W3C Trace Context from record data\n * Creates child spans linked to the producer\n * @default true\n */\n extractTraceContext?: boolean;\n\n /**\n * Optional service name for tracing\n */\n service?: string;\n}\n\n/**\n * Received Kinesis record with parsed data\n */\nexport interface ReceivedKinesisRecord {\n /**\n * Sequence number\n */\n sequenceNumber: string;\n\n /**\n * Approximate arrival timestamp\n */\n approximateArrivalTimestamp?: Date;\n\n /**\n * Parsed data (JSON parsed if possible)\n */\n \n data: any;\n\n /**\n * Raw data as string\n */\n rawData: string;\n\n /**\n * Partition key\n */\n partitionKey: string;\n\n /**\n * Encryption type\n */\n encryptionType?: string;\n\n /**\n * Original AWS SDK record object\n */\n \n raw: any;\n}\n\n/**\n * Record processor function type\n */\nexport type KinesisRecordProcessor = (\n record: ReceivedKinesisRecord,\n ctx: TraceContext,\n) => Promise<void>;\n\n/**\n * Kinesis Consumer with automatic trace context extraction\n *\n * Wraps a Kinesis client to automatically:\n * - Create spans for get operations\n * - Extract W3C Trace Context from record data\n * - Link consumer spans to producer spans\n *\n * @example Basic usage\n * ```typescript\n * import { KinesisConsumer } from 'autotel-aws/kinesis';\n * import { KinesisClient } from '@aws-sdk/client-kinesis';\n *\n * const kinesis = new KinesisClient({ region: 'us-east-1' });\n * const consumer = new KinesisConsumer(kinesis, {\n * streamName: 'my-stream'\n * });\n *\n * // Get shard iterator first\n * const iterator = await consumer.getShardIterator('shardId-000000000000', 'LATEST');\n *\n * // Process records with automatic tracing\n * const { nextIterator, records } = await consumer.getRecords(iterator, 100);\n *\n * for (const record of records) {\n * console.log('Record:', record.data);\n * }\n * ```\n *\n * @example With processor function\n * ```typescript\n * await consumer.processRecords(iterator, async (record, ctx) => {\n * ctx.setAttribute('event.type', record.data.event);\n * await handleEvent(record.data);\n * });\n * ```\n */\nexport class KinesisConsumer<\n \n TClient extends { send: (command: any) => Promise<any> } = any,\n> {\n private client: TClient;\n private config: Required<Pick<KinesisConsumerConfig, 'streamName'>> & KinesisConsumerConfig;\n\n constructor(client: TClient, config: KinesisConsumerConfig) {\n this.client = wrapSDKClient(client as any, config.service) as TClient;\n this.config = {\n extractTraceContext: true,\n ...config,\n };\n }\n\n /**\n * Extract trace context from record data\n */\n \n private extractContext(data: any): Record<string, string> | undefined {\n if (!this.config.extractTraceContext || !data?._traceContext) {\n return undefined;\n }\n\n const tc = data._traceContext;\n const carrier: Record<string, string> = {};\n\n if (tc.traceparent) carrier.traceparent = tc.traceparent;\n if (tc.tracestate) carrier.tracestate = tc.tracestate;\n if (tc.baggage) carrier.baggage = tc.baggage;\n\n return Object.keys(carrier).length > 0 ? carrier : undefined;\n }\n\n /**\n * Parse raw record data\n */\n \n private parseRecord(record: any): ReceivedKinesisRecord {\n const rawData = record.Data ? Buffer.from(record.Data).toString('utf8') : '';\n \n let data: any;\n\n try {\n data = JSON.parse(rawData);\n } catch {\n data = rawData;\n }\n\n return {\n sequenceNumber: record.SequenceNumber || '',\n approximateArrivalTimestamp: record.ApproximateArrivalTimestamp,\n data,\n rawData,\n partitionKey: record.PartitionKey || '',\n encryptionType: record.EncryptionType,\n raw: record,\n };\n }\n\n /**\n * Get a shard iterator\n *\n * @param shardId - Shard ID\n * @param type - Iterator type\n * @param startingSequenceNumber - Starting sequence number (for AT_SEQUENCE_NUMBER, AFTER_SEQUENCE_NUMBER)\n * @param timestamp - Starting timestamp (for AT_TIMESTAMP)\n * @returns Shard iterator string\n */\n async getShardIterator(\n shardId: string,\n type: 'AT_SEQUENCE_NUMBER' | 'AFTER_SEQUENCE_NUMBER' | 'TRIM_HORIZON' | 'LATEST' | 'AT_TIMESTAMP',\n startingSequenceNumber?: string,\n timestamp?: Date,\n ): Promise<string> {\n return trace(`kinesis.getShardIterator`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildKinesisAttributes({\n streamName: this.config.streamName,\n shardId,\n operation: 'get',\n }),\n );\n\n try {\n const { GetShardIteratorCommand } = await import('@aws-sdk/client-kinesis');\n const result = await this.client.send(\n new GetShardIteratorCommand({\n StreamName: this.config.streamName,\n ShardId: shardId,\n ShardIteratorType: type,\n ...(startingSequenceNumber && { StartingSequenceNumber: startingSequenceNumber }),\n ...(timestamp && { Timestamp: timestamp }),\n }),\n );\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n return result.ShardIterator || '';\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'GetShardIterator failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Get records from a shard iterator\n *\n * @param shardIterator - Shard iterator\n * @param limit - Maximum records to return (max 10000)\n * @returns Records and next shard iterator\n */\n async getRecords(\n shardIterator: string,\n limit?: number,\n ): Promise<{\n records: ReceivedKinesisRecord[];\n nextIterator?: string;\n millisBehindLatest?: number;\n }> {\n return trace(`kinesis.get`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildKinesisAttributes({\n streamName: this.config.streamName,\n operation: 'get',\n }),\n );\n\n try {\n const { GetRecordsCommand } = await import('@aws-sdk/client-kinesis');\n const result = await this.client.send(\n new GetRecordsCommand({\n ShardIterator: shardIterator,\n ...(limit && { Limit: limit }),\n }),\n );\n\n \n const records = (result.Records || []).map((r: any) => this.parseRecord(r));\n ctx.setAttribute('messaging.batch.message_count', records.length);\n\n if (result.MillisBehindLatest !== undefined) {\n ctx.setAttribute('aws.kinesis.millis_behind_latest', result.MillisBehindLatest);\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return {\n records,\n nextIterator: result.NextShardIterator,\n millisBehindLatest: result.MillisBehindLatest,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'GetRecords failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Process records with automatic trace context extraction\n *\n * @param shardIterator - Shard iterator\n * @param processor - Function to process each record\n * @param limit - Maximum records to process\n * @returns Next shard iterator and count of processed records\n */\n async processRecords(\n shardIterator: string,\n processor: KinesisRecordProcessor,\n limit?: number,\n ): Promise<{ nextIterator?: string; processedCount: number }> {\n const { records, nextIterator } = await this.getRecords(shardIterator, limit);\n let processedCount = 0;\n\n for (const record of records) {\n // Extract trace context from record data\n const carrier = this.extractContext(record.data);\n\n // Create processing span, optionally linked to producer\n const processRecord = async () => {\n return trace(`kinesis.process`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildKinesisAttributes({\n streamName: this.config.streamName,\n operation: 'get',\n }),\n );\n ctx.setAttribute('aws.kinesis.sequence_number', record.sequenceNumber);\n ctx.setAttribute('aws.kinesis.partition_key', record.partitionKey);\n\n try {\n await processor(record, ctx);\n processedCount++;\n ctx.setStatus({ code: SpanStatusCode.OK });\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Processing failed',\n });\n throw error;\n }\n });\n };\n\n // Run with extracted context if available\n if (carrier) {\n const extractedContext = propagation.extract(context.active(), carrier);\n await context.with(extractedContext, processRecord);\n } else {\n await processRecord();\n }\n }\n\n return { nextIterator, processedCount };\n }\n\n /**\n * List shards for the stream\n *\n * @returns Array of shard IDs\n */\n async listShards(): Promise<string[]> {\n return trace(`kinesis.listShards`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildKinesisAttributes({\n streamName: this.config.streamName,\n operation: 'get',\n }),\n );\n\n try {\n const { ListShardsCommand } = await import('@aws-sdk/client-kinesis');\n const result = await this.client.send(\n new ListShardsCommand({\n StreamName: this.config.streamName,\n }),\n );\n\n const shardIds = result.Shards?.map((s: { ShardId?: string }) => s.ShardId || '') || [];\n ctx.setAttribute('aws.kinesis.shard_count', shardIds.length);\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return shardIds;\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'ListShards failed',\n });\n throw error;\n }\n });\n }\n}\n"]}
@@ -1,84 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkUZEJV2YD_cjs = require('./chunk-UZEJV2YD.cjs');
4
- var chunkJEQ2X3Z6_cjs = require('./chunk-JEQ2X3Z6.cjs');
5
-
6
- // src/sdk/auto-instrument.ts
7
- var INSTRUMENTED_SYMBOL = /* @__PURE__ */ Symbol.for("autotel-aws.instrumented");
8
- var globalAutoInstrumentEnabled = false;
9
- var originalSmithyClientSend = null;
10
- function isInstrumented(client) {
11
- return typeof client === "object" && client !== null && client[INSTRUMENTED_SYMBOL] === true;
12
- }
13
- function markAsInstrumented(client) {
14
- client[INSTRUMENTED_SYMBOL] = true;
15
- return client;
16
- }
17
- function instrumentSDK(client, config) {
18
- if (isInstrumented(client)) {
19
- return client;
20
- }
21
- const wrappedClient = chunkUZEJV2YD_cjs.wrapSDKClient(client, config?.service);
22
- return markAsInstrumented(wrappedClient);
23
- }
24
- function createTracedClient(ClientClass, config) {
25
- const client = new ClientClass(config);
26
- return instrumentSDK(client, config);
27
- }
28
- function autoInstrumentAWS(config) {
29
- if (globalAutoInstrumentEnabled) {
30
- return;
31
- }
32
- let SmithyClient;
33
- try {
34
- SmithyClient = chunkJEQ2X3Z6_cjs.__require("@aws-sdk/smithy-client").Client;
35
- } catch {
36
- try {
37
- SmithyClient = chunkJEQ2X3Z6_cjs.__require("@smithy/smithy-client").Client;
38
- } catch {
39
- console.warn(
40
- "[autotel-aws] autoInstrumentAWS() requires @aws-sdk/smithy-client or @smithy/smithy-client. Install an AWS SDK v3 client package (e.g., @aws-sdk/client-s3) or use instrumentSDK() directly."
41
- );
42
- return;
43
- }
44
- }
45
- originalSmithyClientSend = SmithyClient.prototype.send;
46
- const originalSend = SmithyClient.prototype.send;
47
- SmithyClient.prototype.send = function patchedSend(command, ...args) {
48
- if (isInstrumented(this)) {
49
- return originalSend.call(this, command, ...args);
50
- }
51
- const wrappedClient = chunkUZEJV2YD_cjs.wrapSDKClient(this, config?.service);
52
- return wrappedClient.send(command, ...args);
53
- };
54
- globalAutoInstrumentEnabled = true;
55
- }
56
- function disableAutoInstrumentAWS() {
57
- if (!globalAutoInstrumentEnabled || !originalSmithyClientSend) {
58
- return;
59
- }
60
- let SmithyClient;
61
- try {
62
- SmithyClient = chunkJEQ2X3Z6_cjs.__require("@aws-sdk/smithy-client").Client;
63
- } catch {
64
- try {
65
- SmithyClient = chunkJEQ2X3Z6_cjs.__require("@smithy/smithy-client").Client;
66
- } catch {
67
- return;
68
- }
69
- }
70
- SmithyClient.prototype.send = originalSmithyClientSend;
71
- originalSmithyClientSend = null;
72
- globalAutoInstrumentEnabled = false;
73
- }
74
- function isAutoInstrumentEnabled() {
75
- return globalAutoInstrumentEnabled;
76
- }
77
-
78
- exports.autoInstrumentAWS = autoInstrumentAWS;
79
- exports.createTracedClient = createTracedClient;
80
- exports.disableAutoInstrumentAWS = disableAutoInstrumentAWS;
81
- exports.instrumentSDK = instrumentSDK;
82
- exports.isAutoInstrumentEnabled = isAutoInstrumentEnabled;
83
- //# sourceMappingURL=chunk-XOF2H2PI.cjs.map
84
- //# sourceMappingURL=chunk-XOF2H2PI.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sdk/auto-instrument.ts"],"names":["wrapSDKClient","__require"],"mappings":";;;;;;AA2BA,IAAM,mBAAA,mBAAsB,MAAA,CAAO,GAAA,CAAI,0BAA0B,CAAA;AAGjE,IAAI,2BAAA,GAA8B,KAAA;AAGlC,IAAI,wBAAA,GAA8E,IAAA;AAKlF,SAAS,eAAe,MAAA,EAA0B;AAChD,EAAA,OACE,OAAO,MAAA,KAAW,QAAA,IAClB,WAAW,IAAA,IACV,MAAA,CAAmC,mBAAmB,CAAA,KAAM,IAAA;AAEjE;AAKA,SAAS,mBAAsB,MAAA,EAAc;AAC3C,EAAC,MAAA,CAAmC,mBAAmB,CAAA,GAAI,IAAA;AAC3D,EAAA,OAAO,MAAA;AACT;AAuCO,SAAS,aAAA,CACd,QACA,MAAA,EACG;AAEH,EAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgBA,+BAAA,CAAc,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC3D,EAAA,OAAO,mBAAmB,aAAa,CAAA;AACzC;AAyBO,SAAS,kBAAA,CAId,aACA,MAAA,EACiB;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,MAAa,CAAA;AAC5C,EAAA,OAAO,aAAA,CAAc,QAAQ,MAAM,CAAA;AACrC;AA6CO,SAAS,kBAAkB,MAAA,EAAyC;AAEzE,EAAA,IAAI,2BAAA,EAA6B;AAC/B,IAAA;AAAA,EACF;AAIA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AAGF,IAAA,YAAA,GAAeC,2BAAA,CAAQ,wBAAwB,CAAA,CAAE,MAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AAEN,IAAA,IAAI;AAEF,MAAA,YAAA,GAAeA,2BAAA,CAAQ,uBAAuB,CAAA,CAAE,MAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OAEF;AACA,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,wBAAA,GAA2B,aAAa,SAAA,CAAU,IAAA;AAGlD,EAAA,MAAM,YAAA,GAAe,aAAa,SAAA,CAAU,IAAA;AAE5C,EAAA,YAAA,CAAa,SAAA,CAAU,IAAA,GAAO,SAAS,WAAA,CAErC,YACG,IAAA,EACe;AAElB,IAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,IACjD;AAIA,IAAA,MAAM,aAAA,GAAgBD,+BAAA,CAAc,IAAA,EAAoD,MAAA,EAAQ,OAAO,CAAA;AAEvG,IAAA,OAAQ,aAAA,CAAsB,IAAA,CAAK,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EACrD,CAAA;AAEA,EAAA,2BAAA,GAA8B,IAAA;AAChC;AAmBO,SAAS,wBAAA,GAAiC;AAC/C,EAAA,IAAI,CAAC,2BAAA,IAA+B,CAAC,wBAAA,EAA0B;AAC7D,IAAA;AAAA,EACF;AAGA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AAEF,IAAA,YAAA,GAAeC,2BAAA,CAAQ,wBAAwB,CAAA,CAAE,MAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AAEF,MAAA,YAAA,GAAeA,2BAAA,CAAQ,uBAAuB,CAAA,CAAE,MAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,YAAA,CAAa,UAAU,IAAA,GAAO,wBAAA;AAC9B,EAAA,wBAAA,GAA2B,IAAA;AAC3B,EAAA,2BAAA,GAA8B,KAAA;AAChC;AAKO,SAAS,uBAAA,GAAmC;AACjD,EAAA,OAAO,2BAAA;AACT","file":"chunk-XOF2H2PI.cjs","sourcesContent":["/**\n * AWS SDK v3 auto-instrumentation\n *\n * Provides multiple approaches for instrumenting AWS SDK v3 clients:\n * 1. `instrumentSDK()` - Wrap an existing client instance\n * 2. `createTracedClient()` - Create a pre-instrumented client\n * 3. `autoInstrumentAWS()` - Globally patch all AWS SDK clients\n *\n * @example Basic instrumentation\n * ```typescript\n * import { instrumentSDK } from 'autotel-aws/sdk';\n * import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';\n *\n * const s3 = instrumentSDK(new S3Client({ region: 'us-east-1' }));\n *\n * // All send() calls are now traced\n * await s3.send(new PutObjectCommand({ Bucket: 'my-bucket', Key: 'file.txt' }));\n * ```\n */\n\n// Type-only import from optional peer dependency\n// @ts-expect-error - Optional peer dependency, may not be installed\nimport type { Client, Command } from '@aws-sdk/smithy-client';\nimport { wrapSDKClient } from '../common/sdk-wrapper';\nimport type { SDKInstrumentationConfig } from '../config';\n\n// Symbol to mark clients as instrumented (prevents double-wrapping)\nconst INSTRUMENTED_SYMBOL = Symbol.for('autotel-aws.instrumented');\n\n// Track whether global auto-instrumentation is active\nlet globalAutoInstrumentEnabled = false;\n\n// Store original send method for restoration\nlet originalSmithyClientSend: ((...args: unknown[]) => Promise<unknown>) | null = null;\n\n/**\n * Check if a client is already instrumented\n */\nfunction isInstrumented(client: unknown): boolean {\n return (\n typeof client === 'object' &&\n client !== null &&\n (client as Record<symbol, boolean>)[INSTRUMENTED_SYMBOL] === true\n );\n}\n\n/**\n * Mark a client as instrumented\n */\nfunction markAsInstrumented<T>(client: T): T {\n (client as Record<symbol, boolean>)[INSTRUMENTED_SYMBOL] = true;\n return client;\n}\n\n/**\n * Instrument an existing AWS SDK v3 client\n *\n * Wraps the client's `send()` method to automatically create spans\n * for all AWS API calls with proper semantic attributes.\n *\n * @param client - An AWS SDK v3 client instance\n * @param config - Optional instrumentation configuration\n * @returns The instrumented client (same instance, modified)\n *\n * @example Basic usage\n * ```typescript\n * import { instrumentSDK } from 'autotel-aws/sdk';\n * import { S3Client } from '@aws-sdk/client-s3';\n *\n * const s3 = instrumentSDK(new S3Client({ region: 'us-east-1' }));\n * ```\n *\n * @example With configuration\n * ```typescript\n * const s3 = instrumentSDK(new S3Client({}), {\n * service: 's3',\n * captureRequest: true,\n * captureResponse: true\n * });\n * ```\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `rpc.system` - 'aws-api'\n * - `rpc.service` - AWS service name (e.g., 'S3', 'DynamoDB')\n * - `rpc.method` - Operation name (e.g., 'GetObject', 'PutItem')\n * - `aws.request_id` - AWS request ID from response\n * - `http.status_code` - HTTP status code\n *\n * @see https://opentelemetry.io/docs/specs/semconv/cloud-providers/aws-sdk/\n */\nexport function instrumentSDK<T extends Client<unknown, unknown, unknown, unknown>>(\n client: T,\n config?: SDKInstrumentationConfig,\n): T {\n // Prevent double-instrumentation\n if (isInstrumented(client)) {\n return client;\n }\n\n const wrappedClient = wrapSDKClient(client, config?.service);\n return markAsInstrumented(wrappedClient);\n}\n\n/**\n * Create a pre-instrumented AWS SDK v3 client\n *\n * Convenience factory that creates and instruments a client in one call.\n *\n * @param ClientClass - The AWS SDK client class constructor\n * @param config - Client configuration merged with instrumentation config\n * @returns A new instrumented client instance\n *\n * @example\n * ```typescript\n * import { createTracedClient } from 'autotel-aws/sdk';\n * import { S3Client } from '@aws-sdk/client-s3';\n * import { DynamoDBClient } from '@aws-sdk/client-dynamodb';\n *\n * // Create instrumented clients\n * const s3 = createTracedClient(S3Client, { region: 'us-east-1' });\n * const dynamodb = createTracedClient(DynamoDBClient, {\n * region: 'us-east-1',\n * captureRequest: true\n * });\n * ```\n */\nexport function createTracedClient<\n \n T extends new (...args: any[]) => Client<unknown, unknown, unknown, unknown>,\n>(\n ClientClass: T,\n config?: SDKInstrumentationConfig & ConstructorParameters<T>[0],\n): InstanceType<T> {\n \n const client = new ClientClass(config as any);\n return instrumentSDK(client, config) as InstanceType<T>;\n}\n\n/**\n * Auto-instrument all AWS SDK v3 clients globally\n *\n * Patches the AWS SDK's base Client class to automatically instrument\n * all client instances created after this call. This is the most convenient\n * approach but requires the AWS SDK to be installed.\n *\n * Call this once at application startup, before creating any clients.\n *\n * @param config - Optional default instrumentation configuration\n *\n * @example Basic usage\n * ```typescript\n * import { autoInstrumentAWS } from 'autotel-aws/sdk';\n *\n * // Call once at startup\n * autoInstrumentAWS();\n *\n * // All subsequent clients are automatically instrumented\n * const s3 = new S3Client({ region: 'us-east-1' });\n * const dynamodb = new DynamoDBClient({ region: 'us-east-1' });\n *\n * // Both are traced automatically\n * await s3.send(new GetObjectCommand({ Bucket: 'b', Key: 'k' }));\n * await dynamodb.send(new GetItemCommand({ TableName: 't', Key: {} }));\n * ```\n *\n * @example With default configuration\n * ```typescript\n * autoInstrumentAWS({\n * captureRequest: false,\n * captureResponse: false\n * });\n * ```\n *\n * @remarks\n * - This function is idempotent - calling it multiple times has no effect\n * - Clients created before calling this function are NOT instrumented\n * - Use `instrumentSDK()` for clients created before auto-instrumentation\n * - Requires `@aws-sdk/smithy-client` to be installed (peer dependency)\n *\n * @throws Error if AWS SDK is not installed\n */\nexport function autoInstrumentAWS(config?: SDKInstrumentationConfig): void {\n // Idempotency check\n if (globalAutoInstrumentEnabled) {\n return;\n }\n\n // Try to get the smithy-client module\n \n let SmithyClient: any;\n try {\n // Dynamic require to avoid bundling issues\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@aws-sdk/smithy-client').Client;\n } catch {\n // Try the core package (newer SDK versions)\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@smithy/smithy-client').Client;\n } catch {\n console.warn(\n '[autotel-aws] autoInstrumentAWS() requires @aws-sdk/smithy-client or @smithy/smithy-client. ' +\n 'Install an AWS SDK v3 client package (e.g., @aws-sdk/client-s3) or use instrumentSDK() directly.',\n );\n return;\n }\n }\n\n // Store original send for potential restoration\n originalSmithyClientSend = SmithyClient.prototype.send;\n\n // Patch the prototype's send method\n const originalSend = SmithyClient.prototype.send;\n\n SmithyClient.prototype.send = function patchedSend(\n this: Client<unknown, unknown, unknown, unknown>,\n command: Command<unknown, unknown, unknown, unknown, unknown>,\n ...args: unknown[]\n ): Promise<unknown> {\n // Skip if this specific client is already instrumented (via instrumentSDK)\n if (isInstrumented(this)) {\n return originalSend.call(this, command, ...args);\n }\n\n // Create a one-time wrapped client for this call\n // This is less efficient than pre-wrapping, but ensures all calls are traced\n const wrappedClient = wrapSDKClient(this as Client<unknown, unknown, unknown, unknown>, config?.service);\n \n return (wrappedClient as any).send(command, ...args);\n };\n\n globalAutoInstrumentEnabled = true;\n}\n\n/**\n * Disable global auto-instrumentation\n *\n * Restores the original AWS SDK behavior. Useful for testing or\n * when you need to disable instrumentation temporarily.\n *\n * @example\n * ```typescript\n * import { autoInstrumentAWS, disableAutoInstrumentAWS } from 'autotel-aws/sdk';\n *\n * autoInstrumentAWS();\n * // ... use instrumented clients ...\n *\n * disableAutoInstrumentAWS();\n * // Subsequent operations are not traced\n * ```\n */\nexport function disableAutoInstrumentAWS(): void {\n if (!globalAutoInstrumentEnabled || !originalSmithyClientSend) {\n return;\n }\n\n \n let SmithyClient: any;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@aws-sdk/smithy-client').Client;\n } catch {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@smithy/smithy-client').Client;\n } catch {\n return;\n }\n }\n\n // Restore original send\n SmithyClient.prototype.send = originalSmithyClientSend;\n originalSmithyClientSend = null;\n globalAutoInstrumentEnabled = false;\n}\n\n/**\n * Check if global auto-instrumentation is enabled\n */\nexport function isAutoInstrumentEnabled(): boolean {\n return globalAutoInstrumentEnabled;\n}\n"]}