autotel 3.1.1 → 3.3.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 (105) hide show
  1. package/dist/attribute-redacting-processor.cjs +8 -8
  2. package/dist/attribute-redacting-processor.js +1 -1
  3. package/dist/attributes.cjs +21 -21
  4. package/dist/attributes.js +2 -2
  5. package/dist/auto.cjs +3 -3
  6. package/dist/auto.js +2 -2
  7. package/dist/{chunk-MYWQELNY.js → chunk-32AXF4MA.js} +30 -8
  8. package/dist/chunk-32AXF4MA.js.map +1 -0
  9. package/dist/{chunk-6X2GG65S.cjs → chunk-3MZJ7Y24.cjs} +5 -5
  10. package/dist/{chunk-6X2GG65S.cjs.map → chunk-3MZJ7Y24.cjs.map} +1 -1
  11. package/dist/{chunk-DDXIUZEG.js → chunk-454CH4OV.js} +3 -3
  12. package/dist/{chunk-DDXIUZEG.js.map → chunk-454CH4OV.js.map} +1 -1
  13. package/dist/{chunk-MXO6LXV5.cjs → chunk-4RA6HIYF.cjs} +5 -5
  14. package/dist/{chunk-MXO6LXV5.cjs.map → chunk-4RA6HIYF.cjs.map} +1 -1
  15. package/dist/{chunk-6TFJF7SS.js → chunk-4TAQQZDU.js} +3 -3
  16. package/dist/{chunk-6TFJF7SS.js.map → chunk-4TAQQZDU.js.map} +1 -1
  17. package/dist/{chunk-LIYNUGML.cjs → chunk-DQSVSGK3.cjs} +23 -32
  18. package/dist/chunk-DQSVSGK3.cjs.map +1 -0
  19. package/dist/{chunk-PEEUMQ3R.js → chunk-FZROHTZZ.js} +3 -3
  20. package/dist/{chunk-PEEUMQ3R.js.map → chunk-FZROHTZZ.js.map} +1 -1
  21. package/dist/{chunk-DQ2SUROF.cjs → chunk-M3LFHHTN.cjs} +4 -4
  22. package/dist/{chunk-DQ2SUROF.cjs.map → chunk-M3LFHHTN.cjs.map} +1 -1
  23. package/dist/{chunk-ZPERWNOP.cjs → chunk-MQH5OOZK.cjs} +17 -17
  24. package/dist/{chunk-ZPERWNOP.cjs.map → chunk-MQH5OOZK.cjs.map} +1 -1
  25. package/dist/{chunk-NXLRY2CE.cjs → chunk-NEIB3TLD.cjs} +10 -8
  26. package/dist/chunk-NEIB3TLD.cjs.map +1 -0
  27. package/dist/{chunk-MHPYLMQS.js → chunk-OACAWYLR.js} +4 -4
  28. package/dist/{chunk-MHPYLMQS.js.map → chunk-OACAWYLR.js.map} +1 -1
  29. package/dist/{chunk-52ALHU7T.js → chunk-OPCTN527.js} +3 -3
  30. package/dist/{chunk-52ALHU7T.js.map → chunk-OPCTN527.js.map} +1 -1
  31. package/dist/{chunk-YPQMAE6U.cjs → chunk-QICFEFD6.cjs} +7 -7
  32. package/dist/{chunk-YPQMAE6U.cjs.map → chunk-QICFEFD6.cjs.map} +1 -1
  33. package/dist/{chunk-45B2GD4P.cjs → chunk-QJYWKAC5.cjs} +32 -10
  34. package/dist/chunk-QJYWKAC5.cjs.map +1 -0
  35. package/dist/{chunk-JVWJDHDB.js → chunk-RUPKBKUF.js} +10 -8
  36. package/dist/chunk-RUPKBKUF.js.map +1 -0
  37. package/dist/{chunk-FTBBBPT6.js → chunk-TGV2XF57.js} +13 -22
  38. package/dist/chunk-TGV2XF57.js.map +1 -0
  39. package/dist/{chunk-T7CPAGOI.js → chunk-U4D5IBSB.js} +4 -4
  40. package/dist/chunk-U4D5IBSB.js.map +1 -0
  41. package/dist/{chunk-KPDIEVVV.cjs → chunk-U72TGONP.cjs} +32 -32
  42. package/dist/chunk-U72TGONP.cjs.map +1 -0
  43. package/dist/correlation-id.cjs +11 -11
  44. package/dist/correlation-id.js +3 -3
  45. package/dist/decorators.cjs +5 -5
  46. package/dist/decorators.js +4 -4
  47. package/dist/event-subscriber.d.cts +15 -1
  48. package/dist/event-subscriber.d.ts +15 -1
  49. package/dist/event.cjs +7 -7
  50. package/dist/event.js +4 -4
  51. package/dist/functional.cjs +12 -12
  52. package/dist/functional.js +4 -4
  53. package/dist/http.cjs +4 -4
  54. package/dist/http.js +3 -3
  55. package/dist/index.cjs +280 -94
  56. package/dist/index.cjs.map +1 -1
  57. package/dist/index.d.cts +209 -4
  58. package/dist/index.d.ts +209 -4
  59. package/dist/index.js +191 -14
  60. package/dist/index.js.map +1 -1
  61. package/dist/{init-BSyIyDs5.d.ts → init-DyE43paw.d.ts} +7 -2
  62. package/dist/{init-D9Bxx39e.d.cts → init-gyesUMwz.d.cts} +7 -2
  63. package/dist/instrumentation.cjs +9 -9
  64. package/dist/instrumentation.js +2 -2
  65. package/dist/messaging.cjs +8 -8
  66. package/dist/messaging.js +5 -5
  67. package/dist/semantic-helpers.cjs +9 -9
  68. package/dist/semantic-helpers.js +5 -5
  69. package/dist/webhook.cjs +6 -6
  70. package/dist/webhook.js +4 -4
  71. package/dist/workflow-distributed.cjs +6 -6
  72. package/dist/workflow-distributed.js +4 -4
  73. package/dist/workflow.cjs +9 -9
  74. package/dist/workflow.js +5 -5
  75. package/dist/yaml-config.d.cts +1 -1
  76. package/dist/yaml-config.d.ts +1 -1
  77. package/package.json +1 -1
  78. package/skills/build-audit-trails/SKILL.md +150 -5
  79. package/skills/build-audit-trails/references/audit-queries.md +73 -0
  80. package/skills/build-audit-trails/references/framework-wiring.md +187 -0
  81. package/skills/review-otel-patterns/SKILL.md +41 -0
  82. package/src/attribute-redacting-processor.ts +12 -9
  83. package/src/define-event.test.ts +41 -0
  84. package/src/define-event.ts +77 -0
  85. package/src/error-catalog.test.ts +128 -0
  86. package/src/error-catalog.ts +259 -0
  87. package/src/event-queue.ts +4 -0
  88. package/src/event-subscriber.ts +15 -0
  89. package/src/functional.ts +2 -1
  90. package/src/gen-ai-cost.test.ts +81 -0
  91. package/src/gen-ai-cost.ts +145 -0
  92. package/src/index.ts +35 -0
  93. package/src/init-auto-redactor.test.ts +53 -0
  94. package/src/init.ts +46 -7
  95. package/src/track.ts +3 -0
  96. package/src/validation.test.ts +7 -3
  97. package/src/validation.ts +19 -21
  98. package/dist/chunk-45B2GD4P.cjs.map +0 -1
  99. package/dist/chunk-FTBBBPT6.js.map +0 -1
  100. package/dist/chunk-JVWJDHDB.js.map +0 -1
  101. package/dist/chunk-KPDIEVVV.cjs.map +0 -1
  102. package/dist/chunk-LIYNUGML.cjs.map +0 -1
  103. package/dist/chunk-MYWQELNY.js.map +0 -1
  104. package/dist/chunk-NXLRY2CE.cjs.map +0 -1
  105. package/dist/chunk-T7CPAGOI.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,31 +1,31 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk7EQ4G4SI_cjs = require('./chunk-7EQ4G4SI.cjs');
4
- var chunkMXO6LXV5_cjs = require('./chunk-MXO6LXV5.cjs');
5
- var chunkDQ2SUROF_cjs = require('./chunk-DQ2SUROF.cjs');
4
+ var chunk4RA6HIYF_cjs = require('./chunk-4RA6HIYF.cjs');
5
+ var chunkM3LFHHTN_cjs = require('./chunk-M3LFHHTN.cjs');
6
6
  var chunk2ZKEORFN_cjs = require('./chunk-2ZKEORFN.cjs');
7
7
  var chunkESMHTKLJ_cjs = require('./chunk-ESMHTKLJ.cjs');
8
8
  var chunkT4B5LB6E_cjs = require('./chunk-T4B5LB6E.cjs');
9
- var chunk6X2GG65S_cjs = require('./chunk-6X2GG65S.cjs');
9
+ var chunk3MZJ7Y24_cjs = require('./chunk-3MZJ7Y24.cjs');
10
10
  var chunk4P6ZOARG_cjs = require('./chunk-4P6ZOARG.cjs');
11
11
  var chunkINJD3G4K_cjs = require('./chunk-INJD3G4K.cjs');
12
12
  var chunkTC5ZPWM4_cjs = require('./chunk-TC5ZPWM4.cjs');
13
13
  require('./chunk-YTXEZ4SD.cjs');
14
14
  var chunkWJH6IYU2_cjs = require('./chunk-WJH6IYU2.cjs');
15
- var chunkYPQMAE6U_cjs = require('./chunk-YPQMAE6U.cjs');
16
- var chunkKPDIEVVV_cjs = require('./chunk-KPDIEVVV.cjs');
15
+ var chunkQICFEFD6_cjs = require('./chunk-QICFEFD6.cjs');
16
+ var chunkU72TGONP_cjs = require('./chunk-U72TGONP.cjs');
17
17
  var chunk2GIBANLB_cjs = require('./chunk-2GIBANLB.cjs');
18
- var chunkZPERWNOP_cjs = require('./chunk-ZPERWNOP.cjs');
18
+ var chunkMQH5OOZK_cjs = require('./chunk-MQH5OOZK.cjs');
19
19
  require('./chunk-NZ72VDNY.cjs');
20
20
  require('./chunk-UY3UYPBZ.cjs');
21
21
  var chunkVQTCQKHQ_cjs = require('./chunk-VQTCQKHQ.cjs');
22
- var chunkLIYNUGML_cjs = require('./chunk-LIYNUGML.cjs');
23
- var chunk45B2GD4P_cjs = require('./chunk-45B2GD4P.cjs');
22
+ var chunkDQSVSGK3_cjs = require('./chunk-DQSVSGK3.cjs');
23
+ var chunkQJYWKAC5_cjs = require('./chunk-QJYWKAC5.cjs');
24
24
  require('./chunk-FEEVB2GV.cjs');
25
25
  require('./chunk-CEAQK2QY.cjs');
26
26
  var chunkZNMBW67B_cjs = require('./chunk-ZNMBW67B.cjs');
27
27
  var chunkIOYFAFHJ_cjs = require('./chunk-IOYFAFHJ.cjs');
28
- var chunkNXLRY2CE_cjs = require('./chunk-NXLRY2CE.cjs');
28
+ var chunkNEIB3TLD_cjs = require('./chunk-NEIB3TLD.cjs');
29
29
  require('./chunk-CU6IDACR.cjs');
30
30
  var chunk6S5RUKU3_cjs = require('./chunk-6S5RUKU3.cjs');
31
31
  require('./chunk-HR5YFXZW.cjs');
@@ -34,6 +34,7 @@ require('./chunk-FU6R566Y.cjs');
34
34
  require('./chunk-ESLWRGAG.cjs');
35
35
  var chunkYREV3LGG_cjs = require('./chunk-YREV3LGG.cjs');
36
36
  var api = require('@opentelemetry/api');
37
+ var crypto$1 = require('crypto');
37
38
  var async_hooks = require('async_hooks');
38
39
  var sdkMetrics = require('@opentelemetry/sdk-metrics');
39
40
 
@@ -54,16 +55,55 @@ var otelMethods = {
54
55
  setSpanContext: api.trace.setSpanContext
55
56
  };
56
57
  var trace2 = Object.assign(
57
- chunkKPDIEVVV_cjs.trace,
58
+ chunkU72TGONP_cjs.trace,
58
59
  otelMethods
59
60
  );
61
+ function defineEvent(name, schema, options = {}) {
62
+ const jsonSchema = options.toJsonSchema?.(schema);
63
+ const schemaMetadata = jsonSchema ? {
64
+ source: "zod",
65
+ jsonSchema,
66
+ hash: hashSchema(jsonSchema)
67
+ } : void 0;
68
+ return {
69
+ name,
70
+ schemaMetadata,
71
+ track(payload) {
72
+ const parsed = schema.safeParse(payload);
73
+ if (!parsed.success) {
74
+ throw new Error(
75
+ `Invalid payload for event "${name}". Schema validation failed.`
76
+ );
77
+ }
78
+ chunkDQSVSGK3_cjs.track(
79
+ name,
80
+ parsed.data,
81
+ schemaMetadata ? { schema: schemaMetadata } : void 0
82
+ );
83
+ }
84
+ };
85
+ }
86
+ function hashSchema(schema) {
87
+ return crypto$1.createHash("sha256").update(stableStringify(schema)).digest("hex");
88
+ }
89
+ function stableStringify(value) {
90
+ if (value === null || value === void 0 || typeof value !== "object") {
91
+ return JSON.stringify(value);
92
+ }
93
+ if (Array.isArray(value)) {
94
+ return "[" + value.map((v) => stableStringify(v)).join(",") + "]";
95
+ }
96
+ const obj = value;
97
+ const body = Object.keys(obj).sort().map((k) => JSON.stringify(k) + ":" + stableStringify(obj[k])).join(",");
98
+ return "{" + body + "}";
99
+ }
60
100
 
61
101
  // src/shutdown.ts
62
102
  async function flush(options) {
63
103
  const timeout = options?.timeout ?? 2e3;
64
104
  const forShutdown = options?.forShutdown ?? false;
65
105
  const doFlush = async () => {
66
- const eventsQueue = chunkLIYNUGML_cjs.getEventQueue();
106
+ const eventsQueue = chunkDQSVSGK3_cjs.getEventQueue();
67
107
  if (eventsQueue) {
68
108
  if (forShutdown) {
69
109
  await eventsQueue.shutdown();
@@ -71,7 +111,7 @@ async function flush(options) {
71
111
  await eventsQueue.flush();
72
112
  }
73
113
  }
74
- const sdk = chunk45B2GD4P_cjs.getSdk();
114
+ const sdk = chunkQJYWKAC5_cjs.getSdk();
75
115
  if (sdk) {
76
116
  try {
77
117
  const sdkAny = sdk;
@@ -105,7 +145,7 @@ async function flush(options) {
105
145
  if (timeoutHandle) {
106
146
  clearTimeout(timeoutHandle);
107
147
  }
108
- const logger = chunk45B2GD4P_cjs.getLogger();
148
+ const logger = chunkQJYWKAC5_cjs.getLogger();
109
149
  logger.error(
110
150
  {
111
151
  err: error instanceof Error ? error : new Error(String(error))
@@ -116,7 +156,7 @@ async function flush(options) {
116
156
  }
117
157
  }
118
158
  async function shutdown() {
119
- const logger = chunk45B2GD4P_cjs.getLogger();
159
+ const logger = chunkQJYWKAC5_cjs.getLogger();
120
160
  let shutdownError = null;
121
161
  try {
122
162
  await flush({ forShutdown: true });
@@ -131,7 +171,7 @@ async function shutdown() {
131
171
  );
132
172
  }
133
173
  try {
134
- const sdk = chunk45B2GD4P_cjs.getSdk();
174
+ const sdk = chunkQJYWKAC5_cjs.getSdk();
135
175
  if (sdk) {
136
176
  await sdk.shutdown();
137
177
  }
@@ -145,14 +185,14 @@ async function shutdown() {
145
185
  logger.error({ err }, "[autotel] SDK shutdown failed");
146
186
  }
147
187
  } finally {
148
- await chunk45B2GD4P_cjs._closeEmbeddedDevtools();
149
- const eventsQueue = chunkLIYNUGML_cjs.getEventQueue();
188
+ await chunkQJYWKAC5_cjs._closeEmbeddedDevtools();
189
+ const eventsQueue = chunkDQSVSGK3_cjs.getEventQueue();
150
190
  if (eventsQueue && typeof eventsQueue.cleanup === "function") {
151
191
  eventsQueue.cleanup();
152
192
  }
153
- chunkZPERWNOP_cjs.resetEvents();
193
+ chunkMQH5OOZK_cjs.resetEvents();
154
194
  chunkTC5ZPWM4_cjs.resetMetrics();
155
- chunkLIYNUGML_cjs.resetEventQueue();
195
+ chunkDQSVSGK3_cjs.resetEventQueue();
156
196
  }
157
197
  if (shutdownError) {
158
198
  throw shutdownError;
@@ -167,7 +207,7 @@ function registerShutdownHooks() {
167
207
  if (shuttingDown) return;
168
208
  shuttingDown = true;
169
209
  if (process.env.NODE_ENV !== "test") {
170
- chunk45B2GD4P_cjs.getLogger().info(
210
+ chunkQJYWKAC5_cjs.getLogger().info(
171
211
  {},
172
212
  `[autotel] Received ${signal}, flushing telemetry...`
173
213
  );
@@ -175,7 +215,7 @@ function registerShutdownHooks() {
175
215
  try {
176
216
  await shutdown();
177
217
  } catch (error) {
178
- chunk45B2GD4P_cjs.getLogger().error(
218
+ chunkQJYWKAC5_cjs.getLogger().error(
179
219
  {
180
220
  err: error instanceof Error ? error : void 0
181
221
  },
@@ -225,7 +265,7 @@ function resolveContext(ctx2) {
225
265
  "[autotel] getRequestLogger() requires an active span or runWithRequestContext(). Wrap your handler with trace() or use runWithRequestContext()."
226
266
  );
227
267
  }
228
- return chunkLIYNUGML_cjs.createTraceContext(span2);
268
+ return chunkDQSVSGK3_cjs.createTraceContext(span2);
229
269
  }
230
270
  function getRequestLogger(ctx2, options) {
231
271
  const activeContext = resolveContext(ctx2);
@@ -233,7 +273,7 @@ function getRequestLogger(ctx2, options) {
233
273
  let emitted = false;
234
274
  let lastSnapshot = null;
235
275
  const addLogEvent = (level, message, fields) => {
236
- const attrs2 = fields ? chunkLIYNUGML_cjs.flattenToAttributes(fields) : void 0;
276
+ const attrs2 = fields ? chunkDQSVSGK3_cjs.flattenToAttributes(fields) : void 0;
237
277
  chunk4P6ZOARG_cjs.emitCorrelatedEvent(activeContext, `log.${level}`, {
238
278
  message,
239
279
  ...attrs2 ?? {}
@@ -252,7 +292,7 @@ function getRequestLogger(ctx2, options) {
252
292
  sealCheck("log.set()", Object.keys(fields));
253
293
  if (emitted) return;
254
294
  mergeInto(contextState, fields);
255
- activeContext.setAttributes(chunkLIYNUGML_cjs.flattenToAttributes(fields));
295
+ activeContext.setAttributes(chunkDQSVSGK3_cjs.flattenToAttributes(fields));
256
296
  },
257
297
  info(message, fields) {
258
298
  const keys = fields ? ["message", ...Object.keys(fields).filter((k) => k !== "requestLogs")] : ["message"];
@@ -261,7 +301,7 @@ function getRequestLogger(ctx2, options) {
261
301
  addLogEvent("info", message, fields);
262
302
  if (fields) {
263
303
  mergeInto(contextState, fields);
264
- activeContext.setAttributes(chunkLIYNUGML_cjs.flattenToAttributes(fields));
304
+ activeContext.setAttributes(chunkDQSVSGK3_cjs.flattenToAttributes(fields));
265
305
  }
266
306
  },
267
307
  warn(message, fields) {
@@ -272,7 +312,7 @@ function getRequestLogger(ctx2, options) {
272
312
  activeContext.setAttribute("autotel.log.level", "warn");
273
313
  if (fields) {
274
314
  mergeInto(contextState, fields);
275
- activeContext.setAttributes(chunkLIYNUGML_cjs.flattenToAttributes(fields));
315
+ activeContext.setAttributes(chunkDQSVSGK3_cjs.flattenToAttributes(fields));
276
316
  }
277
317
  },
278
318
  error(error, fields) {
@@ -280,11 +320,11 @@ function getRequestLogger(ctx2, options) {
280
320
  sealCheck("log.error()", keys);
281
321
  if (emitted) return;
282
322
  const err = typeof error === "string" ? new Error(error) : error;
283
- chunkLIYNUGML_cjs.recordStructuredError(activeContext, err);
323
+ chunkDQSVSGK3_cjs.recordStructuredError(activeContext, err);
284
324
  addLogEvent("error", err.message, fields);
285
325
  if (fields) {
286
326
  mergeInto(contextState, fields);
287
- activeContext.setAttributes(chunkLIYNUGML_cjs.flattenToAttributes(fields));
327
+ activeContext.setAttributes(chunkDQSVSGK3_cjs.flattenToAttributes(fields));
288
328
  }
289
329
  activeContext.setAttribute("autotel.log.level", "error");
290
330
  },
@@ -300,7 +340,7 @@ function getRequestLogger(ctx2, options) {
300
340
  ...contextState,
301
341
  ...overrides ?? {}
302
342
  };
303
- const flattened = chunkLIYNUGML_cjs.flattenToAttributes(mergedContext);
343
+ const flattened = chunkDQSVSGK3_cjs.flattenToAttributes(mergedContext);
304
344
  activeContext.setAttributes(flattened);
305
345
  const snapshot = {
306
346
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
@@ -332,7 +372,7 @@ function getRequestLogger(ctx2, options) {
332
372
  const lifecycle = forkOptions?.lifecycle;
333
373
  void tracer.startActiveSpan(`request.fork:${label}`, (childSpan) => {
334
374
  const childContext = {
335
- ...chunkLIYNUGML_cjs.createTraceContext(childSpan),
375
+ ...chunkDQSVSGK3_cjs.createTraceContext(childSpan),
336
376
  correlationId: crypto.randomUUID()
337
377
  };
338
378
  requestContextStore.run(childContext, () => {
@@ -365,6 +405,86 @@ function getRequestLogger(ctx2, options) {
365
405
  };
366
406
  }
367
407
 
408
+ // src/error-catalog.ts
409
+ var catalogCodeKey = /* @__PURE__ */ Symbol.for("autotel.catalog.code");
410
+ function readCatalogCode(error) {
411
+ if (error === null || typeof error !== "object") return void 0;
412
+ return error[catalogCodeKey];
413
+ }
414
+ function isCatalogError(error) {
415
+ return readCatalogCode(error) !== void 0;
416
+ }
417
+ function getCatalogCode(error) {
418
+ return readCatalogCode(error);
419
+ }
420
+ function defineErrorCatalog(namespace, entries) {
421
+ const catalog = {};
422
+ for (const [key, entry] of Object.entries(entries)) {
423
+ const code = entry.code ?? `${namespace}.${key}`;
424
+ const usesParams = typeof entry.message === "function" || typeof entry.why === "function";
425
+ const builder = ((paramsOrOptions, maybeOptions) => {
426
+ const params = usesParams ? paramsOrOptions : void 0;
427
+ const options = usesParams ? maybeOptions : paramsOrOptions;
428
+ const message = typeof entry.message === "function" ? entry.message(params) : entry.message;
429
+ const why = typeof entry.why === "function" ? entry.why(params) : entry.why;
430
+ const error = chunkDQSVSGK3_cjs.createStructuredError({
431
+ message,
432
+ name: entry.name ?? key,
433
+ code,
434
+ ...entry.status === void 0 ? {} : { status: entry.status },
435
+ ...why === void 0 ? {} : { why },
436
+ ...entry.fix === void 0 ? {} : { fix: entry.fix },
437
+ ...entry.link === void 0 ? {} : { link: entry.link },
438
+ ...options?.cause === void 0 ? {} : { cause: options.cause },
439
+ ...options?.details === void 0 ? {} : { details: options.details },
440
+ ...options?.internal === void 0 ? {} : { internal: options.internal }
441
+ });
442
+ Object.defineProperty(error, catalogCodeKey, {
443
+ value: code,
444
+ enumerable: false,
445
+ writable: false,
446
+ configurable: true
447
+ });
448
+ return error;
449
+ });
450
+ Object.defineProperty(builder, "code", {
451
+ value: code,
452
+ enumerable: true
453
+ });
454
+ Object.defineProperty(builder, "match", {
455
+ value: (error) => readCatalogCode(error) === code,
456
+ enumerable: false
457
+ });
458
+ catalog[key] = builder;
459
+ }
460
+ return Object.freeze(catalog);
461
+ }
462
+ function defineAuditCatalog(namespace, entries) {
463
+ const catalog = {};
464
+ for (const [key, entry] of Object.entries(entries)) {
465
+ const action = entry.action ?? `${namespace}.${key}`;
466
+ const severity = entry.severity ?? "info";
467
+ const descriptor = ((params) => {
468
+ const message = typeof entry.message === "function" ? entry.message(params) : entry.message;
469
+ return Object.freeze({
470
+ action,
471
+ severity,
472
+ ...message === void 0 ? {} : { message }
473
+ });
474
+ });
475
+ Object.defineProperty(descriptor, "action", {
476
+ value: action,
477
+ enumerable: true
478
+ });
479
+ Object.defineProperty(descriptor, "severity", {
480
+ value: severity,
481
+ enumerable: true
482
+ });
483
+ catalog[key] = descriptor;
484
+ }
485
+ return Object.freeze(catalog);
486
+ }
487
+
368
488
  // src/drain-toolkit.ts
369
489
  var DEFAULT_TIMEOUT_MS = 5e3;
370
490
  var DEFAULT_RETRIES = 2;
@@ -601,89 +721,146 @@ function buildStreamFirstTokenAttrs(event) {
601
721
  return attrs2;
602
722
  }
603
723
 
724
+ // src/gen-ai-cost.ts
725
+ var GEN_AI_COST_ATTRIBUTE = "gen_ai.usage.cost.usd";
726
+ var MODEL_PRICING = {
727
+ // OpenAI
728
+ "gpt-4o": { inputPer1M: 2.5, outputPer1M: 10 },
729
+ "gpt-4o-mini": { inputPer1M: 0.15, outputPer1M: 0.6 },
730
+ "gpt-4.1": { inputPer1M: 2, outputPer1M: 8 },
731
+ "gpt-4.1-mini": { inputPer1M: 0.4, outputPer1M: 1.6 },
732
+ "gpt-4.1-nano": { inputPer1M: 0.1, outputPer1M: 0.4 },
733
+ "o3-mini": { inputPer1M: 1.1, outputPer1M: 4.4 },
734
+ // Anthropic Claude
735
+ "claude-opus-4": { inputPer1M: 15, outputPer1M: 75 },
736
+ "claude-sonnet-4": { inputPer1M: 3, outputPer1M: 15 },
737
+ "claude-3-5-sonnet": { inputPer1M: 3, outputPer1M: 15 },
738
+ "claude-3-5-haiku": { inputPer1M: 0.8, outputPer1M: 4 },
739
+ "claude-3-opus": { inputPer1M: 15, outputPer1M: 75 },
740
+ "claude-3-haiku": { inputPer1M: 0.25, outputPer1M: 1.25 },
741
+ // Google Gemini
742
+ "gemini-1.5-pro": { inputPer1M: 1.25, outputPer1M: 5 },
743
+ "gemini-1.5-flash": { inputPer1M: 0.075, outputPer1M: 0.3 },
744
+ "gemini-2.0-flash": { inputPer1M: 0.1, outputPer1M: 0.4 }
745
+ };
746
+ function resolvePricing(table, model) {
747
+ const exact = table[model];
748
+ if (exact) return exact;
749
+ let best;
750
+ let bestLength = 0;
751
+ for (const key of Object.keys(table)) {
752
+ if (model.startsWith(key) && key.length > bestLength) {
753
+ best = table[key];
754
+ bestLength = key.length;
755
+ }
756
+ }
757
+ return best;
758
+ }
759
+ function round(value) {
760
+ return Math.round(value * 1e6) / 1e6;
761
+ }
762
+ function estimateLLMCost(model, usage, options) {
763
+ const table = options?.pricing ? { ...MODEL_PRICING, ...options.pricing } : MODEL_PRICING;
764
+ const price = resolvePricing(table, model);
765
+ if (!price) return void 0;
766
+ const cachedInput = usage.cachedInputTokens ?? 0;
767
+ const billedInput = Math.max(0, (usage.inputTokens ?? 0) - cachedInput);
768
+ const output = usage.outputTokens ?? 0;
769
+ const cachedRate = price.cachedInputPer1M ?? price.inputPer1M;
770
+ const cost = billedInput / 1e6 * price.inputPer1M + cachedInput / 1e6 * cachedRate + output / 1e6 * price.outputPer1M;
771
+ return round(cost);
772
+ }
773
+ function recordLLMCost(ctx2, model, usage, options) {
774
+ const cost = estimateLLMCost(model, usage, options);
775
+ if (cost !== void 0) {
776
+ ctx2.setAttribute(GEN_AI_COST_ATTRIBUTE, cost);
777
+ }
778
+ return cost;
779
+ }
780
+
604
781
  Object.defineProperty(exports, "createDrainPipeline", {
605
782
  enumerable: true,
606
783
  get: function () { return chunk7EQ4G4SI_cjs.createDrainPipeline; }
607
784
  });
608
785
  Object.defineProperty(exports, "getCurrentWorkflowContext", {
609
786
  enumerable: true,
610
- get: function () { return chunkMXO6LXV5_cjs.getCurrentWorkflowContext; }
787
+ get: function () { return chunk4RA6HIYF_cjs.getCurrentWorkflowContext; }
611
788
  });
612
789
  Object.defineProperty(exports, "isInWorkflow", {
613
790
  enumerable: true,
614
- get: function () { return chunkMXO6LXV5_cjs.isInWorkflow; }
791
+ get: function () { return chunk4RA6HIYF_cjs.isInWorkflow; }
615
792
  });
616
793
  Object.defineProperty(exports, "traceStep", {
617
794
  enumerable: true,
618
- get: function () { return chunkMXO6LXV5_cjs.traceStep; }
795
+ get: function () { return chunk4RA6HIYF_cjs.traceStep; }
619
796
  });
620
797
  Object.defineProperty(exports, "traceWorkflow", {
621
798
  enumerable: true,
622
- get: function () { return chunkMXO6LXV5_cjs.traceWorkflow; }
799
+ get: function () { return chunk4RA6HIYF_cjs.traceWorkflow; }
623
800
  });
624
801
  Object.defineProperty(exports, "attrs", {
625
802
  enumerable: true,
626
- get: function () { return chunkDQ2SUROF_cjs.attrs; }
803
+ get: function () { return chunkM3LFHHTN_cjs.attrs; }
627
804
  });
628
805
  Object.defineProperty(exports, "autoRedactPII", {
629
806
  enumerable: true,
630
- get: function () { return chunkDQ2SUROF_cjs.autoRedactPII; }
807
+ get: function () { return chunkM3LFHHTN_cjs.autoRedactPII; }
631
808
  });
632
809
  Object.defineProperty(exports, "dbClient", {
633
810
  enumerable: true,
634
- get: function () { return chunkDQ2SUROF_cjs.dbClient; }
811
+ get: function () { return chunkM3LFHHTN_cjs.dbClient; }
635
812
  });
636
813
  Object.defineProperty(exports, "httpClient", {
637
814
  enumerable: true,
638
- get: function () { return chunkDQ2SUROF_cjs.httpClient; }
815
+ get: function () { return chunkM3LFHHTN_cjs.httpClient; }
639
816
  });
640
817
  Object.defineProperty(exports, "httpServer", {
641
818
  enumerable: true,
642
- get: function () { return chunkDQ2SUROF_cjs.httpServer; }
819
+ get: function () { return chunkM3LFHHTN_cjs.httpServer; }
643
820
  });
644
821
  Object.defineProperty(exports, "identify", {
645
822
  enumerable: true,
646
- get: function () { return chunkDQ2SUROF_cjs.identify; }
823
+ get: function () { return chunkM3LFHHTN_cjs.identify; }
647
824
  });
648
825
  Object.defineProperty(exports, "mergeAttrs", {
649
826
  enumerable: true,
650
- get: function () { return chunkDQ2SUROF_cjs.mergeAttrs; }
827
+ get: function () { return chunkM3LFHHTN_cjs.mergeAttrs; }
651
828
  });
652
829
  Object.defineProperty(exports, "mergeServiceResource", {
653
830
  enumerable: true,
654
- get: function () { return chunkDQ2SUROF_cjs.mergeServiceResource; }
831
+ get: function () { return chunkM3LFHHTN_cjs.mergeServiceResource; }
655
832
  });
656
833
  Object.defineProperty(exports, "request", {
657
834
  enumerable: true,
658
- get: function () { return chunkDQ2SUROF_cjs.request; }
835
+ get: function () { return chunkM3LFHHTN_cjs.request; }
659
836
  });
660
837
  Object.defineProperty(exports, "safeSetAttributes", {
661
838
  enumerable: true,
662
- get: function () { return chunkDQ2SUROF_cjs.safeSetAttributes; }
839
+ get: function () { return chunkM3LFHHTN_cjs.safeSetAttributes; }
663
840
  });
664
841
  Object.defineProperty(exports, "setDevice", {
665
842
  enumerable: true,
666
- get: function () { return chunkDQ2SUROF_cjs.setDevice; }
843
+ get: function () { return chunkM3LFHHTN_cjs.setDevice; }
667
844
  });
668
845
  Object.defineProperty(exports, "setError", {
669
846
  enumerable: true,
670
- get: function () { return chunkDQ2SUROF_cjs.setError; }
847
+ get: function () { return chunkM3LFHHTN_cjs.setError; }
671
848
  });
672
849
  Object.defineProperty(exports, "setException", {
673
850
  enumerable: true,
674
- get: function () { return chunkDQ2SUROF_cjs.setException; }
851
+ get: function () { return chunkM3LFHHTN_cjs.setException; }
675
852
  });
676
853
  Object.defineProperty(exports, "setSession", {
677
854
  enumerable: true,
678
- get: function () { return chunkDQ2SUROF_cjs.setSession; }
855
+ get: function () { return chunkM3LFHHTN_cjs.setSession; }
679
856
  });
680
857
  Object.defineProperty(exports, "setUser", {
681
858
  enumerable: true,
682
- get: function () { return chunkDQ2SUROF_cjs.setUser; }
859
+ get: function () { return chunkM3LFHHTN_cjs.setUser; }
683
860
  });
684
861
  Object.defineProperty(exports, "validateAttribute", {
685
862
  enumerable: true,
686
- get: function () { return chunkDQ2SUROF_cjs.validateAttribute; }
863
+ get: function () { return chunkM3LFHHTN_cjs.validateAttribute; }
687
864
  });
688
865
  Object.defineProperty(exports, "httpRequestHeaderAttribute", {
689
866
  enumerable: true,
@@ -711,11 +888,11 @@ Object.defineProperty(exports, "parseError", {
711
888
  });
712
889
  Object.defineProperty(exports, "traceConsumer", {
713
890
  enumerable: true,
714
- get: function () { return chunk6X2GG65S_cjs.traceConsumer; }
891
+ get: function () { return chunk3MZJ7Y24_cjs.traceConsumer; }
715
892
  });
716
893
  Object.defineProperty(exports, "traceProducer", {
717
894
  enumerable: true,
718
- get: function () { return chunk6X2GG65S_cjs.traceProducer; }
895
+ get: function () { return chunk3MZJ7Y24_cjs.traceProducer; }
719
896
  });
720
897
  Object.defineProperty(exports, "BusinessBaggage", {
721
898
  enumerable: true,
@@ -759,47 +936,47 @@ Object.defineProperty(exports, "getMeter", {
759
936
  });
760
937
  Object.defineProperty(exports, "traceDB", {
761
938
  enumerable: true,
762
- get: function () { return chunkYPQMAE6U_cjs.traceDB; }
939
+ get: function () { return chunkQICFEFD6_cjs.traceDB; }
763
940
  });
764
941
  Object.defineProperty(exports, "traceHTTP", {
765
942
  enumerable: true,
766
- get: function () { return chunkYPQMAE6U_cjs.traceHTTP; }
943
+ get: function () { return chunkQICFEFD6_cjs.traceHTTP; }
767
944
  });
768
945
  Object.defineProperty(exports, "traceLLM", {
769
946
  enumerable: true,
770
- get: function () { return chunkYPQMAE6U_cjs.traceLLM; }
947
+ get: function () { return chunkQICFEFD6_cjs.traceLLM; }
771
948
  });
772
949
  Object.defineProperty(exports, "traceMessaging", {
773
950
  enumerable: true,
774
- get: function () { return chunkYPQMAE6U_cjs.traceMessaging; }
951
+ get: function () { return chunkQICFEFD6_cjs.traceMessaging; }
775
952
  });
776
953
  Object.defineProperty(exports, "ctx", {
777
954
  enumerable: true,
778
- get: function () { return chunkKPDIEVVV_cjs.ctx; }
955
+ get: function () { return chunkU72TGONP_cjs.ctx; }
779
956
  });
780
957
  Object.defineProperty(exports, "instrument", {
781
958
  enumerable: true,
782
- get: function () { return chunkKPDIEVVV_cjs.instrument; }
959
+ get: function () { return chunkU72TGONP_cjs.instrument; }
783
960
  });
784
961
  Object.defineProperty(exports, "markAsImmediate", {
785
962
  enumerable: true,
786
- get: function () { return chunkKPDIEVVV_cjs.markAsImmediate; }
963
+ get: function () { return chunkU72TGONP_cjs.markAsImmediate; }
787
964
  });
788
965
  Object.defineProperty(exports, "span", {
789
966
  enumerable: true,
790
- get: function () { return chunkKPDIEVVV_cjs.span; }
967
+ get: function () { return chunkU72TGONP_cjs.span; }
791
968
  });
792
969
  Object.defineProperty(exports, "withBaggage", {
793
970
  enumerable: true,
794
- get: function () { return chunkKPDIEVVV_cjs.withBaggage; }
971
+ get: function () { return chunkU72TGONP_cjs.withBaggage; }
795
972
  });
796
973
  Object.defineProperty(exports, "withNewContext", {
797
974
  enumerable: true,
798
- get: function () { return chunkKPDIEVVV_cjs.withNewContext; }
975
+ get: function () { return chunkU72TGONP_cjs.withNewContext; }
799
976
  });
800
977
  Object.defineProperty(exports, "withTracing", {
801
978
  enumerable: true,
802
- get: function () { return chunkKPDIEVVV_cjs.withTracing; }
979
+ get: function () { return chunkU72TGONP_cjs.withTracing; }
803
980
  });
804
981
  Object.defineProperty(exports, "createDeterministicTraceId", {
805
982
  enumerable: true,
@@ -847,15 +1024,15 @@ Object.defineProperty(exports, "runWithSpan", {
847
1024
  });
848
1025
  Object.defineProperty(exports, "Event", {
849
1026
  enumerable: true,
850
- get: function () { return chunkZPERWNOP_cjs.Event; }
1027
+ get: function () { return chunkMQH5OOZK_cjs.Event; }
851
1028
  });
852
1029
  Object.defineProperty(exports, "getEvents", {
853
1030
  enumerable: true,
854
- get: function () { return chunkZPERWNOP_cjs.getEvents; }
1031
+ get: function () { return chunkMQH5OOZK_cjs.getEvents; }
855
1032
  });
856
1033
  Object.defineProperty(exports, "resetEvents", {
857
1034
  enumerable: true,
858
- get: function () { return chunkZPERWNOP_cjs.resetEvents; }
1035
+ get: function () { return chunkMQH5OOZK_cjs.resetEvents; }
859
1036
  });
860
1037
  Object.defineProperty(exports, "getOperationContext", {
861
1038
  enumerable: true,
@@ -867,87 +1044,87 @@ Object.defineProperty(exports, "runInOperationContext", {
867
1044
  });
868
1045
  Object.defineProperty(exports, "CORRELATION_ID_BAGGAGE_KEY", {
869
1046
  enumerable: true,
870
- get: function () { return chunkLIYNUGML_cjs.CORRELATION_ID_BAGGAGE_KEY; }
1047
+ get: function () { return chunkDQSVSGK3_cjs.CORRELATION_ID_BAGGAGE_KEY; }
871
1048
  });
872
1049
  Object.defineProperty(exports, "createStructuredError", {
873
1050
  enumerable: true,
874
- get: function () { return chunkLIYNUGML_cjs.createStructuredError; }
1051
+ get: function () { return chunkDQSVSGK3_cjs.createStructuredError; }
875
1052
  });
876
1053
  Object.defineProperty(exports, "defineBaggageSchema", {
877
1054
  enumerable: true,
878
- get: function () { return chunkLIYNUGML_cjs.defineBaggageSchema; }
1055
+ get: function () { return chunkDQSVSGK3_cjs.defineBaggageSchema; }
879
1056
  });
880
1057
  Object.defineProperty(exports, "flattenToAttributes", {
881
1058
  enumerable: true,
882
- get: function () { return chunkLIYNUGML_cjs.flattenToAttributes; }
1059
+ get: function () { return chunkDQSVSGK3_cjs.flattenToAttributes; }
883
1060
  });
884
1061
  Object.defineProperty(exports, "generateCorrelationId", {
885
1062
  enumerable: true,
886
- get: function () { return chunkLIYNUGML_cjs.generateCorrelationId; }
1063
+ get: function () { return chunkDQSVSGK3_cjs.generateCorrelationId; }
887
1064
  });
888
1065
  Object.defineProperty(exports, "getCorrelationId", {
889
1066
  enumerable: true,
890
- get: function () { return chunkLIYNUGML_cjs.getCorrelationId; }
1067
+ get: function () { return chunkDQSVSGK3_cjs.getCorrelationId; }
891
1068
  });
892
1069
  Object.defineProperty(exports, "getEventQueue", {
893
1070
  enumerable: true,
894
- get: function () { return chunkLIYNUGML_cjs.getEventQueue; }
1071
+ get: function () { return chunkDQSVSGK3_cjs.getEventQueue; }
895
1072
  });
896
1073
  Object.defineProperty(exports, "getOrCreateCorrelationId", {
897
1074
  enumerable: true,
898
- get: function () { return chunkLIYNUGML_cjs.getOrCreateCorrelationId; }
1075
+ get: function () { return chunkDQSVSGK3_cjs.getOrCreateCorrelationId; }
899
1076
  });
900
1077
  Object.defineProperty(exports, "getStructuredErrorAttributes", {
901
1078
  enumerable: true,
902
- get: function () { return chunkLIYNUGML_cjs.getStructuredErrorAttributes; }
1079
+ get: function () { return chunkDQSVSGK3_cjs.getStructuredErrorAttributes; }
903
1080
  });
904
1081
  Object.defineProperty(exports, "recordStructuredError", {
905
1082
  enumerable: true,
906
- get: function () { return chunkLIYNUGML_cjs.recordStructuredError; }
1083
+ get: function () { return chunkDQSVSGK3_cjs.recordStructuredError; }
907
1084
  });
908
1085
  Object.defineProperty(exports, "runWithCorrelationId", {
909
1086
  enumerable: true,
910
- get: function () { return chunkLIYNUGML_cjs.runWithCorrelationId; }
1087
+ get: function () { return chunkDQSVSGK3_cjs.runWithCorrelationId; }
911
1088
  });
912
1089
  Object.defineProperty(exports, "setCorrelationId", {
913
1090
  enumerable: true,
914
- get: function () { return chunkLIYNUGML_cjs.setCorrelationId; }
1091
+ get: function () { return chunkDQSVSGK3_cjs.setCorrelationId; }
915
1092
  });
916
1093
  Object.defineProperty(exports, "setCorrelationIdInBaggage", {
917
1094
  enumerable: true,
918
- get: function () { return chunkLIYNUGML_cjs.setCorrelationIdInBaggage; }
1095
+ get: function () { return chunkDQSVSGK3_cjs.setCorrelationIdInBaggage; }
919
1096
  });
920
1097
  Object.defineProperty(exports, "structuredErrorToJSON", {
921
1098
  enumerable: true,
922
- get: function () { return chunkLIYNUGML_cjs.structuredErrorToJSON; }
1099
+ get: function () { return chunkDQSVSGK3_cjs.structuredErrorToJSON; }
923
1100
  });
924
1101
  Object.defineProperty(exports, "toAttributeValue", {
925
1102
  enumerable: true,
926
- get: function () { return chunkLIYNUGML_cjs.toAttributeValue; }
1103
+ get: function () { return chunkDQSVSGK3_cjs.toAttributeValue; }
927
1104
  });
928
1105
  Object.defineProperty(exports, "track", {
929
1106
  enumerable: true,
930
- get: function () { return chunkLIYNUGML_cjs.track; }
1107
+ get: function () { return chunkDQSVSGK3_cjs.track; }
931
1108
  });
932
1109
  Object.defineProperty(exports, "BaggageSpanProcessor", {
933
1110
  enumerable: true,
934
- get: function () { return chunk45B2GD4P_cjs.BaggageSpanProcessor; }
1111
+ get: function () { return chunkQJYWKAC5_cjs.BaggageSpanProcessor; }
935
1112
  });
936
1113
  Object.defineProperty(exports, "createStringRedactor", {
937
1114
  enumerable: true,
938
- get: function () { return chunk45B2GD4P_cjs.createStringRedactor; }
1115
+ get: function () { return chunkQJYWKAC5_cjs.createStringRedactor; }
939
1116
  });
940
1117
  Object.defineProperty(exports, "init", {
941
1118
  enumerable: true,
942
- get: function () { return chunk45B2GD4P_cjs.init; }
1119
+ get: function () { return chunkQJYWKAC5_cjs.init; }
943
1120
  });
944
1121
  Object.defineProperty(exports, "isLoggerLocked", {
945
1122
  enumerable: true,
946
- get: function () { return chunk45B2GD4P_cjs.isLoggerLocked; }
1123
+ get: function () { return chunkQJYWKAC5_cjs.isLoggerLocked; }
947
1124
  });
948
1125
  Object.defineProperty(exports, "lockLogger", {
949
1126
  enumerable: true,
950
- get: function () { return chunk45B2GD4P_cjs.lockLogger; }
1127
+ get: function () { return chunkQJYWKAC5_cjs.lockLogger; }
951
1128
  });
952
1129
  Object.defineProperty(exports, "FilteringSpanProcessor", {
953
1130
  enumerable: true,
@@ -967,31 +1144,31 @@ Object.defineProperty(exports, "SpanNameNormalizingProcessor", {
967
1144
  });
968
1145
  Object.defineProperty(exports, "AttributeRedactingProcessor", {
969
1146
  enumerable: true,
970
- get: function () { return chunkNXLRY2CE_cjs.AttributeRedactingProcessor; }
1147
+ get: function () { return chunkNEIB3TLD_cjs.AttributeRedactingProcessor; }
971
1148
  });
972
1149
  Object.defineProperty(exports, "REDACTOR_PATTERNS", {
973
1150
  enumerable: true,
974
- get: function () { return chunkNXLRY2CE_cjs.REDACTOR_PATTERNS; }
1151
+ get: function () { return chunkNEIB3TLD_cjs.REDACTOR_PATTERNS; }
975
1152
  });
976
1153
  Object.defineProperty(exports, "REDACTOR_PRESETS", {
977
1154
  enumerable: true,
978
- get: function () { return chunkNXLRY2CE_cjs.REDACTOR_PRESETS; }
1155
+ get: function () { return chunkNEIB3TLD_cjs.REDACTOR_PRESETS; }
979
1156
  });
980
1157
  Object.defineProperty(exports, "builtinPatterns", {
981
1158
  enumerable: true,
982
- get: function () { return chunkNXLRY2CE_cjs.builtinPatterns; }
1159
+ get: function () { return chunkNEIB3TLD_cjs.builtinPatterns; }
983
1160
  });
984
1161
  Object.defineProperty(exports, "createAttributeRedactor", {
985
1162
  enumerable: true,
986
- get: function () { return chunkNXLRY2CE_cjs.createAttributeRedactor; }
1163
+ get: function () { return chunkNEIB3TLD_cjs.createAttributeRedactor; }
987
1164
  });
988
1165
  Object.defineProperty(exports, "createRedactedSpan", {
989
1166
  enumerable: true,
990
- get: function () { return chunkNXLRY2CE_cjs.createRedactedSpan; }
1167
+ get: function () { return chunkNEIB3TLD_cjs.createRedactedSpan; }
991
1168
  });
992
1169
  Object.defineProperty(exports, "normalizeAttributeRedactorConfig", {
993
1170
  enumerable: true,
994
- get: function () { return chunkNXLRY2CE_cjs.normalizeAttributeRedactorConfig; }
1171
+ get: function () { return chunkNEIB3TLD_cjs.normalizeAttributeRedactorConfig; }
995
1172
  });
996
1173
  Object.defineProperty(exports, "formatDuration", {
997
1174
  enumerable: true,
@@ -1077,16 +1254,25 @@ Object.defineProperty(exports, "propagation", {
1077
1254
  enumerable: true,
1078
1255
  get: function () { return api.propagation; }
1079
1256
  });
1257
+ exports.GEN_AI_COST_ATTRIBUTE = GEN_AI_COST_ATTRIBUTE;
1080
1258
  exports.GEN_AI_COST_USD_BUCKETS = GEN_AI_COST_USD_BUCKETS;
1081
1259
  exports.GEN_AI_DURATION_BUCKETS_SECONDS = GEN_AI_DURATION_BUCKETS_SECONDS;
1082
1260
  exports.GEN_AI_TOKEN_USAGE_BUCKETS = GEN_AI_TOKEN_USAGE_BUCKETS;
1261
+ exports.MODEL_PRICING = MODEL_PRICING;
1262
+ exports.defineAuditCatalog = defineAuditCatalog;
1083
1263
  exports.defineDrain = defineDrain;
1084
1264
  exports.defineEnricher = defineEnricher;
1265
+ exports.defineErrorCatalog = defineErrorCatalog;
1266
+ exports.defineEvent = defineEvent;
1085
1267
  exports.defineHttpDrain = defineHttpDrain;
1268
+ exports.estimateLLMCost = estimateLLMCost;
1086
1269
  exports.flush = flush;
1087
1270
  exports.genAiMetricViews = genAiMetricViews;
1271
+ exports.getCatalogCode = getCatalogCode;
1088
1272
  exports.getRequestLogger = getRequestLogger;
1273
+ exports.isCatalogError = isCatalogError;
1089
1274
  exports.llmHistogramAdvice = llmHistogramAdvice;
1275
+ exports.recordLLMCost = recordLLMCost;
1090
1276
  exports.recordPromptSent = recordPromptSent;
1091
1277
  exports.recordResponseReceived = recordResponseReceived;
1092
1278
  exports.recordRetry = recordRetry;