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.
- package/dist/attributes.cjs +155 -46
- package/dist/attributes.cjs.map +1 -1
- package/dist/attributes.d.cts +64 -62
- package/dist/attributes.d.cts.map +1 -0
- package/dist/attributes.d.ts +64 -62
- package/dist/attributes.d.ts.map +1 -0
- package/dist/attributes.js +146 -3
- package/dist/attributes.js.map +1 -1
- package/dist/cloudwatch.cjs +324 -358
- package/dist/cloudwatch.cjs.map +1 -1
- package/dist/cloudwatch.d.cts +126 -153
- package/dist/cloudwatch.d.cts.map +1 -0
- package/dist/cloudwatch.d.ts +126 -153
- package/dist/cloudwatch.d.ts.map +1 -0
- package/dist/cloudwatch.js +323 -356
- package/dist/cloudwatch.js.map +1 -1
- package/dist/config-D8QZwF1e.d.ts +123 -0
- package/dist/config-D8QZwF1e.d.ts.map +1 -0
- package/dist/config-SPkMWWXY.d.cts +123 -0
- package/dist/config-SPkMWWXY.d.cts.map +1 -0
- package/dist/dynamodb.cjs +89 -11
- package/dist/dynamodb.cjs.map +1 -1
- package/dist/dynamodb.d.cts +15 -63
- package/dist/dynamodb.d.cts.map +1 -0
- package/dist/dynamodb.d.ts +15 -63
- package/dist/dynamodb.d.ts.map +1 -0
- package/dist/dynamodb.js +90 -4
- package/dist/dynamodb.js.map +1 -1
- package/dist/eventbridge.cjs +423 -261
- package/dist/eventbridge.cjs.map +1 -1
- package/dist/eventbridge.d.cts +113 -174
- package/dist/eventbridge.d.cts.map +1 -0
- package/dist/eventbridge.d.ts +113 -174
- package/dist/eventbridge.d.ts.map +1 -0
- package/dist/eventbridge.js +422 -259
- package/dist/eventbridge.js.map +1 -1
- package/dist/index.cjs +117 -241
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -55
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +42 -55
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -41
- package/dist/index.js.map +1 -1
- package/dist/kinesis.cjs +485 -20
- package/dist/kinesis.cjs.map +1 -1
- package/dist/kinesis.d.cts +179 -226
- package/dist/kinesis.d.cts.map +1 -0
- package/dist/kinesis.d.ts +179 -226
- package/dist/kinesis.d.ts.map +1 -0
- package/dist/kinesis.js +484 -5
- package/dist/kinesis.js.map +1 -1
- package/dist/lambda-B0LQa5vS.d.ts +168 -0
- package/dist/lambda-B0LQa5vS.d.ts.map +1 -0
- package/dist/lambda-DR33vPpL.cjs +500 -0
- package/dist/lambda-DR33vPpL.cjs.map +1 -0
- package/dist/lambda-DYyKH-f-.js +453 -0
- package/dist/lambda-DYyKH-f-.js.map +1 -0
- package/dist/lambda-DnroO4Od.d.cts +168 -0
- package/dist/lambda-DnroO4Od.d.cts.map +1 -0
- package/dist/lambda-auto.cjs +33 -16
- package/dist/lambda-auto.cjs.map +1 -1
- package/dist/lambda-auto.d.cts +1 -2
- package/dist/lambda-auto.d.ts +1 -2
- package/dist/lambda-auto.js +35 -15
- package/dist/lambda-auto.js.map +1 -1
- package/dist/lambda.cjs +11 -42
- package/dist/lambda.d.cts +3 -231
- package/dist/lambda.d.ts +3 -231
- package/dist/lambda.js +3 -5
- package/dist/s3.cjs +70 -11
- package/dist/s3.cjs.map +1 -1
- package/dist/s3.d.cts +15 -51
- package/dist/s3.d.cts.map +1 -0
- package/dist/s3.d.ts +15 -51
- package/dist/s3.d.ts.map +1 -0
- package/dist/s3.js +71 -4
- package/dist/s3.js.map +1 -1
- package/dist/sdk-C-o7ngkk.js +198 -0
- package/dist/sdk-C-o7ngkk.js.map +1 -0
- package/dist/sdk-C9Nvlh7R.cjs +222 -0
- package/dist/sdk-C9Nvlh7R.cjs.map +1 -0
- package/dist/sdk-CXqc4o_q.d.ts +135 -0
- package/dist/sdk-CXqc4o_q.d.ts.map +1 -0
- package/dist/sdk-DkAItj4z.d.cts +135 -0
- package/dist/sdk-DkAItj4z.d.cts.map +1 -0
- package/dist/sdk-wrapper-BDrcyEQ_.cjs +161 -0
- package/dist/sdk-wrapper-BDrcyEQ_.cjs.map +1 -0
- package/dist/sdk-wrapper-BVr62EfA.js +120 -0
- package/dist/sdk-wrapper-BVr62EfA.js.map +1 -0
- package/dist/sdk.cjs +8 -31
- package/dist/sdk.d.cts +3 -156
- package/dist/sdk.d.ts +3 -156
- package/dist/sdk.js +3 -6
- package/dist/sns.cjs +305 -16
- package/dist/sns.cjs.map +1 -1
- package/dist/sns.d.cts +109 -155
- package/dist/sns.d.cts.map +1 -0
- package/dist/sns.d.ts +109 -155
- package/dist/sns.d.ts.map +1 -0
- package/dist/sns.js +305 -5
- package/dist/sns.js.map +1 -1
- package/dist/sqs.cjs +455 -20
- package/dist/sqs.cjs.map +1 -1
- package/dist/sqs.d.cts +191 -240
- package/dist/sqs.d.cts.map +1 -0
- package/dist/sqs.d.ts +191 -240
- package/dist/sqs.d.ts.map +1 -0
- package/dist/sqs.js +454 -5
- package/dist/sqs.js.map +1 -1
- package/dist/step-functions.cjs +557 -32
- package/dist/step-functions.cjs.map +1 -1
- package/dist/step-functions.d.cts +155 -210
- package/dist/step-functions.d.cts.map +1 -0
- package/dist/step-functions.d.ts +155 -210
- package/dist/step-functions.d.ts.map +1 -0
- package/dist/step-functions.js +553 -5
- package/dist/step-functions.js.map +1 -1
- package/dist/testing.cjs +60 -58
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +20 -23
- package/dist/testing.d.cts.map +1 -0
- package/dist/testing.d.ts +20 -23
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +59 -57
- package/dist/testing.js.map +1 -1
- package/dist/{types-B2Mi8Goj.d.cts → types-0uHbJsBN.d.ts} +5 -7
- package/dist/types-0uHbJsBN.d.ts.map +1 -0
- package/dist/types-DOUDks8I.d.cts +71 -0
- package/dist/types-DOUDks8I.d.cts.map +1 -0
- package/dist/types-DOUDks8I.d.ts +71 -0
- package/dist/types-DOUDks8I.d.ts.map +1 -0
- package/dist/{types-BqTI4s4V.d.ts → types-iyHj03Q1.d.cts} +5 -7
- package/dist/types-iyHj03Q1.d.cts.map +1 -0
- package/dist/xray-B46i6z6K.js +59 -0
- package/dist/xray-B46i6z6K.js.map +1 -0
- package/dist/xray-CG4jciQs.d.ts +19 -0
- package/dist/xray-CG4jciQs.d.ts.map +1 -0
- package/dist/xray-Cd2UiVRA.cjs +75 -0
- package/dist/xray-Cd2UiVRA.cjs.map +1 -0
- package/dist/xray-DDcKCKKo.d.cts +19 -0
- package/dist/xray-DDcKCKKo.d.cts.map +1 -0
- package/dist/xray.cjs +10 -23
- package/dist/xray.d.cts +3 -24
- package/dist/xray.d.ts +3 -24
- package/dist/xray.js +3 -5
- package/package.json +5 -5
- package/dist/chunk-35F3UBOO.cjs +0 -48
- package/dist/chunk-35F3UBOO.cjs.map +0 -1
- package/dist/chunk-4THGOYZL.js +0 -387
- package/dist/chunk-4THGOYZL.js.map +0 -1
- package/dist/chunk-CIGXV6HA.js +0 -192
- package/dist/chunk-CIGXV6HA.js.map +0 -1
- package/dist/chunk-DGUM43GV.js +0 -10
- package/dist/chunk-DGUM43GV.js.map +0 -1
- package/dist/chunk-DHHLKZHI.cjs +0 -23
- package/dist/chunk-DHHLKZHI.cjs.map +0 -1
- package/dist/chunk-HMTKKKKP.cjs +0 -390
- package/dist/chunk-HMTKKKKP.cjs.map +0 -1
- package/dist/chunk-I4CKQ4RD.js +0 -153
- package/dist/chunk-I4CKQ4RD.js.map +0 -1
- package/dist/chunk-JEQ2X3Z6.cjs +0 -12
- package/dist/chunk-JEQ2X3Z6.cjs.map +0 -1
- package/dist/chunk-JL33WEVE.js +0 -341
- package/dist/chunk-JL33WEVE.js.map +0 -1
- package/dist/chunk-JMSFE6FJ.js +0 -24
- package/dist/chunk-JMSFE6FJ.js.map +0 -1
- package/dist/chunk-JPDJPOIB.js +0 -78
- package/dist/chunk-JPDJPOIB.js.map +0 -1
- package/dist/chunk-KNRQYDAS.cjs +0 -394
- package/dist/chunk-KNRQYDAS.cjs.map +0 -1
- package/dist/chunk-NQ65Y5AI.cjs +0 -195
- package/dist/chunk-NQ65Y5AI.cjs.map +0 -1
- package/dist/chunk-OB4XTAVK.cjs +0 -345
- package/dist/chunk-OB4XTAVK.cjs.map +0 -1
- package/dist/chunk-OHFR7WX5.js +0 -341
- package/dist/chunk-OHFR7WX5.js.map +0 -1
- package/dist/chunk-PZGYL7XZ.js +0 -40
- package/dist/chunk-PZGYL7XZ.js.map +0 -1
- package/dist/chunk-Q3DMMQ7K.cjs +0 -164
- package/dist/chunk-Q3DMMQ7K.cjs.map +0 -1
- package/dist/chunk-SPC4VYOI.cjs +0 -350
- package/dist/chunk-SPC4VYOI.cjs.map +0 -1
- package/dist/chunk-UZEJV2YD.cjs +0 -139
- package/dist/chunk-UZEJV2YD.cjs.map +0 -1
- package/dist/chunk-VZHQH75L.cjs +0 -26
- package/dist/chunk-VZHQH75L.cjs.map +0 -1
- package/dist/chunk-X6BY6PCK.js +0 -386
- package/dist/chunk-X6BY6PCK.js.map +0 -1
- package/dist/chunk-XOF2H2PI.cjs +0 -84
- package/dist/chunk-XOF2H2PI.cjs.map +0 -1
- package/dist/chunk-YG56NRIO.js +0 -131
- package/dist/chunk-YG56NRIO.js.map +0 -1
- package/dist/chunk-ZPDRKCAR.js +0 -21
- package/dist/chunk-ZPDRKCAR.js.map +0 -1
- package/dist/config-DbZv4bpy.d.ts +0 -125
- package/dist/config-srkLBXZH.d.cts +0 -125
- package/dist/lambda.cjs.map +0 -1
- package/dist/lambda.js.map +0 -1
- package/dist/sdk.cjs.map +0 -1
- package/dist/sdk.js.map +0 -1
- package/dist/types-B9IaHmGa.d.cts +0 -73
- package/dist/types-B9IaHmGa.d.ts +0 -73
- package/dist/xray.cjs.map +0 -1
- package/dist/xray.js.map +0 -1
package/dist/dynamodb.d.ts
CHANGED
|
@@ -1,69 +1,20 @@
|
|
|
1
|
-
import { TraceContext } from
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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 {
|
|
43
|
+
//#endregion
|
|
44
|
+
export { TraceDynamoDBConfig, traceDynamoDB };
|
|
45
|
+
//# sourceMappingURL=dynamodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb.d.ts","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"}
|
package/dist/dynamodb.js
CHANGED
|
@@ -1,5 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
//#
|
|
1
|
+
import { buildDynamoDBAttributes } from "./attributes.js";
|
|
2
|
+
import { trace } from "autotel";
|
|
3
|
+
|
|
4
|
+
//#region src/dynamodb/index.ts
|
|
5
|
+
/**
|
|
6
|
+
* DynamoDB-specific instrumentation
|
|
7
|
+
*
|
|
8
|
+
* Provides semantic helpers for tracing DynamoDB operations with proper OpenTelemetry
|
|
9
|
+
* semantic conventions. Automatically sets `db.*` and `aws.dynamodb.*` attributes.
|
|
10
|
+
*
|
|
11
|
+
* @example Basic usage with factory pattern
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { traceDynamoDB } from 'autotel-aws/dynamodb';
|
|
14
|
+
* import { DynamoDBClient, GetItemCommand } from '@aws-sdk/client-dynamodb';
|
|
15
|
+
*
|
|
16
|
+
* const dynamodb = new DynamoDBClient({});
|
|
17
|
+
*
|
|
18
|
+
* export const getUser = traceDynamoDB({
|
|
19
|
+
* operation: 'GetItem',
|
|
20
|
+
* table: 'users'
|
|
21
|
+
* })(ctx => async (userId: string) => {
|
|
22
|
+
* ctx.setAttribute('db.statement', 'GetItem WHERE id = :id');
|
|
23
|
+
* return await dynamodb.send(new GetItemCommand({
|
|
24
|
+
* TableName: 'users',
|
|
25
|
+
* Key: { id: { S: userId } }
|
|
26
|
+
* }));
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Usage: await getUser('user-123');
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example Query with consumed capacity tracking
|
|
33
|
+
* ```typescript
|
|
34
|
+
* export const queryOrders = traceDynamoDB({
|
|
35
|
+
* operation: 'Query',
|
|
36
|
+
* table: 'orders'
|
|
37
|
+
* })(ctx => async (customerId: string, limit: number) => {
|
|
38
|
+
* const result = await dynamodb.send(new QueryCommand({
|
|
39
|
+
* TableName: 'orders',
|
|
40
|
+
* KeyConditionExpression: 'customerId = :cid',
|
|
41
|
+
* ExpressionAttributeValues: { ':cid': { S: customerId } },
|
|
42
|
+
* Limit: limit,
|
|
43
|
+
* ReturnConsumedCapacity: 'TOTAL'
|
|
44
|
+
* }));
|
|
45
|
+
*
|
|
46
|
+
* if (result.ConsumedCapacity?.CapacityUnits) {
|
|
47
|
+
* ctx.setAttribute('aws.dynamodb.consumed_capacity', result.ConsumedCapacity.CapacityUnits);
|
|
48
|
+
* }
|
|
49
|
+
*
|
|
50
|
+
* return result.Items;
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* Trace DynamoDB operations with semantic attributes
|
|
56
|
+
*
|
|
57
|
+
* Creates a traced function that automatically sets DynamoDB semantic attributes
|
|
58
|
+
* following OpenTelemetry database semantic conventions.
|
|
59
|
+
*
|
|
60
|
+
* @param config - DynamoDB operation configuration
|
|
61
|
+
* @returns A higher-order function that wraps your DynamoDB operation with tracing
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* Semantic attributes set automatically:
|
|
65
|
+
* - `db.system` - 'dynamodb'
|
|
66
|
+
* - `db.operation` - The operation name (GetItem, PutItem, etc.)
|
|
67
|
+
* - `db.name` - Table name
|
|
68
|
+
* - `aws.dynamodb.table_names` - Array containing the table name
|
|
69
|
+
*
|
|
70
|
+
* Additional attributes you should set in your handler:
|
|
71
|
+
* - `db.statement` - Query/operation description
|
|
72
|
+
* - `aws.dynamodb.consumed_capacity` - Consumed capacity units
|
|
73
|
+
* - `aws.dynamodb.index_name` - GSI/LSI name if applicable
|
|
74
|
+
*
|
|
75
|
+
* @see https://opentelemetry.io/docs/specs/semconv/database/dynamodb/
|
|
76
|
+
*/
|
|
77
|
+
function traceDynamoDB(config) {
|
|
78
|
+
return function wrapper(fn) {
|
|
79
|
+
return trace(`dynamodb.${config.operation}`, (ctx) => async (...args) => {
|
|
80
|
+
ctx.setAttributes(buildDynamoDBAttributes({
|
|
81
|
+
tableName: config.table,
|
|
82
|
+
operation: config.operation
|
|
83
|
+
}));
|
|
84
|
+
return fn(ctx)(...args);
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//#endregion
|
|
90
|
+
export { traceDynamoDB };
|
|
5
91
|
//# sourceMappingURL=dynamodb.js.map
|
package/dist/dynamodb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"dynamodb.js","names":[],"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,OAAO,MACL,YAAY,OAAO,cAClB,QACC,OAAO,GAAG,SAAkC;GAE1C,IAAI,cACF,wBAAwB;IACtB,WAAW,OAAO;IAClB,WAAW,OAAO;GACpB,CAAC,CACH;GAIA,OADgB,GAAG,GACN,CAAC,CAAC,GAAG,IAAI;EACxB,CACJ;CACF;AACF"}
|