autotel 2.18.1 → 2.19.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 (67) hide show
  1. package/dist/attributes.cjs +21 -20
  2. package/dist/attributes.js +2 -1
  3. package/dist/chunk-2ZKEORFN.cjs +14 -0
  4. package/dist/chunk-2ZKEORFN.cjs.map +1 -0
  5. package/dist/chunk-4A53YIAX.js +180 -0
  6. package/dist/chunk-4A53YIAX.js.map +1 -0
  7. package/dist/{chunk-QKVQWGTF.js → chunk-5JLXDCL2.js} +3 -3
  8. package/dist/{chunk-QKVQWGTF.js.map → chunk-5JLXDCL2.js.map} +1 -1
  9. package/dist/chunk-7552UTQW.js +11 -0
  10. package/dist/chunk-7552UTQW.js.map +1 -0
  11. package/dist/{chunk-NWT5SYOX.cjs → chunk-BEVIAKTB.cjs} +5 -5
  12. package/dist/{chunk-NWT5SYOX.cjs.map → chunk-BEVIAKTB.cjs.map} +1 -1
  13. package/dist/chunk-ESMHTKLJ.cjs +206 -0
  14. package/dist/chunk-ESMHTKLJ.cjs.map +1 -0
  15. package/dist/{chunk-QP5LVD4L.js → chunk-G47ZCJGW.js} +25 -3
  16. package/dist/{chunk-QP5LVD4L.js.map → chunk-G47ZCJGW.js.map} +1 -1
  17. package/dist/{chunk-WC2AMGBX.js → chunk-LCMARHLX.js} +3 -3
  18. package/dist/{chunk-WC2AMGBX.js.map → chunk-LCMARHLX.js.map} +1 -1
  19. package/dist/{chunk-HZ23L5KR.cjs → chunk-LGT7XA5O.cjs} +5 -5
  20. package/dist/{chunk-HZ23L5KR.cjs.map → chunk-LGT7XA5O.cjs.map} +1 -1
  21. package/dist/{chunk-4HPWUYCV.js → chunk-M4US3P4K.js} +3 -170
  22. package/dist/chunk-M4US3P4K.js.map +1 -0
  23. package/dist/{chunk-FMPBL2NF.js → chunk-XBVB3AFF.js} +3 -3
  24. package/dist/{chunk-FMPBL2NF.js.map → chunk-XBVB3AFF.js.map} +1 -1
  25. package/dist/{chunk-DWRTSOGR.cjs → chunk-XI5WPVR5.cjs} +25 -3
  26. package/dist/chunk-XI5WPVR5.cjs.map +1 -0
  27. package/dist/{chunk-74L5DOB4.cjs → chunk-XNBTEFRZ.cjs} +7 -7
  28. package/dist/{chunk-74L5DOB4.cjs.map → chunk-XNBTEFRZ.cjs.map} +1 -1
  29. package/dist/chunk-XRBP4RYL.cjs +764 -0
  30. package/dist/chunk-XRBP4RYL.cjs.map +1 -0
  31. package/dist/decorators.cjs +1 -1
  32. package/dist/decorators.js +1 -1
  33. package/dist/functional.cjs +8 -8
  34. package/dist/functional.js +1 -1
  35. package/dist/index.cjs +65 -43
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +1 -0
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.js +8 -6
  40. package/dist/index.js.map +1 -1
  41. package/dist/messaging.cjs +5 -5
  42. package/dist/messaging.js +2 -2
  43. package/dist/semantic-conventions.cjs +30 -0
  44. package/dist/semantic-conventions.cjs.map +1 -0
  45. package/dist/semantic-conventions.d.cts +29 -0
  46. package/dist/semantic-conventions.d.ts +29 -0
  47. package/dist/semantic-conventions.js +5 -0
  48. package/dist/semantic-conventions.js.map +1 -0
  49. package/dist/semantic-helpers.cjs +6 -6
  50. package/dist/semantic-helpers.js +2 -2
  51. package/dist/webhook.cjs +2 -2
  52. package/dist/webhook.js +1 -1
  53. package/dist/workflow-distributed.cjs +3 -3
  54. package/dist/workflow-distributed.js +1 -1
  55. package/dist/workflow.cjs +6 -6
  56. package/dist/workflow.js +2 -2
  57. package/package.json +13 -8
  58. package/src/decorators.test.ts +22 -72
  59. package/src/functional.test.ts +24 -6
  60. package/src/functional.ts +37 -2
  61. package/src/index.ts +9 -0
  62. package/src/init.openllmetry.test.ts +76 -76
  63. package/src/semantic-conventions.ts +15 -0
  64. package/dist/chunk-4HPWUYCV.js.map +0 -1
  65. package/dist/chunk-7F4PDILZ.cjs +0 -931
  66. package/dist/chunk-7F4PDILZ.cjs.map +0 -1
  67. package/dist/chunk-DWRTSOGR.cjs.map +0 -1
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk7F4PDILZ_cjs = require('./chunk-7F4PDILZ.cjs');
3
+ var chunkXRBP4RYL_cjs = require('./chunk-XRBP4RYL.cjs');
4
+ require('./chunk-ESMHTKLJ.cjs');
4
5
  require('./chunk-ELW34S4C.cjs');
5
6
  require('./chunk-JEQ2X3Z6.cjs');
6
7
 
@@ -8,79 +9,79 @@ require('./chunk-JEQ2X3Z6.cjs');
8
9
 
9
10
  Object.defineProperty(exports, "attrs", {
10
11
  enumerable: true,
11
- get: function () { return chunk7F4PDILZ_cjs.attrs; }
12
+ get: function () { return chunkXRBP4RYL_cjs.attrs; }
12
13
  });
13
14
  Object.defineProperty(exports, "autoRedactPII", {
14
15
  enumerable: true,
15
- get: function () { return chunk7F4PDILZ_cjs.autoRedactPII; }
16
+ get: function () { return chunkXRBP4RYL_cjs.autoRedactPII; }
16
17
  });
17
18
  Object.defineProperty(exports, "checkDeprecatedAttribute", {
18
19
  enumerable: true,
19
- get: function () { return chunk7F4PDILZ_cjs.checkDeprecatedAttribute; }
20
+ get: function () { return chunkXRBP4RYL_cjs.checkDeprecatedAttribute; }
20
21
  });
21
22
  Object.defineProperty(exports, "dbClient", {
22
23
  enumerable: true,
23
- get: function () { return chunk7F4PDILZ_cjs.dbClient; }
24
+ get: function () { return chunkXRBP4RYL_cjs.dbClient; }
24
25
  });
25
26
  Object.defineProperty(exports, "defaultGuardrails", {
26
27
  enumerable: true,
27
- get: function () { return chunk7F4PDILZ_cjs.defaultGuardrails; }
28
+ get: function () { return chunkXRBP4RYL_cjs.defaultGuardrails; }
28
29
  });
29
30
  Object.defineProperty(exports, "httpClient", {
30
31
  enumerable: true,
31
- get: function () { return chunk7F4PDILZ_cjs.httpClient; }
32
+ get: function () { return chunkXRBP4RYL_cjs.httpClient; }
32
33
  });
33
34
  Object.defineProperty(exports, "httpServer", {
34
35
  enumerable: true,
35
- get: function () { return chunk7F4PDILZ_cjs.httpServer; }
36
+ get: function () { return chunkXRBP4RYL_cjs.httpServer; }
36
37
  });
37
38
  Object.defineProperty(exports, "identify", {
38
39
  enumerable: true,
39
- get: function () { return chunk7F4PDILZ_cjs.identify; }
40
+ get: function () { return chunkXRBP4RYL_cjs.identify; }
40
41
  });
41
42
  Object.defineProperty(exports, "mergeAttrs", {
42
43
  enumerable: true,
43
- get: function () { return chunk7F4PDILZ_cjs.mergeAttrs; }
44
+ get: function () { return chunkXRBP4RYL_cjs.mergeAttrs; }
44
45
  });
45
46
  Object.defineProperty(exports, "mergeServiceResource", {
46
47
  enumerable: true,
47
- get: function () { return chunk7F4PDILZ_cjs.mergeServiceResource; }
48
+ get: function () { return chunkXRBP4RYL_cjs.mergeServiceResource; }
48
49
  });
49
50
  Object.defineProperty(exports, "request", {
50
51
  enumerable: true,
51
- get: function () { return chunk7F4PDILZ_cjs.request; }
52
+ get: function () { return chunkXRBP4RYL_cjs.request; }
52
53
  });
53
54
  Object.defineProperty(exports, "safeSetAttributes", {
54
55
  enumerable: true,
55
- get: function () { return chunk7F4PDILZ_cjs.safeSetAttributes; }
56
+ get: function () { return chunkXRBP4RYL_cjs.safeSetAttributes; }
56
57
  });
57
58
  Object.defineProperty(exports, "setDevice", {
58
59
  enumerable: true,
59
- get: function () { return chunk7F4PDILZ_cjs.setDevice; }
60
+ get: function () { return chunkXRBP4RYL_cjs.setDevice; }
60
61
  });
61
62
  Object.defineProperty(exports, "setError", {
62
63
  enumerable: true,
63
- get: function () { return chunk7F4PDILZ_cjs.setError; }
64
+ get: function () { return chunkXRBP4RYL_cjs.setError; }
64
65
  });
65
66
  Object.defineProperty(exports, "setException", {
66
67
  enumerable: true,
67
- get: function () { return chunk7F4PDILZ_cjs.setException; }
68
+ get: function () { return chunkXRBP4RYL_cjs.setException; }
68
69
  });
69
70
  Object.defineProperty(exports, "setSession", {
70
71
  enumerable: true,
71
- get: function () { return chunk7F4PDILZ_cjs.setSession; }
72
+ get: function () { return chunkXRBP4RYL_cjs.setSession; }
72
73
  });
73
74
  Object.defineProperty(exports, "setUser", {
74
75
  enumerable: true,
75
- get: function () { return chunk7F4PDILZ_cjs.setUser; }
76
+ get: function () { return chunkXRBP4RYL_cjs.setUser; }
76
77
  });
77
78
  Object.defineProperty(exports, "transaction", {
78
79
  enumerable: true,
79
- get: function () { return chunk7F4PDILZ_cjs.transaction; }
80
+ get: function () { return chunkXRBP4RYL_cjs.transaction; }
80
81
  });
81
82
  Object.defineProperty(exports, "validateAttribute", {
82
83
  enumerable: true,
83
- get: function () { return chunk7F4PDILZ_cjs.validateAttribute; }
84
+ get: function () { return chunkXRBP4RYL_cjs.validateAttribute; }
84
85
  });
85
86
  //# sourceMappingURL=attributes.cjs.map
86
87
  //# sourceMappingURL=attributes.cjs.map
@@ -1,4 +1,5 @@
1
- export { attrs, autoRedactPII, checkDeprecatedAttribute, dbClient, defaultGuardrails, httpClient, httpServer, identify, mergeAttrs, mergeServiceResource, request, safeSetAttributes, setDevice, setError, setException, setSession, setUser, transaction, validateAttribute } from './chunk-4HPWUYCV.js';
1
+ export { attrs, autoRedactPII, checkDeprecatedAttribute, dbClient, defaultGuardrails, httpClient, httpServer, identify, mergeAttrs, mergeServiceResource, request, safeSetAttributes, setDevice, setError, setException, setSession, setUser, transaction, validateAttribute } from './chunk-M4US3P4K.js';
2
+ import './chunk-4A53YIAX.js';
2
3
  import './chunk-SNINLBEE.js';
3
4
  import './chunk-DGUM43GV.js';
4
5
  //# sourceMappingURL=attributes.js.map
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ // src/semantic-conventions.ts
4
+ function httpRequestHeaderAttribute(name) {
5
+ return `http.request.header.${name.toLowerCase()}`;
6
+ }
7
+ function httpResponseHeaderAttribute(name) {
8
+ return `http.response.header.${name.toLowerCase()}`;
9
+ }
10
+
11
+ exports.httpRequestHeaderAttribute = httpRequestHeaderAttribute;
12
+ exports.httpResponseHeaderAttribute = httpResponseHeaderAttribute;
13
+ //# sourceMappingURL=chunk-2ZKEORFN.cjs.map
14
+ //# sourceMappingURL=chunk-2ZKEORFN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/semantic-conventions.ts"],"names":[],"mappings":";;;AAQO,SAAS,2BAA2B,IAAA,EAAsB;AAC/D,EAAA,OAAO,CAAA,oBAAA,EAAuB,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AAClD;AAEO,SAAS,4BAA4B,IAAA,EAAsB;AAChE,EAAA,OAAO,CAAA,qBAAA,EAAwB,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AACnD","file":"chunk-2ZKEORFN.cjs","sourcesContent":["import {\n HTTPAttributes,\n ServiceAttributes,\n URLAttributes,\n} from './attributes/registry';\n\nexport { HTTPAttributes, ServiceAttributes, URLAttributes };\n\nexport function httpRequestHeaderAttribute(name: string): string {\n return `http.request.header.${name.toLowerCase()}`;\n}\n\nexport function httpResponseHeaderAttribute(name: string): string {\n return `http.response.header.${name.toLowerCase()}`;\n}\n"]}
@@ -0,0 +1,180 @@
1
+ // src/attributes/registry.ts
2
+ var UserAttributes = {
3
+ id: "user.id",
4
+ email: "user.email",
5
+ name: "user.name",
6
+ fullName: "user.full_name",
7
+ hash: "user.hash",
8
+ roles: "user.roles"
9
+ };
10
+ var SessionAttributes = {
11
+ id: "session.id",
12
+ previousId: "session.previous_id"
13
+ };
14
+ var DeviceAttributes = {
15
+ id: "device.id",
16
+ manufacturer: "device.manufacturer",
17
+ modelIdentifier: "device.model.identifier",
18
+ modelName: "device.model.name"
19
+ };
20
+ var HTTPAttributes = {
21
+ connectionState: "http.connection.state",
22
+ requestMethod: "http.request.method",
23
+ requestMethodOriginal: "http.request.method_original",
24
+ requestResendCount: "http.request.resend_count",
25
+ requestSize: "http.request.size",
26
+ requestBodySize: "http.request.body.size",
27
+ responseSize: "http.response.size",
28
+ responseBodySize: "http.response.body.size",
29
+ responseStatusCode: "http.response.status_code",
30
+ route: "http.route"
31
+ };
32
+ var DBAttributes = {
33
+ clientConnectionPoolName: "db.client.connection.pool.name",
34
+ clientConnectionState: "db.client.connection.state",
35
+ collectionName: "db.collection.name",
36
+ namespace: "db.namespace",
37
+ operationBatchSize: "db.operation.batch.size",
38
+ operationName: "db.operation.name",
39
+ querySummary: "db.query.summary",
40
+ queryText: "db.query.text",
41
+ responseReturnedRows: "db.response.returned_rows",
42
+ responseStatusCode: "db.response.status_code",
43
+ systemName: "db.system.name",
44
+ statement: "db.statement"
45
+ };
46
+ var ServiceAttributes = {
47
+ name: "service.name",
48
+ instance: "service.instance.id",
49
+ version: "service.version"
50
+ };
51
+ var NetworkAttributes = {
52
+ peerAddress: "network.peer.address",
53
+ peerPort: "network.peer.port",
54
+ transport: "network.transport",
55
+ type: "network.type",
56
+ protocolName: "network.protocol.name",
57
+ protocolVersion: "network.protocol.version"
58
+ };
59
+ var ServerAddressAttributes = {
60
+ address: "server.address",
61
+ port: "server.port",
62
+ socketAddress: "server.socket.address"
63
+ };
64
+ var URLAttributes = {
65
+ scheme: "url.scheme",
66
+ full: "url.full",
67
+ path: "url.path",
68
+ query: "url.query",
69
+ fragment: "url.fragment"
70
+ };
71
+ var ErrorAttributes = {
72
+ type: "error.type",
73
+ message: "error.message",
74
+ stackTrace: "error.stack",
75
+ code: "error.code"
76
+ };
77
+ var ExceptionAttributes = {
78
+ escaped: "exception.escaped",
79
+ message: "exception.message",
80
+ stackTrace: "exception.stacktrace",
81
+ type: "exception.type",
82
+ moduleName: "exception.module"
83
+ };
84
+ var ProcessAttributes = {
85
+ pid: "process.pid",
86
+ executablePath: "process.executable.path",
87
+ command: "process.command",
88
+ owner: "process.owner",
89
+ commandArgs: "process.command_args"
90
+ };
91
+ var ThreadAttributes = {
92
+ id: "thread.id",
93
+ name: "thread.name"
94
+ };
95
+ var ContainerAttributes = {
96
+ id: "container.id",
97
+ name: "container.name",
98
+ image: "container.image.name",
99
+ tag: "container.image.tag"
100
+ };
101
+ var K8sAttributes = {
102
+ podName: "k8s.pod.name",
103
+ namespaceName: "k8s.namespace.name",
104
+ deploymentName: "k8s.deployment.name",
105
+ state: "k8s.state.name"
106
+ };
107
+ var CloudAttributes = {
108
+ provider: "cloud.provider",
109
+ accountId: "cloud.account.id",
110
+ region: "cloud.region",
111
+ availabilityZone: "cloud.availability_zone",
112
+ platform: "cloud.platform"
113
+ };
114
+ var FaaSAttributes = {
115
+ name: "faas.name",
116
+ version: "faas.version",
117
+ instance: "faas.instance",
118
+ execution: "faas.execution",
119
+ coldstart: "faas.coldstart"
120
+ };
121
+ var FeatureFlagAttributes = {
122
+ key: "feature.flag.key",
123
+ provider: "feature.flag.provider_name",
124
+ variant: "feature.flag.variant.name"
125
+ };
126
+ var MessagingAttributes = {
127
+ system: "messaging.system",
128
+ destination: "messaging.destination.name",
129
+ operation: "messaging.operation",
130
+ messageId: "messaging.message.id",
131
+ conversationId: "messaging.conversation_id",
132
+ batchMessageCount: "messaging.batch.message_count",
133
+ consumerGroup: "messaging.consumer.group"
134
+ };
135
+ var GenAIAttributes = {
136
+ system: "gen.ai.system",
137
+ requestModel: "gen.ai.request.model",
138
+ responseModel: "gen.ai.response.model",
139
+ operationName: "gen.ai.operation.name",
140
+ usagePromptTokens: "gen.ai.usage.prompt_tokens",
141
+ usageCompletionTokens: "gen.ai.usage.completion_tokens",
142
+ provider: "gen.ai.provider"
143
+ };
144
+ var RPCAttributes = {
145
+ system: "rpc.system",
146
+ service: "rpc.service",
147
+ method: "rpc.method",
148
+ grpcStatusCode: "rpc.grpc.status_code"
149
+ };
150
+ var GraphQLAttributes = {
151
+ document: "graphql.document",
152
+ operationName: "graphql.operation.name",
153
+ operationType: "graphql.operation.type"
154
+ };
155
+ var OTelAttributes = {
156
+ libraryName: "otel.library.name",
157
+ libraryVersion: "otel.library.version",
158
+ statusCode: "otel.status_code"
159
+ };
160
+ var CodeAttributes = {
161
+ namespace: "code.namespace",
162
+ filepath: "code.filepath",
163
+ function: "code.function",
164
+ class: "code.class",
165
+ method: "code.method",
166
+ column: "code.column",
167
+ lineNumber: "code.lineno",
168
+ repository: "code.repository",
169
+ revision: "code.revision"
170
+ };
171
+ var TLSAttributes = {
172
+ protocolVersion: "tls.protocol.version",
173
+ cipher: "tls.cipher",
174
+ curveName: "tls.curve.name",
175
+ resumed: "tls.resumed"
176
+ };
177
+
178
+ export { CloudAttributes, CodeAttributes, ContainerAttributes, DBAttributes, DeviceAttributes, ErrorAttributes, ExceptionAttributes, FaaSAttributes, FeatureFlagAttributes, GenAIAttributes, GraphQLAttributes, HTTPAttributes, K8sAttributes, MessagingAttributes, NetworkAttributes, OTelAttributes, ProcessAttributes, RPCAttributes, ServerAddressAttributes, ServiceAttributes, SessionAttributes, TLSAttributes, ThreadAttributes, URLAttributes, UserAttributes };
179
+ //# sourceMappingURL=chunk-4A53YIAX.js.map
180
+ //# sourceMappingURL=chunk-4A53YIAX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/attributes/registry.ts"],"names":[],"mappings":"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","file":"chunk-4A53YIAX.js","sourcesContent":["/**\n * OpenTelemetry attribute registry\n * Central source of truth for attribute keys, types, and metadata\n */\n\nexport const UserAttributes = {\n id: 'user.id' as const,\n email: 'user.email' as const,\n name: 'user.name' as const,\n fullName: 'user.full_name' as const,\n hash: 'user.hash' as const,\n roles: 'user.roles' as const,\n} as const;\n\nexport const SessionAttributes = {\n id: 'session.id' as const,\n previousId: 'session.previous_id' as const,\n} as const;\n\nexport const DeviceAttributes = {\n id: 'device.id' as const,\n manufacturer: 'device.manufacturer' as const,\n modelIdentifier: 'device.model.identifier' as const,\n modelName: 'device.model.name' as const,\n} as const;\n\nexport const HTTPAttributes = {\n connectionState: 'http.connection.state' as const,\n requestMethod: 'http.request.method' as const,\n requestMethodOriginal: 'http.request.method_original' as const,\n requestResendCount: 'http.request.resend_count' as const,\n requestSize: 'http.request.size' as const,\n requestBodySize: 'http.request.body.size' as const,\n responseSize: 'http.response.size' as const,\n responseBodySize: 'http.response.body.size' as const,\n responseStatusCode: 'http.response.status_code' as const,\n route: 'http.route' as const,\n} as const;\n\nexport const DBAttributes = {\n clientConnectionPoolName: 'db.client.connection.pool.name' as const,\n clientConnectionState: 'db.client.connection.state' as const,\n collectionName: 'db.collection.name' as const,\n namespace: 'db.namespace' as const,\n operationBatchSize: 'db.operation.batch.size' as const,\n operationName: 'db.operation.name' as const,\n querySummary: 'db.query.summary' as const,\n queryText: 'db.query.text' as const,\n responseReturnedRows: 'db.response.returned_rows' as const,\n responseStatusCode: 'db.response.status_code' as const,\n systemName: 'db.system.name' as const,\n statement: 'db.statement' as const,\n} as const;\n\nexport const ServiceAttributes = {\n name: 'service.name' as const,\n instance: 'service.instance.id' as const,\n version: 'service.version' as const,\n} as const;\n\nexport const NetworkAttributes = {\n peerAddress: 'network.peer.address' as const,\n peerPort: 'network.peer.port' as const,\n transport: 'network.transport' as const,\n type: 'network.type' as const,\n protocolName: 'network.protocol.name' as const,\n protocolVersion: 'network.protocol.version' as const,\n} as const;\n\nexport const ServerAddressAttributes = {\n address: 'server.address' as const,\n port: 'server.port' as const,\n socketAddress: 'server.socket.address' as const,\n} as const;\n\nexport const URLAttributes = {\n scheme: 'url.scheme' as const,\n full: 'url.full' as const,\n path: 'url.path' as const,\n query: 'url.query' as const,\n fragment: 'url.fragment' as const,\n} as const;\n\nexport const ErrorAttributes = {\n type: 'error.type' as const,\n message: 'error.message' as const,\n stackTrace: 'error.stack' as const,\n code: 'error.code' as const,\n} as const;\n\nexport const ExceptionAttributes = {\n escaped: 'exception.escaped' as const,\n message: 'exception.message' as const,\n stackTrace: 'exception.stacktrace' as const,\n type: 'exception.type' as const,\n moduleName: 'exception.module' as const,\n} as const;\n\nexport const ProcessAttributes = {\n pid: 'process.pid' as const,\n executablePath: 'process.executable.path' as const,\n command: 'process.command' as const,\n owner: 'process.owner' as const,\n commandArgs: 'process.command_args' as const,\n} as const;\n\nexport const ThreadAttributes = {\n id: 'thread.id' as const,\n name: 'thread.name' as const,\n} as const;\n\nexport const ContainerAttributes = {\n id: 'container.id' as const,\n name: 'container.name' as const,\n image: 'container.image.name' as const,\n tag: 'container.image.tag' as const,\n} as const;\n\nexport const K8sAttributes = {\n podName: 'k8s.pod.name' as const,\n namespaceName: 'k8s.namespace.name' as const,\n deploymentName: 'k8s.deployment.name' as const,\n state: 'k8s.state.name' as const,\n} as const;\n\nexport const CloudAttributes = {\n provider: 'cloud.provider' as const,\n accountId: 'cloud.account.id' as const,\n region: 'cloud.region' as const,\n availabilityZone: 'cloud.availability_zone' as const,\n platform: 'cloud.platform' as const,\n} as const;\n\nexport const FaaSAttributes = {\n name: 'faas.name' as const,\n version: 'faas.version' as const,\n instance: 'faas.instance' as const,\n execution: 'faas.execution' as const,\n coldstart: 'faas.coldstart' as const,\n} as const;\n\nexport const FeatureFlagAttributes = {\n key: 'feature.flag.key' as const,\n provider: 'feature.flag.provider_name' as const,\n variant: 'feature.flag.variant.name' as const,\n} as const;\n\nexport const MessagingAttributes = {\n system: 'messaging.system' as const,\n destination: 'messaging.destination.name' as const,\n operation: 'messaging.operation' as const,\n messageId: 'messaging.message.id' as const,\n conversationId: 'messaging.conversation_id' as const,\n batchMessageCount: 'messaging.batch.message_count' as const,\n consumerGroup: 'messaging.consumer.group' as const,\n} as const;\n\nexport const GenAIAttributes = {\n system: 'gen.ai.system' as const,\n requestModel: 'gen.ai.request.model' as const,\n responseModel: 'gen.ai.response.model' as const,\n operationName: 'gen.ai.operation.name' as const,\n usagePromptTokens: 'gen.ai.usage.prompt_tokens' as const,\n usageCompletionTokens: 'gen.ai.usage.completion_tokens' as const,\n provider: 'gen.ai.provider' as const,\n} as const;\n\nexport const RPCAttributes = {\n system: 'rpc.system' as const,\n service: 'rpc.service' as const,\n method: 'rpc.method' as const,\n grpcStatusCode: 'rpc.grpc.status_code' as const,\n} as const;\n\nexport const GraphQLAttributes = {\n document: 'graphql.document' as const,\n operationName: 'graphql.operation.name' as const,\n operationType: 'graphql.operation.type' as const,\n} as const;\n\nexport const PeerAttributes = {\n service: 'peer.service' as const,\n} as const;\n\nexport const ClientAttributes = {\n address: 'client.address' as const,\n port: 'client.port' as const,\n socketAddress: 'client.socket.address' as const,\n} as const;\n\nexport const DeploymentAttributes = {\n environment: 'deployment.environment' as const,\n id: 'deployment.environment.id' as const,\n} as const;\n\nexport const OTelAttributes = {\n libraryName: 'otel.library.name' as const,\n libraryVersion: 'otel.library.version' as const,\n statusCode: 'otel.status_code' as const,\n} as const;\n\nexport const CodeAttributes = {\n namespace: 'code.namespace' as const,\n filepath: 'code.filepath' as const,\n function: 'code.function' as const,\n class: 'code.class' as const,\n method: 'code.method' as const,\n column: 'code.column' as const,\n lineNumber: 'code.lineno' as const,\n repository: 'code.repository' as const,\n revision: 'code.revision' as const,\n} as const;\n\nexport const TLSAttributes = {\n protocolVersion: 'tls.protocol.version' as const,\n cipher: 'tls.cipher' as const,\n curveName: 'tls.curve.name' as const,\n resumed: 'tls.resumed' as const,\n} as const;\n\nexport const BrowserAttributes = {\n platform: 'browser.platform' as const,\n language: 'browser.language' as const,\n brand: 'browser.brand' as const,\n mobile: 'browser.mobile' as const,\n} as const;\n\nexport const AndroidAttributes = {\n appVersion: 'android.app.version' as const,\n package: 'android.package' as const,\n activityName: 'android.activity.name' as const,\n} as const;\n\nexport const IOSAttributes = {\n deviceModel: 'ios.device.model' as const,\n version: 'ios.version' as const,\n} as const;\n\nexport const GeoAttributes = {\n cityName: 'geo.city.name' as const,\n countryCode: 'geo.country.name' as const,\n continentCode: 'geo.continent.code' as const,\n} as const;\n\nexport const UserAgentAttributes = {\n original: 'user_agent.original' as const,\n} as const;\n\nexport const AWSAttributes = {\n ecsClusterArn: 'aws.ecs.cluster.arn' as const,\n ecsContainerArn: 'aws.ecs.container.arn' as const,\n logGroupName: 'aws.log.group.name' as const,\n requestId: 'aws.requestId' as const,\n} as const;\n\nexport const AzureAttributes = {\n subscriptionId: 'azure.subscription.id' as const,\n tenantId: 'azure.tenant.id' as const,\n} as const;\n\nexport const GCPAttributes = {\n project: 'gcp.project.id' as const,\n instanceName: 'gcp.instance.name' as const,\n zone: 'gcp.zone' as const,\n} as const;\n\nexport const CassandraAttributes = {\n consistencyLevel: 'cassandra.consistency.level' as const,\n coordinatorId: 'cassandra.coordinator.id' as const,\n dataCenter: 'cassandra.coordinator.dc' as const,\n pageSize: 'cassandra.page.size' as const,\n} as const;\n\nexport const ElasticsearchAttributes = {\n clusterName: 'elasticsearch.cluster.name' as const,\n nodeId: 'elasticsearch.node.name' as const,\n} as const;\n\nexport const MongoDBAttributes = {\n collectionName: 'mongodb.collection.name' as const,\n} as const;\n\nexport const RedisAttributes = {\n databaseIndex: 'redis.database.index' as const,\n} as const;\n\nexport const MSSQLAttributes = {\n instanceName: 'mssql.instance.name' as const,\n} as const;\n\nexport const PostgreSQLAttributes = {\n databaseName: 'postgresql.database.name' as const,\n} as const;\n\nexport const AWSLambdaAttributes = {\n requestId: 'aws.lambda.invoked_arn' as const,\n requestFunction: 'aws.lambda.invoked_function_arn' as const,\n} as const;\n\nexport const OpenAIAttributes = {\n requestId: 'openai.request.id' as const,\n responseModel: 'openai.response.model' as const,\n responseOrganization: 'openai.response.organization' as const,\n} as const;\n\nexport const AzureAIAAttributes = {\n resource: 'azure.ai.inference.resource' as const,\n deploymentId: 'azure.ai.inference.deployment.id' as const,\n} as const;\n\nexport const AWSBedrockAttributes = {\n requestId: 'aws.bedrock.requestId' as const,\n responseModel: 'aws.bedrock.responseModel' as const,\n} as const;\n\nexport const TestAttributes = {\n framework: 'test.framework' as const,\n name: 'test.name' as const,\n} as const;\n\nexport const ArtifactAttributes = {\n type: 'artifact.type' as const,\n id: 'artifact.id' as const,\n checksum: 'artifact.checksum' as const,\n} as const;\n\nexport const CICDAttributes = {\n pipelineName: 'ci.pipeline.name' as const,\n pipelineRunId: 'ci.pipeline.run.id' as const,\n} as const;\n"]}
@@ -1,4 +1,4 @@
1
- import { trace } from './chunk-QP5LVD4L.js';
1
+ import { trace } from './chunk-G47ZCJGW.js';
2
2
 
3
3
  // src/semantic-helpers.ts
4
4
  function traceLLM(config) {
@@ -91,5 +91,5 @@ function traceMessaging(config) {
91
91
  }
92
92
 
93
93
  export { traceDB, traceHTTP, traceLLM, traceMessaging };
94
- //# sourceMappingURL=chunk-QKVQWGTF.js.map
95
- //# sourceMappingURL=chunk-QKVQWGTF.js.map
94
+ //# sourceMappingURL=chunk-5JLXDCL2.js.map
95
+ //# sourceMappingURL=chunk-5JLXDCL2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/semantic-helpers.ts"],"names":[],"mappings":"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","file":"chunk-QKVQWGTF.js","sourcesContent":["/**\n * Semantic convention helpers for OpenTelemetry\n *\n * Pre-configured trace helpers that follow OpenTelemetry semantic conventions\n * for common operation types. Reduces boilerplate and ensures consistency.\n *\n * Based on: https://opentelemetry.io/docs/specs/semconv/\n */\n\nimport { trace } from './functional';\nimport type { TraceContext } from './trace-context';\nimport type { Attributes } from '@opentelemetry/api';\n\n/**\n * Configuration for LLM (Large Language Model) operations\n *\n * Follows Gen AI semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/gen-ai/\n */\nexport interface LLMConfig {\n /** Model name (e.g., 'gpt-4', 'claude-3-opus') */\n model: string;\n /** Operation type */\n operation?: 'chat' | 'completion' | 'embedding';\n /** Model provider (e.g., 'openai', 'anthropic', 'cohere') - maps to gen.ai.system */\n provider?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Configuration for database operations\n *\n * Follows DB semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/database/\n */\nexport interface DBConfig {\n /** Database system (e.g., 'postgresql', 'mongodb', 'redis') */\n system: string;\n /** Operation type (e.g., 'SELECT', 'INSERT', 'find', 'get') */\n operation?: string;\n /** Database name */\n database?: string;\n /** Collection/table name */\n collection?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Configuration for HTTP client operations\n *\n * Follows HTTP semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/http/\n */\nexport interface HTTPConfig {\n /** HTTP method (e.g., 'GET', 'POST') */\n method?: string;\n /** Target URL or URL template */\n url?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Configuration for messaging operations\n *\n * Follows Messaging semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/messaging/\n */\nexport interface MessagingConfig {\n /** Messaging system (e.g., 'kafka', 'rabbitmq', 'sqs') */\n system: string;\n /** Operation type */\n operation?: 'publish' | 'receive' | 'process';\n /** Destination name (queue/topic) */\n destination?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Trace LLM operations with Gen AI semantic conventions\n *\n * Automatically adds standard attributes for LLM operations:\n * - gen.ai.request.model\n * - gen.ai.operation.name\n * - gen.ai.system\n *\n * **Use Cases:**\n * - Chat completions\n * - Text generation\n * - Embeddings\n * - Multi-step LLM workflows\n *\n * @param config - LLM operation configuration\n * @returns Traced function factory with Gen AI attributes\n *\n * @example Chat completion with OpenAI\n * ```typescript\n * import { traceLLM } from 'autotel/semantic-helpers'\n * import OpenAI from 'openai'\n *\n * const openai = new OpenAI()\n *\n * export const generateResponse = traceLLM({\n * model: 'gpt-4-turbo',\n * operation: 'chat',\n * provider: 'openai'\n * })(ctx => async (prompt: string) => {\n * const response = await openai.chat.completions.create({\n * model: 'gpt-4-turbo',\n * messages: [{ role: 'user', content: prompt }]\n * })\n *\n * // Add usage metrics to span\n * ctx.setAttribute('gen.ai.usage.completion_tokens', response.usage?.completion_tokens)\n * ctx.setAttribute('gen.ai.usage.prompt_tokens', response.usage?.prompt_tokens)\n *\n * return response.choices[0].message.content\n * })\n * ```\n *\n * @example Anthropic Claude with streaming\n * ```typescript\n * import { traceLLM } from 'autotel/semantic-helpers'\n * import Anthropic from '@anthropic-ai/sdk'\n *\n * const anthropic = new Anthropic()\n *\n * export const streamResponse = traceLLM({\n * model: 'claude-3-opus-20240229',\n * operation: 'chat',\n * provider: 'anthropic'\n * })(ctx => async function* (prompt: string) {\n * const stream = await anthropic.messages.create({\n * model: 'claude-3-opus-20240229',\n * messages: [{ role: 'user', content: prompt }],\n * stream: true,\n * max_tokens: 1024\n * })\n *\n * let totalTokens = 0\n * for await (const event of stream) {\n * if (event.type === 'content_block_delta') {\n * yield event.delta.text\n * }\n * if (event.type === 'message_stop') {\n * ctx.setAttribute('gen.ai.usage.completion_tokens', event.message.usage.output_tokens)\n * totalTokens = event.message.usage.output_tokens\n * }\n * }\n *\n * return totalTokens\n * })\n * ```\n *\n * @example Embeddings\n * ```typescript\n * import { traceLLM } from 'autotel/semantic-helpers'\n * import { OpenAIEmbeddings } from '@langchain/openai'\n *\n * const embeddings = new OpenAIEmbeddings()\n *\n * export const embed = traceLLM({\n * model: 'text-embedding-3-small',\n * operation: 'embedding',\n * provider: 'openai'\n * })(ctx => async (text: string) => {\n * const result = await embeddings.embedQuery(text)\n * ctx.setAttribute('gen.ai.response.embedding_length', result.length)\n * return result\n * })\n * ```\n *\n * @public\n */\nexport function traceLLM<TArgs extends unknown[], TReturn>(config: LLMConfig) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n ctx.setAttribute('gen.ai.request.model', config.model);\n ctx.setAttribute('gen.ai.operation.name', config.operation || 'chat');\n if (config.provider) {\n ctx.setAttribute('gen.ai.system', config.provider);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n\n/**\n * Trace database operations with DB semantic conventions\n *\n * Automatically adds standard attributes for database operations:\n * - db.system\n * - db.operation\n * - db.name\n * - db.collection.name (for NoSQL)\n *\n * **Use Cases:**\n * - SQL queries (PostgreSQL, MySQL, SQLite)\n * - NoSQL operations (MongoDB, DynamoDB, Redis)\n * - ORM queries (Prisma, TypeORM, Drizzle)\n *\n * @param config - Database operation configuration\n * @returns Traced function factory with DB attributes\n *\n * @example PostgreSQL query\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { pool } from './db'\n *\n * export const getUser = traceDB({\n * system: 'postgresql',\n * operation: 'SELECT',\n * database: 'app_db',\n * collection: 'users'\n * })(ctx => async (userId: string) => {\n * const query = 'SELECT * FROM users WHERE id = $1'\n * ctx.setAttribute('db.statement', query)\n *\n * const result = await pool.query(query, [userId])\n * ctx.setAttribute('db.rows_affected', result.rowCount)\n *\n * return result.rows[0]\n * })\n * ```\n *\n * @example MongoDB with Mongoose\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { User } from './models/User'\n *\n * export const findUsers = traceDB({\n * system: 'mongodb',\n * operation: 'find',\n * database: 'app_db',\n * collection: 'users'\n * })(ctx => async (filter: object) => {\n * ctx.setAttribute('db.mongodb.filter', JSON.stringify(filter))\n *\n * const users = await User.find(filter).limit(100)\n * ctx.setAttribute('db.response.count', users.length)\n *\n * return users\n * })\n * ```\n *\n * @example Redis operations\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { redis } from './redis'\n *\n * export const cacheGet = traceDB({\n * system: 'redis',\n * operation: 'GET'\n * })(ctx => async (key: string) => {\n * ctx.setAttribute('db.redis.key', key)\n *\n * const value = await redis.get(key)\n * ctx.setAttribute('db.response.cache_hit', value !== null)\n *\n * return value\n * })\n * ```\n *\n * @example Prisma with detailed query info\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { prisma } from './prisma'\n *\n * export const createPost = traceDB({\n * system: 'postgresql',\n * operation: 'INSERT',\n * database: 'app_db',\n * collection: 'posts'\n * })(ctx => async (data: { title: string; content: string; authorId: string }) => {\n * ctx.setAttribute('db.prisma.model', 'Post')\n * ctx.setAttribute('db.prisma.action', 'create')\n *\n * const post = await prisma.post.create({ data })\n *\n * ctx.setAttribute('db.response.id', post.id)\n * return post\n * })\n * ```\n *\n * @public\n */\nexport function traceDB<TArgs extends unknown[], TReturn>(config: DBConfig) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n ctx.setAttribute('db.system', config.system);\n if (config.operation) {\n ctx.setAttribute('db.operation', config.operation);\n }\n if (config.database) {\n ctx.setAttribute('db.name', config.database);\n }\n if (config.collection) {\n ctx.setAttribute('db.collection.name', config.collection);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n\n/**\n * Trace HTTP client operations with HTTP semantic conventions\n *\n * Automatically adds standard attributes for HTTP requests:\n * - http.request.method\n * - url.full\n *\n * **Use Cases:**\n * - External API calls\n * - Microservice communication\n * - Third-party integrations\n *\n * @param config - HTTP operation configuration\n * @returns Traced function factory with HTTP attributes\n *\n * @example Fetch API\n * ```typescript\n * import { traceHTTP } from 'autotel/semantic-helpers'\n *\n * export const fetchUser = traceHTTP({\n * method: 'GET',\n * url: 'https://api.example.com/users/:id'\n * })(ctx => async (userId: string) => {\n * const url = `https://api.example.com/users/${userId}`\n * ctx.setAttribute('url.full', url)\n *\n * const response = await fetch(url)\n * ctx.setAttribute('http.response.status_code', response.status)\n *\n * if (!response.ok) {\n * ctx.setAttribute('error', true)\n * throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n * }\n *\n * return response.json()\n * })\n * ```\n *\n * @example Axios with retry logic\n * ```typescript\n * import { traceHTTP } from 'autotel/semantic-helpers'\n * import axios from 'axios'\n *\n * export const sendWebhook = traceHTTP({\n * method: 'POST',\n * url: 'https://webhook.example.com/events'\n * })(ctx => async (payload: object) => {\n * let attempts = 0\n * const maxAttempts = 3\n *\n * while (attempts < maxAttempts) {\n * try {\n * attempts++\n * ctx.setAttribute('http.request.resend_count', attempts - 1)\n *\n * const response = await axios.post('https://webhook.example.com/events', payload)\n * ctx.setAttribute('http.response.status_code', response.status)\n * return response.data\n * } catch (error) {\n * if (attempts >= maxAttempts) throw error\n * await new Promise(resolve => setTimeout(resolve, 1000 * attempts))\n * }\n * }\n * })\n * ```\n *\n * @public\n */\nexport function traceHTTP<TArgs extends unknown[], TReturn>(\n config: HTTPConfig,\n) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n if (config.method) {\n ctx.setAttribute('http.request.method', config.method);\n }\n if (config.url) {\n ctx.setAttribute('url.full', config.url);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n\n/**\n * Trace messaging operations with Messaging semantic conventions\n *\n * Automatically adds standard attributes for messaging:\n * - messaging.system\n * - messaging.operation\n * - messaging.destination.name\n *\n * **Use Cases:**\n * - Publishing messages to queues/topics\n * - Consuming messages from queues/topics\n * - Event-driven architectures\n *\n * @param config - Messaging operation configuration\n * @returns Traced function factory with Messaging attributes\n *\n * @example Publishing to Kafka\n * ```typescript\n * import { traceMessaging } from 'autotel/semantic-helpers'\n * import { kafka } from './kafka'\n *\n * const producer = kafka.producer()\n *\n * export const publishEvent = traceMessaging({\n * system: 'kafka',\n * operation: 'publish',\n * destination: 'user-events'\n * })(ctx => async (event: { type: string; userId: string; data: object }) => {\n * ctx.setAttribute('messaging.message.type', event.type)\n * ctx.setAttribute('messaging.kafka.partition', 0)\n *\n * await producer.send({\n * topic: 'user-events',\n * messages: [\n * {\n * key: event.userId,\n * value: JSON.stringify(event.data)\n * }\n * ]\n * })\n *\n * ctx.setAttribute('messaging.message.id', event.userId)\n * })\n * ```\n *\n * @example Consuming from RabbitMQ\n * ```typescript\n * import { traceMessaging } from 'autotel/semantic-helpers'\n * import { channel } from './rabbitmq'\n *\n * export const processOrder = traceMessaging({\n * system: 'rabbitmq',\n * operation: 'process',\n * destination: 'orders'\n * })(ctx => async (message: { orderId: string; items: object[] }) => {\n * ctx.setAttribute('messaging.message.id', message.orderId)\n * ctx.setAttribute('messaging.message.body.size', JSON.stringify(message).length)\n *\n * // Process order logic\n * const result = await processOrderInternal(message)\n *\n * ctx.setAttribute('messaging.operation.result', 'success')\n * return result\n * })\n * ```\n *\n * @example AWS SQS with batch processing\n * ```typescript\n * import { traceMessaging } from 'autotel/semantic-helpers'\n * import { SQS } from '@aws-sdk/client-sqs'\n *\n * const sqs = new SQS()\n *\n * export const sendBatch = traceMessaging({\n * system: 'aws_sqs',\n * operation: 'publish',\n * destination: 'notifications-queue'\n * })(ctx => async (messages: Array<{ id: string; body: object }>) => {\n * ctx.setAttribute('messaging.batch.message_count', messages.length)\n *\n * const result = await sqs.sendMessageBatch({\n * QueueUrl: process.env.QUEUE_URL,\n * Entries: messages.map(msg => ({\n * Id: msg.id,\n * MessageBody: JSON.stringify(msg.body)\n * }))\n * })\n *\n * ctx.setAttribute('messaging.operation.success_count', result.Successful?.length || 0)\n * ctx.setAttribute('messaging.operation.failed_count', result.Failed?.length || 0)\n *\n * return result\n * })\n * ```\n *\n * @public\n */\nexport function traceMessaging<TArgs extends unknown[], TReturn>(\n config: MessagingConfig,\n) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n ctx.setAttribute('messaging.system', config.system);\n if (config.operation) {\n ctx.setAttribute('messaging.operation', config.operation);\n }\n if (config.destination) {\n ctx.setAttribute('messaging.destination.name', config.destination);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/semantic-helpers.ts"],"names":[],"mappings":"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","file":"chunk-5JLXDCL2.js","sourcesContent":["/**\n * Semantic convention helpers for OpenTelemetry\n *\n * Pre-configured trace helpers that follow OpenTelemetry semantic conventions\n * for common operation types. Reduces boilerplate and ensures consistency.\n *\n * Based on: https://opentelemetry.io/docs/specs/semconv/\n */\n\nimport { trace } from './functional';\nimport type { TraceContext } from './trace-context';\nimport type { Attributes } from '@opentelemetry/api';\n\n/**\n * Configuration for LLM (Large Language Model) operations\n *\n * Follows Gen AI semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/gen-ai/\n */\nexport interface LLMConfig {\n /** Model name (e.g., 'gpt-4', 'claude-3-opus') */\n model: string;\n /** Operation type */\n operation?: 'chat' | 'completion' | 'embedding';\n /** Model provider (e.g., 'openai', 'anthropic', 'cohere') - maps to gen.ai.system */\n provider?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Configuration for database operations\n *\n * Follows DB semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/database/\n */\nexport interface DBConfig {\n /** Database system (e.g., 'postgresql', 'mongodb', 'redis') */\n system: string;\n /** Operation type (e.g., 'SELECT', 'INSERT', 'find', 'get') */\n operation?: string;\n /** Database name */\n database?: string;\n /** Collection/table name */\n collection?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Configuration for HTTP client operations\n *\n * Follows HTTP semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/http/\n */\nexport interface HTTPConfig {\n /** HTTP method (e.g., 'GET', 'POST') */\n method?: string;\n /** Target URL or URL template */\n url?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Configuration for messaging operations\n *\n * Follows Messaging semantic conventions:\n * https://opentelemetry.io/docs/specs/semconv/messaging/\n */\nexport interface MessagingConfig {\n /** Messaging system (e.g., 'kafka', 'rabbitmq', 'sqs') */\n system: string;\n /** Operation type */\n operation?: 'publish' | 'receive' | 'process';\n /** Destination name (queue/topic) */\n destination?: string;\n /** Additional attributes to add to the span */\n attributes?: Attributes;\n}\n\n/**\n * Trace LLM operations with Gen AI semantic conventions\n *\n * Automatically adds standard attributes for LLM operations:\n * - gen.ai.request.model\n * - gen.ai.operation.name\n * - gen.ai.system\n *\n * **Use Cases:**\n * - Chat completions\n * - Text generation\n * - Embeddings\n * - Multi-step LLM workflows\n *\n * @param config - LLM operation configuration\n * @returns Traced function factory with Gen AI attributes\n *\n * @example Chat completion with OpenAI\n * ```typescript\n * import { traceLLM } from 'autotel/semantic-helpers'\n * import OpenAI from 'openai'\n *\n * const openai = new OpenAI()\n *\n * export const generateResponse = traceLLM({\n * model: 'gpt-4-turbo',\n * operation: 'chat',\n * provider: 'openai'\n * })(ctx => async (prompt: string) => {\n * const response = await openai.chat.completions.create({\n * model: 'gpt-4-turbo',\n * messages: [{ role: 'user', content: prompt }]\n * })\n *\n * // Add usage metrics to span\n * ctx.setAttribute('gen.ai.usage.completion_tokens', response.usage?.completion_tokens)\n * ctx.setAttribute('gen.ai.usage.prompt_tokens', response.usage?.prompt_tokens)\n *\n * return response.choices[0].message.content\n * })\n * ```\n *\n * @example Anthropic Claude with streaming\n * ```typescript\n * import { traceLLM } from 'autotel/semantic-helpers'\n * import Anthropic from '@anthropic-ai/sdk'\n *\n * const anthropic = new Anthropic()\n *\n * export const streamResponse = traceLLM({\n * model: 'claude-3-opus-20240229',\n * operation: 'chat',\n * provider: 'anthropic'\n * })(ctx => async function* (prompt: string) {\n * const stream = await anthropic.messages.create({\n * model: 'claude-3-opus-20240229',\n * messages: [{ role: 'user', content: prompt }],\n * stream: true,\n * max_tokens: 1024\n * })\n *\n * let totalTokens = 0\n * for await (const event of stream) {\n * if (event.type === 'content_block_delta') {\n * yield event.delta.text\n * }\n * if (event.type === 'message_stop') {\n * ctx.setAttribute('gen.ai.usage.completion_tokens', event.message.usage.output_tokens)\n * totalTokens = event.message.usage.output_tokens\n * }\n * }\n *\n * return totalTokens\n * })\n * ```\n *\n * @example Embeddings\n * ```typescript\n * import { traceLLM } from 'autotel/semantic-helpers'\n * import { OpenAIEmbeddings } from '@langchain/openai'\n *\n * const embeddings = new OpenAIEmbeddings()\n *\n * export const embed = traceLLM({\n * model: 'text-embedding-3-small',\n * operation: 'embedding',\n * provider: 'openai'\n * })(ctx => async (text: string) => {\n * const result = await embeddings.embedQuery(text)\n * ctx.setAttribute('gen.ai.response.embedding_length', result.length)\n * return result\n * })\n * ```\n *\n * @public\n */\nexport function traceLLM<TArgs extends unknown[], TReturn>(config: LLMConfig) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n ctx.setAttribute('gen.ai.request.model', config.model);\n ctx.setAttribute('gen.ai.operation.name', config.operation || 'chat');\n if (config.provider) {\n ctx.setAttribute('gen.ai.system', config.provider);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n\n/**\n * Trace database operations with DB semantic conventions\n *\n * Automatically adds standard attributes for database operations:\n * - db.system\n * - db.operation\n * - db.name\n * - db.collection.name (for NoSQL)\n *\n * **Use Cases:**\n * - SQL queries (PostgreSQL, MySQL, SQLite)\n * - NoSQL operations (MongoDB, DynamoDB, Redis)\n * - ORM queries (Prisma, TypeORM, Drizzle)\n *\n * @param config - Database operation configuration\n * @returns Traced function factory with DB attributes\n *\n * @example PostgreSQL query\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { pool } from './db'\n *\n * export const getUser = traceDB({\n * system: 'postgresql',\n * operation: 'SELECT',\n * database: 'app_db',\n * collection: 'users'\n * })(ctx => async (userId: string) => {\n * const query = 'SELECT * FROM users WHERE id = $1'\n * ctx.setAttribute('db.statement', query)\n *\n * const result = await pool.query(query, [userId])\n * ctx.setAttribute('db.rows_affected', result.rowCount)\n *\n * return result.rows[0]\n * })\n * ```\n *\n * @example MongoDB with Mongoose\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { User } from './models/User'\n *\n * export const findUsers = traceDB({\n * system: 'mongodb',\n * operation: 'find',\n * database: 'app_db',\n * collection: 'users'\n * })(ctx => async (filter: object) => {\n * ctx.setAttribute('db.mongodb.filter', JSON.stringify(filter))\n *\n * const users = await User.find(filter).limit(100)\n * ctx.setAttribute('db.response.count', users.length)\n *\n * return users\n * })\n * ```\n *\n * @example Redis operations\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { redis } from './redis'\n *\n * export const cacheGet = traceDB({\n * system: 'redis',\n * operation: 'GET'\n * })(ctx => async (key: string) => {\n * ctx.setAttribute('db.redis.key', key)\n *\n * const value = await redis.get(key)\n * ctx.setAttribute('db.response.cache_hit', value !== null)\n *\n * return value\n * })\n * ```\n *\n * @example Prisma with detailed query info\n * ```typescript\n * import { traceDB } from 'autotel/semantic-helpers'\n * import { prisma } from './prisma'\n *\n * export const createPost = traceDB({\n * system: 'postgresql',\n * operation: 'INSERT',\n * database: 'app_db',\n * collection: 'posts'\n * })(ctx => async (data: { title: string; content: string; authorId: string }) => {\n * ctx.setAttribute('db.prisma.model', 'Post')\n * ctx.setAttribute('db.prisma.action', 'create')\n *\n * const post = await prisma.post.create({ data })\n *\n * ctx.setAttribute('db.response.id', post.id)\n * return post\n * })\n * ```\n *\n * @public\n */\nexport function traceDB<TArgs extends unknown[], TReturn>(config: DBConfig) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n ctx.setAttribute('db.system', config.system);\n if (config.operation) {\n ctx.setAttribute('db.operation', config.operation);\n }\n if (config.database) {\n ctx.setAttribute('db.name', config.database);\n }\n if (config.collection) {\n ctx.setAttribute('db.collection.name', config.collection);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n\n/**\n * Trace HTTP client operations with HTTP semantic conventions\n *\n * Automatically adds standard attributes for HTTP requests:\n * - http.request.method\n * - url.full\n *\n * **Use Cases:**\n * - External API calls\n * - Microservice communication\n * - Third-party integrations\n *\n * @param config - HTTP operation configuration\n * @returns Traced function factory with HTTP attributes\n *\n * @example Fetch API\n * ```typescript\n * import { traceHTTP } from 'autotel/semantic-helpers'\n *\n * export const fetchUser = traceHTTP({\n * method: 'GET',\n * url: 'https://api.example.com/users/:id'\n * })(ctx => async (userId: string) => {\n * const url = `https://api.example.com/users/${userId}`\n * ctx.setAttribute('url.full', url)\n *\n * const response = await fetch(url)\n * ctx.setAttribute('http.response.status_code', response.status)\n *\n * if (!response.ok) {\n * ctx.setAttribute('error', true)\n * throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n * }\n *\n * return response.json()\n * })\n * ```\n *\n * @example Axios with retry logic\n * ```typescript\n * import { traceHTTP } from 'autotel/semantic-helpers'\n * import axios from 'axios'\n *\n * export const sendWebhook = traceHTTP({\n * method: 'POST',\n * url: 'https://webhook.example.com/events'\n * })(ctx => async (payload: object) => {\n * let attempts = 0\n * const maxAttempts = 3\n *\n * while (attempts < maxAttempts) {\n * try {\n * attempts++\n * ctx.setAttribute('http.request.resend_count', attempts - 1)\n *\n * const response = await axios.post('https://webhook.example.com/events', payload)\n * ctx.setAttribute('http.response.status_code', response.status)\n * return response.data\n * } catch (error) {\n * if (attempts >= maxAttempts) throw error\n * await new Promise(resolve => setTimeout(resolve, 1000 * attempts))\n * }\n * }\n * })\n * ```\n *\n * @public\n */\nexport function traceHTTP<TArgs extends unknown[], TReturn>(\n config: HTTPConfig,\n) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n if (config.method) {\n ctx.setAttribute('http.request.method', config.method);\n }\n if (config.url) {\n ctx.setAttribute('url.full', config.url);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n\n/**\n * Trace messaging operations with Messaging semantic conventions\n *\n * Automatically adds standard attributes for messaging:\n * - messaging.system\n * - messaging.operation\n * - messaging.destination.name\n *\n * **Use Cases:**\n * - Publishing messages to queues/topics\n * - Consuming messages from queues/topics\n * - Event-driven architectures\n *\n * @param config - Messaging operation configuration\n * @returns Traced function factory with Messaging attributes\n *\n * @example Publishing to Kafka\n * ```typescript\n * import { traceMessaging } from 'autotel/semantic-helpers'\n * import { kafka } from './kafka'\n *\n * const producer = kafka.producer()\n *\n * export const publishEvent = traceMessaging({\n * system: 'kafka',\n * operation: 'publish',\n * destination: 'user-events'\n * })(ctx => async (event: { type: string; userId: string; data: object }) => {\n * ctx.setAttribute('messaging.message.type', event.type)\n * ctx.setAttribute('messaging.kafka.partition', 0)\n *\n * await producer.send({\n * topic: 'user-events',\n * messages: [\n * {\n * key: event.userId,\n * value: JSON.stringify(event.data)\n * }\n * ]\n * })\n *\n * ctx.setAttribute('messaging.message.id', event.userId)\n * })\n * ```\n *\n * @example Consuming from RabbitMQ\n * ```typescript\n * import { traceMessaging } from 'autotel/semantic-helpers'\n * import { channel } from './rabbitmq'\n *\n * export const processOrder = traceMessaging({\n * system: 'rabbitmq',\n * operation: 'process',\n * destination: 'orders'\n * })(ctx => async (message: { orderId: string; items: object[] }) => {\n * ctx.setAttribute('messaging.message.id', message.orderId)\n * ctx.setAttribute('messaging.message.body.size', JSON.stringify(message).length)\n *\n * // Process order logic\n * const result = await processOrderInternal(message)\n *\n * ctx.setAttribute('messaging.operation.result', 'success')\n * return result\n * })\n * ```\n *\n * @example AWS SQS with batch processing\n * ```typescript\n * import { traceMessaging } from 'autotel/semantic-helpers'\n * import { SQS } from '@aws-sdk/client-sqs'\n *\n * const sqs = new SQS()\n *\n * export const sendBatch = traceMessaging({\n * system: 'aws_sqs',\n * operation: 'publish',\n * destination: 'notifications-queue'\n * })(ctx => async (messages: Array<{ id: string; body: object }>) => {\n * ctx.setAttribute('messaging.batch.message_count', messages.length)\n *\n * const result = await sqs.sendMessageBatch({\n * QueueUrl: process.env.QUEUE_URL,\n * Entries: messages.map(msg => ({\n * Id: msg.id,\n * MessageBody: JSON.stringify(msg.body)\n * }))\n * })\n *\n * ctx.setAttribute('messaging.operation.success_count', result.Successful?.length || 0)\n * ctx.setAttribute('messaging.operation.failed_count', result.Failed?.length || 0)\n *\n * return result\n * })\n * ```\n *\n * @public\n */\nexport function traceMessaging<TArgs extends unknown[], TReturn>(\n config: MessagingConfig,\n) {\n return (\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>((ctx) => {\n // Set semantic convention attributes\n ctx.setAttribute('messaging.system', config.system);\n if (config.operation) {\n ctx.setAttribute('messaging.operation', config.operation);\n }\n if (config.destination) {\n ctx.setAttribute('messaging.destination.name', config.destination);\n }\n if (config.attributes) {\n for (const [key, value] of Object.entries(config.attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute only accepts primitives (string | number | boolean)\n // Arrays and objects should be serialized\n const attrValue =\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n ctx.setAttribute(key, attrValue);\n }\n }\n }\n\n // Call the user's factory to get their function and return it\n return fnFactory(ctx);\n });\n };\n}\n"]}
@@ -0,0 +1,11 @@
1
+ // src/semantic-conventions.ts
2
+ function httpRequestHeaderAttribute(name) {
3
+ return `http.request.header.${name.toLowerCase()}`;
4
+ }
5
+ function httpResponseHeaderAttribute(name) {
6
+ return `http.response.header.${name.toLowerCase()}`;
7
+ }
8
+
9
+ export { httpRequestHeaderAttribute, httpResponseHeaderAttribute };
10
+ //# sourceMappingURL=chunk-7552UTQW.js.map
11
+ //# sourceMappingURL=chunk-7552UTQW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/semantic-conventions.ts"],"names":[],"mappings":";AAQO,SAAS,2BAA2B,IAAA,EAAsB;AAC/D,EAAA,OAAO,CAAA,oBAAA,EAAuB,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AAClD;AAEO,SAAS,4BAA4B,IAAA,EAAsB;AAChE,EAAA,OAAO,CAAA,qBAAA,EAAwB,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA;AACnD","file":"chunk-7552UTQW.js","sourcesContent":["import {\n HTTPAttributes,\n ServiceAttributes,\n URLAttributes,\n} from './attributes/registry';\n\nexport { HTTPAttributes, ServiceAttributes, URLAttributes };\n\nexport function httpRequestHeaderAttribute(name: string): string {\n return `http.request.header.${name.toLowerCase()}`;\n}\n\nexport function httpResponseHeaderAttribute(name: string): string {\n return `http.response.header.${name.toLowerCase()}`;\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkDWRTSOGR_cjs = require('./chunk-DWRTSOGR.cjs');
3
+ var chunkXI5WPVR5_cjs = require('./chunk-XI5WPVR5.cjs');
4
4
  var chunkBGVKKL2N_cjs = require('./chunk-BGVKKL2N.cjs');
5
5
  var api = require('@opentelemetry/api');
6
6
 
7
7
  function traceProducer(config) {
8
8
  const spanName = `${config.system}.publish ${config.destination}`;
9
9
  return (fnFactory) => {
10
- return chunkDWRTSOGR_cjs.trace(
10
+ return chunkXI5WPVR5_cjs.trace(
11
11
  { name: spanName, spanKind: api.SpanKind.PRODUCER },
12
12
  (baseCtx) => {
13
13
  const ctx = extendContextForProducer(baseCtx, config);
@@ -41,7 +41,7 @@ function traceConsumer(config) {
41
41
  const operation = config.batchMode ? "receive" : "process";
42
42
  const spanName = `${config.system}.${operation} ${config.destination}`;
43
43
  return (fnFactory) => {
44
- return chunkDWRTSOGR_cjs.trace(
44
+ return chunkXI5WPVR5_cjs.trace(
45
45
  { name: spanName, spanKind: api.SpanKind.CONSUMER },
46
46
  (baseCtx) => {
47
47
  const linkStorage = { links: [] };
@@ -794,5 +794,5 @@ function clearOrderingState() {
794
794
  exports.clearOrderingState = clearOrderingState;
795
795
  exports.traceConsumer = traceConsumer;
796
796
  exports.traceProducer = traceProducer;
797
- //# sourceMappingURL=chunk-NWT5SYOX.cjs.map
798
- //# sourceMappingURL=chunk-NWT5SYOX.cjs.map
797
+ //# sourceMappingURL=chunk-BEVIAKTB.cjs.map
798
+ //# sourceMappingURL=chunk-BEVIAKTB.cjs.map