autotel 2.24.1 → 2.25.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 (58) hide show
  1. package/dist/auto.cjs +2 -2
  2. package/dist/auto.js +1 -1
  3. package/dist/{chunk-CSG2D3BZ.cjs → chunk-73SCHI7V.cjs} +7 -7
  4. package/dist/{chunk-CSG2D3BZ.cjs.map → chunk-73SCHI7V.cjs.map} +1 -1
  5. package/dist/{chunk-47KW5CV7.js → chunk-7RV6L24E.js} +4 -3
  6. package/dist/chunk-7RV6L24E.js.map +1 -0
  7. package/dist/{chunk-AXNPD6XW.cjs → chunk-7ZYUFMWU.cjs} +26 -26
  8. package/dist/{chunk-AXNPD6XW.cjs.map → chunk-7ZYUFMWU.cjs.map} +1 -1
  9. package/dist/{chunk-GSZJOYFF.js → chunk-BKIAH2YS.js} +3 -3
  10. package/dist/{chunk-GSZJOYFF.js.map → chunk-BKIAH2YS.js.map} +1 -1
  11. package/dist/{chunk-CLR5RQW4.cjs → chunk-DBUNRUDB.cjs} +5 -5
  12. package/dist/{chunk-CLR5RQW4.cjs.map → chunk-DBUNRUDB.cjs.map} +1 -1
  13. package/dist/{chunk-PDRIJURL.cjs → chunk-GIND746I.cjs} +4 -3
  14. package/dist/chunk-GIND746I.cjs.map +1 -0
  15. package/dist/{chunk-CZR7PJUZ.cjs → chunk-HCFBEOBM.cjs} +13 -13
  16. package/dist/{chunk-CZR7PJUZ.cjs.map → chunk-HCFBEOBM.cjs.map} +1 -1
  17. package/dist/{chunk-2D74YR4Z.js → chunk-JDV3LYOI.js} +3 -3
  18. package/dist/{chunk-2D74YR4Z.js.map → chunk-JDV3LYOI.js.map} +1 -1
  19. package/dist/{chunk-ZJTBAUXG.js → chunk-JZKMXKJX.js} +3 -3
  20. package/dist/{chunk-ZJTBAUXG.js.map → chunk-JZKMXKJX.js.map} +1 -1
  21. package/dist/{chunk-W6U2BUHU.cjs → chunk-LRFG6HRL.cjs} +5 -5
  22. package/dist/{chunk-W6U2BUHU.cjs.map → chunk-LRFG6HRL.cjs.map} +1 -1
  23. package/dist/{chunk-Z3BQYTZE.js → chunk-NYTCPK4J.js} +3 -3
  24. package/dist/{chunk-Z3BQYTZE.js.map → chunk-NYTCPK4J.js.map} +1 -1
  25. package/dist/{chunk-IJMW6CTV.js → chunk-P5YCN2Z3.js} +3 -3
  26. package/dist/{chunk-IJMW6CTV.js.map → chunk-P5YCN2Z3.js.map} +1 -1
  27. package/dist/decorators.cjs +2 -2
  28. package/dist/decorators.js +2 -2
  29. package/dist/event.cjs +5 -5
  30. package/dist/event.js +2 -2
  31. package/dist/functional.cjs +9 -9
  32. package/dist/functional.js +2 -2
  33. package/dist/index.cjs +41 -41
  34. package/dist/index.js +9 -9
  35. package/dist/instrumentation.cjs +8 -8
  36. package/dist/instrumentation.js +1 -1
  37. package/dist/messaging.cjs +6 -6
  38. package/dist/messaging.js +3 -3
  39. package/dist/semantic-helpers.cjs +7 -7
  40. package/dist/semantic-helpers.js +3 -3
  41. package/dist/test-span-collector.cjs +1 -0
  42. package/dist/test-span-collector.cjs.map +1 -1
  43. package/dist/test-span-collector.d.cts +2 -1
  44. package/dist/test-span-collector.d.ts +2 -1
  45. package/dist/test-span-collector.js +1 -1
  46. package/dist/test-span-collector.js.map +1 -1
  47. package/dist/webhook.cjs +3 -3
  48. package/dist/webhook.js +2 -2
  49. package/dist/workflow-distributed.cjs +4 -4
  50. package/dist/workflow-distributed.js +2 -2
  51. package/dist/workflow.cjs +7 -7
  52. package/dist/workflow.js +3 -3
  53. package/package.json +5 -5
  54. package/src/init.openllmetry.test.ts +98 -193
  55. package/src/init.ts +18 -1
  56. package/src/test-span-collector.ts +1 -1
  57. package/dist/chunk-47KW5CV7.js.map +0 -1
  58. package/dist/chunk-PDRIJURL.cjs.map +0 -1
@@ -1,9 +1,9 @@
1
- export { ctx, instrument, span, trace, withBaggage, withNewContext, withTracing } from './chunk-2D74YR4Z.js';
1
+ export { ctx, instrument, span, trace, withBaggage, withNewContext, withTracing } from './chunk-JDV3LYOI.js';
2
2
  import './chunk-SR35DG5A.js';
3
3
  import './chunk-B3ZHLLMP.js';
4
4
  import './chunk-WD4RP6IV.js';
5
5
  import './chunk-USSL3D6L.js';
6
- import './chunk-47KW5CV7.js';
6
+ import './chunk-7RV6L24E.js';
7
7
  import './chunk-YTGF4L2C.js';
8
8
  import './chunk-X4RMFFMR.js';
9
9
  import './chunk-WGWSHJ2N.js';
package/dist/index.cjs CHANGED
@@ -1,26 +1,26 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk7EQ4G4SI_cjs = require('./chunk-7EQ4G4SI.cjs');
4
- var chunkCLR5RQW4_cjs = require('./chunk-CLR5RQW4.cjs');
4
+ var chunkDBUNRUDB_cjs = require('./chunk-DBUNRUDB.cjs');
5
5
  var chunkXRBP4RYL_cjs = require('./chunk-XRBP4RYL.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 chunkW6U2BUHU_cjs = require('./chunk-W6U2BUHU.cjs');
9
+ var chunkLRFG6HRL_cjs = require('./chunk-LRFG6HRL.cjs');
10
10
  var chunkINJD3G4K_cjs = require('./chunk-INJD3G4K.cjs');
11
11
  var chunkTC5ZPWM4_cjs = require('./chunk-TC5ZPWM4.cjs');
12
12
  require('./chunk-YTXEZ4SD.cjs');
13
13
  var chunkWJH6IYU2_cjs = require('./chunk-WJH6IYU2.cjs');
14
- var chunkCSG2D3BZ_cjs = require('./chunk-CSG2D3BZ.cjs');
15
- var chunkAXNPD6XW_cjs = require('./chunk-AXNPD6XW.cjs');
14
+ var chunk73SCHI7V_cjs = require('./chunk-73SCHI7V.cjs');
15
+ var chunk7ZYUFMWU_cjs = require('./chunk-7ZYUFMWU.cjs');
16
16
  var chunkW4EUTSB2_cjs = require('./chunk-W4EUTSB2.cjs');
17
17
  var chunkGML3FBOT_cjs = require('./chunk-GML3FBOT.cjs');
18
- var chunkCZR7PJUZ_cjs = require('./chunk-CZR7PJUZ.cjs');
18
+ var chunkHCFBEOBM_cjs = require('./chunk-HCFBEOBM.cjs');
19
19
  require('./chunk-NZ72VDNY.cjs');
20
20
  require('./chunk-UY3UYPBZ.cjs');
21
21
  var chunkD5LMF53P_cjs = require('./chunk-D5LMF53P.cjs');
22
22
  var chunkXRKAL7WJ_cjs = require('./chunk-XRKAL7WJ.cjs');
23
- var chunkPDRIJURL_cjs = require('./chunk-PDRIJURL.cjs');
23
+ var chunkGIND746I_cjs = require('./chunk-GIND746I.cjs');
24
24
  require('./chunk-6YIDHH2S.cjs');
25
25
  require('./chunk-GVLK7YUU.cjs');
26
26
  var chunkZNMBW67B_cjs = require('./chunk-ZNMBW67B.cjs');
@@ -42,7 +42,7 @@ async function flush(options) {
42
42
  const timeout = options?.timeout ?? 2e3;
43
43
  const forShutdown = options?.forShutdown ?? false;
44
44
  const doFlush = async () => {
45
- const eventsQueue = chunkAXNPD6XW_cjs.getEventQueue();
45
+ const eventsQueue = chunk7ZYUFMWU_cjs.getEventQueue();
46
46
  if (eventsQueue) {
47
47
  if (forShutdown) {
48
48
  await eventsQueue.shutdown();
@@ -50,7 +50,7 @@ async function flush(options) {
50
50
  await eventsQueue.flush();
51
51
  }
52
52
  }
53
- const sdk = chunkPDRIJURL_cjs.getSdk();
53
+ const sdk = chunkGIND746I_cjs.getSdk();
54
54
  if (sdk) {
55
55
  try {
56
56
  const sdkAny = sdk;
@@ -84,7 +84,7 @@ async function flush(options) {
84
84
  if (timeoutHandle) {
85
85
  clearTimeout(timeoutHandle);
86
86
  }
87
- const logger = chunkPDRIJURL_cjs.getLogger();
87
+ const logger = chunkGIND746I_cjs.getLogger();
88
88
  logger.error(
89
89
  {
90
90
  err: error instanceof Error ? error : new Error(String(error))
@@ -95,7 +95,7 @@ async function flush(options) {
95
95
  }
96
96
  }
97
97
  async function shutdown() {
98
- const logger = chunkPDRIJURL_cjs.getLogger();
98
+ const logger = chunkGIND746I_cjs.getLogger();
99
99
  let shutdownError = null;
100
100
  try {
101
101
  await flush({ forShutdown: true });
@@ -110,7 +110,7 @@ async function shutdown() {
110
110
  );
111
111
  }
112
112
  try {
113
- const sdk = chunkPDRIJURL_cjs.getSdk();
113
+ const sdk = chunkGIND746I_cjs.getSdk();
114
114
  if (sdk) {
115
115
  await sdk.shutdown();
116
116
  }
@@ -124,13 +124,13 @@ async function shutdown() {
124
124
  logger.error({ err }, "[autotel] SDK shutdown failed");
125
125
  }
126
126
  } finally {
127
- const eventsQueue = chunkAXNPD6XW_cjs.getEventQueue();
127
+ const eventsQueue = chunk7ZYUFMWU_cjs.getEventQueue();
128
128
  if (eventsQueue && typeof eventsQueue.cleanup === "function") {
129
129
  eventsQueue.cleanup();
130
130
  }
131
- chunkCZR7PJUZ_cjs.resetEvents();
131
+ chunkHCFBEOBM_cjs.resetEvents();
132
132
  chunkTC5ZPWM4_cjs.resetMetrics();
133
- chunkAXNPD6XW_cjs.resetEventQueue();
133
+ chunk7ZYUFMWU_cjs.resetEventQueue();
134
134
  }
135
135
  if (shutdownError) {
136
136
  throw shutdownError;
@@ -145,7 +145,7 @@ function registerShutdownHooks() {
145
145
  if (shuttingDown) return;
146
146
  shuttingDown = true;
147
147
  if (process.env.NODE_ENV !== "test") {
148
- chunkPDRIJURL_cjs.getLogger().info(
148
+ chunkGIND746I_cjs.getLogger().info(
149
149
  {},
150
150
  `[autotel] Received ${signal}, flushing telemetry...`
151
151
  );
@@ -153,7 +153,7 @@ function registerShutdownHooks() {
153
153
  try {
154
154
  await shutdown();
155
155
  } catch (error) {
156
- chunkPDRIJURL_cjs.getLogger().error(
156
+ chunkGIND746I_cjs.getLogger().error(
157
157
  {
158
158
  err: error instanceof Error ? error : void 0
159
159
  },
@@ -384,19 +384,19 @@ Object.defineProperty(exports, "createDrainPipeline", {
384
384
  });
385
385
  Object.defineProperty(exports, "getCurrentWorkflowContext", {
386
386
  enumerable: true,
387
- get: function () { return chunkCLR5RQW4_cjs.getCurrentWorkflowContext; }
387
+ get: function () { return chunkDBUNRUDB_cjs.getCurrentWorkflowContext; }
388
388
  });
389
389
  Object.defineProperty(exports, "isInWorkflow", {
390
390
  enumerable: true,
391
- get: function () { return chunkCLR5RQW4_cjs.isInWorkflow; }
391
+ get: function () { return chunkDBUNRUDB_cjs.isInWorkflow; }
392
392
  });
393
393
  Object.defineProperty(exports, "traceStep", {
394
394
  enumerable: true,
395
- get: function () { return chunkCLR5RQW4_cjs.traceStep; }
395
+ get: function () { return chunkDBUNRUDB_cjs.traceStep; }
396
396
  });
397
397
  Object.defineProperty(exports, "traceWorkflow", {
398
398
  enumerable: true,
399
- get: function () { return chunkCLR5RQW4_cjs.traceWorkflow; }
399
+ get: function () { return chunkDBUNRUDB_cjs.traceWorkflow; }
400
400
  });
401
401
  Object.defineProperty(exports, "attrs", {
402
402
  enumerable: true,
@@ -488,11 +488,11 @@ Object.defineProperty(exports, "parseError", {
488
488
  });
489
489
  Object.defineProperty(exports, "traceConsumer", {
490
490
  enumerable: true,
491
- get: function () { return chunkW6U2BUHU_cjs.traceConsumer; }
491
+ get: function () { return chunkLRFG6HRL_cjs.traceConsumer; }
492
492
  });
493
493
  Object.defineProperty(exports, "traceProducer", {
494
494
  enumerable: true,
495
- get: function () { return chunkW6U2BUHU_cjs.traceProducer; }
495
+ get: function () { return chunkLRFG6HRL_cjs.traceProducer; }
496
496
  });
497
497
  Object.defineProperty(exports, "BusinessBaggage", {
498
498
  enumerable: true,
@@ -536,55 +536,55 @@ Object.defineProperty(exports, "getMeter", {
536
536
  });
537
537
  Object.defineProperty(exports, "traceDB", {
538
538
  enumerable: true,
539
- get: function () { return chunkCSG2D3BZ_cjs.traceDB; }
539
+ get: function () { return chunk73SCHI7V_cjs.traceDB; }
540
540
  });
541
541
  Object.defineProperty(exports, "traceHTTP", {
542
542
  enumerable: true,
543
- get: function () { return chunkCSG2D3BZ_cjs.traceHTTP; }
543
+ get: function () { return chunk73SCHI7V_cjs.traceHTTP; }
544
544
  });
545
545
  Object.defineProperty(exports, "traceLLM", {
546
546
  enumerable: true,
547
- get: function () { return chunkCSG2D3BZ_cjs.traceLLM; }
547
+ get: function () { return chunk73SCHI7V_cjs.traceLLM; }
548
548
  });
549
549
  Object.defineProperty(exports, "traceMessaging", {
550
550
  enumerable: true,
551
- get: function () { return chunkCSG2D3BZ_cjs.traceMessaging; }
551
+ get: function () { return chunk73SCHI7V_cjs.traceMessaging; }
552
552
  });
553
553
  Object.defineProperty(exports, "ctx", {
554
554
  enumerable: true,
555
- get: function () { return chunkAXNPD6XW_cjs.ctx; }
555
+ get: function () { return chunk7ZYUFMWU_cjs.ctx; }
556
556
  });
557
557
  Object.defineProperty(exports, "getEventQueue", {
558
558
  enumerable: true,
559
- get: function () { return chunkAXNPD6XW_cjs.getEventQueue; }
559
+ get: function () { return chunk7ZYUFMWU_cjs.getEventQueue; }
560
560
  });
561
561
  Object.defineProperty(exports, "instrument", {
562
562
  enumerable: true,
563
- get: function () { return chunkAXNPD6XW_cjs.instrument; }
563
+ get: function () { return chunk7ZYUFMWU_cjs.instrument; }
564
564
  });
565
565
  Object.defineProperty(exports, "span", {
566
566
  enumerable: true,
567
- get: function () { return chunkAXNPD6XW_cjs.span; }
567
+ get: function () { return chunk7ZYUFMWU_cjs.span; }
568
568
  });
569
569
  Object.defineProperty(exports, "trace", {
570
570
  enumerable: true,
571
- get: function () { return chunkAXNPD6XW_cjs.trace; }
571
+ get: function () { return chunk7ZYUFMWU_cjs.trace; }
572
572
  });
573
573
  Object.defineProperty(exports, "track", {
574
574
  enumerable: true,
575
- get: function () { return chunkAXNPD6XW_cjs.track; }
575
+ get: function () { return chunk7ZYUFMWU_cjs.track; }
576
576
  });
577
577
  Object.defineProperty(exports, "withBaggage", {
578
578
  enumerable: true,
579
- get: function () { return chunkAXNPD6XW_cjs.withBaggage; }
579
+ get: function () { return chunk7ZYUFMWU_cjs.withBaggage; }
580
580
  });
581
581
  Object.defineProperty(exports, "withNewContext", {
582
582
  enumerable: true,
583
- get: function () { return chunkAXNPD6XW_cjs.withNewContext; }
583
+ get: function () { return chunk7ZYUFMWU_cjs.withNewContext; }
584
584
  });
585
585
  Object.defineProperty(exports, "withTracing", {
586
586
  enumerable: true,
587
- get: function () { return chunkAXNPD6XW_cjs.withTracing; }
587
+ get: function () { return chunk7ZYUFMWU_cjs.withTracing; }
588
588
  });
589
589
  Object.defineProperty(exports, "defineBaggageSchema", {
590
590
  enumerable: true,
@@ -636,15 +636,15 @@ Object.defineProperty(exports, "runWithSpan", {
636
636
  });
637
637
  Object.defineProperty(exports, "Event", {
638
638
  enumerable: true,
639
- get: function () { return chunkCZR7PJUZ_cjs.Event; }
639
+ get: function () { return chunkHCFBEOBM_cjs.Event; }
640
640
  });
641
641
  Object.defineProperty(exports, "getEvents", {
642
642
  enumerable: true,
643
- get: function () { return chunkCZR7PJUZ_cjs.getEvents; }
643
+ get: function () { return chunkHCFBEOBM_cjs.getEvents; }
644
644
  });
645
645
  Object.defineProperty(exports, "resetEvents", {
646
646
  enumerable: true,
647
- get: function () { return chunkCZR7PJUZ_cjs.resetEvents; }
647
+ get: function () { return chunkHCFBEOBM_cjs.resetEvents; }
648
648
  });
649
649
  Object.defineProperty(exports, "getOperationContext", {
650
650
  enumerable: true,
@@ -684,15 +684,15 @@ Object.defineProperty(exports, "setCorrelationIdInBaggage", {
684
684
  });
685
685
  Object.defineProperty(exports, "BaggageSpanProcessor", {
686
686
  enumerable: true,
687
- get: function () { return chunkPDRIJURL_cjs.BaggageSpanProcessor; }
687
+ get: function () { return chunkGIND746I_cjs.BaggageSpanProcessor; }
688
688
  });
689
689
  Object.defineProperty(exports, "createStringRedactor", {
690
690
  enumerable: true,
691
- get: function () { return chunkPDRIJURL_cjs.createStringRedactor; }
691
+ get: function () { return chunkGIND746I_cjs.createStringRedactor; }
692
692
  });
693
693
  Object.defineProperty(exports, "init", {
694
694
  enumerable: true,
695
- get: function () { return chunkPDRIJURL_cjs.init; }
695
+ get: function () { return chunkGIND746I_cjs.init; }
696
696
  });
697
697
  Object.defineProperty(exports, "FilteringSpanProcessor", {
698
698
  enumerable: true,
package/dist/index.js CHANGED
@@ -1,29 +1,29 @@
1
1
  export { createDrainPipeline } from './chunk-KFOHQK7X.js';
2
- export { getCurrentWorkflowContext, isInWorkflow, traceStep, traceWorkflow } from './chunk-IJMW6CTV.js';
2
+ export { getCurrentWorkflowContext, isInWorkflow, traceStep, traceWorkflow } from './chunk-P5YCN2Z3.js';
3
3
  export { attrs, autoRedactPII, dbClient, httpClient, httpServer, identify, mergeAttrs, mergeServiceResource, request, safeSetAttributes, setDevice, setError, setException, setSession, setUser, validateAttribute } from './chunk-M4US3P4K.js';
4
4
  export { httpRequestHeaderAttribute, httpResponseHeaderAttribute } from './chunk-7552UTQW.js';
5
5
  export { HTTPAttributes, ServiceAttributes, URLAttributes } from './chunk-4A53YIAX.js';
6
6
  export { parseError } from './chunk-J7VGRIAJ.js';
7
- export { traceConsumer, traceProducer } from './chunk-ZJTBAUXG.js';
7
+ export { traceConsumer, traceProducer } from './chunk-JZKMXKJX.js';
8
8
  export { BusinessBaggage, createSafeBaggageSchema } from './chunk-4IFSYQVX.js';
9
9
  import { resetMetrics } from './chunk-7SAWIN74.js';
10
10
  export { Metric, getMetrics, resetMetrics } from './chunk-7SAWIN74.js';
11
11
  import './chunk-5ZN622AO.js';
12
12
  export { createCounter, createHistogram, createObservableGauge, createUpDownCounter, getMeter } from './chunk-TQ5UWA7S.js';
13
- export { traceDB, traceHTTP, traceLLM, traceMessaging } from './chunk-GSZJOYFF.js';
14
- import { getEventQueue, resetEventQueue } from './chunk-2D74YR4Z.js';
15
- export { ctx, getEventQueue, instrument, span, trace, track, withBaggage, withNewContext, withTracing } from './chunk-2D74YR4Z.js';
13
+ export { traceDB, traceHTTP, traceLLM, traceMessaging } from './chunk-BKIAH2YS.js';
14
+ import { getEventQueue, resetEventQueue } from './chunk-JDV3LYOI.js';
15
+ export { ctx, getEventQueue, instrument, span, trace, track, withBaggage, withNewContext, withTracing } from './chunk-JDV3LYOI.js';
16
16
  import { createTraceContext } from './chunk-SR35DG5A.js';
17
17
  export { defineBaggageSchema } from './chunk-SR35DG5A.js';
18
18
  export { createDeterministicTraceId, enrichWithTraceContext, finalizeSpan, flattenMetadata, getActiveContext, getActiveSpan, getTraceContext, getTracer, isTracing, resolveTraceUrl, runWithSpan } from './chunk-B3ZHLLMP.js';
19
- import { resetEvents } from './chunk-Z3BQYTZE.js';
20
- export { Event, getEvents, resetEvents } from './chunk-Z3BQYTZE.js';
19
+ import { resetEvents } from './chunk-NYTCPK4J.js';
20
+ export { Event, getEvents, resetEvents } from './chunk-NYTCPK4J.js';
21
21
  import './chunk-LITNXTTT.js';
22
22
  import './chunk-BZHG5IZ4.js';
23
23
  export { getOperationContext, runInOperationContext } from './chunk-WD4RP6IV.js';
24
24
  export { CORRELATION_ID_BAGGAGE_KEY, generateCorrelationId, getCorrelationId, getOrCreateCorrelationId, runWithCorrelationId, setCorrelationId, setCorrelationIdInBaggage } from './chunk-USSL3D6L.js';
25
- import { getLogger, getSdk } from './chunk-47KW5CV7.js';
26
- export { BaggageSpanProcessor, createStringRedactor, init } from './chunk-47KW5CV7.js';
25
+ import { getLogger, getSdk } from './chunk-7RV6L24E.js';
26
+ export { BaggageSpanProcessor, createStringRedactor, init } from './chunk-7RV6L24E.js';
27
27
  import './chunk-YTGF4L2C.js';
28
28
  import './chunk-X4RMFFMR.js';
29
29
  export { FilteringSpanProcessor } from './chunk-WGWSHJ2N.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkPDRIJURL_cjs = require('./chunk-PDRIJURL.cjs');
3
+ var chunkGIND746I_cjs = require('./chunk-GIND746I.cjs');
4
4
  require('./chunk-6YIDHH2S.cjs');
5
5
  var chunkGVLK7YUU_cjs = require('./chunk-GVLK7YUU.cjs');
6
6
  require('./chunk-ZNMBW67B.cjs');
@@ -53,17 +53,17 @@ var shutdownHandlerRegistered = false;
53
53
  async function shutdownInstrumentation(sdk) {
54
54
  const sdkToShutdown = sdk || currentSDK;
55
55
  if (!sdkToShutdown) {
56
- chunkPDRIJURL_cjs.getLogger().warn({}, "No SDK to shutdown");
56
+ chunkGIND746I_cjs.getLogger().warn({}, "No SDK to shutdown");
57
57
  return;
58
58
  }
59
59
  try {
60
60
  await sdkToShutdown.shutdown();
61
- chunkPDRIJURL_cjs.getLogger().info({}, "OpenTelemetry terminated successfully");
61
+ chunkGIND746I_cjs.getLogger().info({}, "OpenTelemetry terminated successfully");
62
62
  if (sdkToShutdown === currentSDK) {
63
63
  currentSDK = null;
64
64
  }
65
65
  } catch (error) {
66
- chunkPDRIJURL_cjs.getLogger().error(
66
+ chunkGIND746I_cjs.getLogger().error(
67
67
  {
68
68
  err: error instanceof Error ? error : void 0
69
69
  },
@@ -74,7 +74,7 @@ async function shutdownInstrumentation(sdk) {
74
74
  }
75
75
  async function initInstrumentation(config) {
76
76
  if (currentSDK) {
77
- chunkPDRIJURL_cjs.getLogger().info(
77
+ chunkGIND746I_cjs.getLogger().info(
78
78
  {},
79
79
  "Shutting down existing OpenTelemetry SDK before reinitializing..."
80
80
  );
@@ -161,9 +161,9 @@ async function initInstrumentation(config) {
161
161
  });
162
162
  try {
163
163
  await sdk.start();
164
- chunkPDRIJURL_cjs.getLogger().info({}, "OpenTelemetry instrumentation started successfully");
164
+ chunkGIND746I_cjs.getLogger().info({}, "OpenTelemetry instrumentation started successfully");
165
165
  } catch (error) {
166
- chunkPDRIJURL_cjs.getLogger().error(
166
+ chunkGIND746I_cjs.getLogger().error(
167
167
  {
168
168
  err: error instanceof Error ? error : void 0
169
169
  },
@@ -178,7 +178,7 @@ async function initInstrumentation(config) {
178
178
  shutdownInstrumentation().then(() => {
179
179
  process.exit(0);
180
180
  }).catch((error) => {
181
- chunkPDRIJURL_cjs.getLogger().error(
181
+ chunkGIND746I_cjs.getLogger().error(
182
182
  {
183
183
  err: error instanceof Error ? error : void 0
184
184
  },
@@ -1,4 +1,4 @@
1
- import { getLogger } from './chunk-47KW5CV7.js';
1
+ import { getLogger } from './chunk-7RV6L24E.js';
2
2
  import './chunk-YTGF4L2C.js';
3
3
  import { TailSamplingSpanProcessor } from './chunk-X4RMFFMR.js';
4
4
  import './chunk-WGWSHJ2N.js';
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkW6U2BUHU_cjs = require('./chunk-W6U2BUHU.cjs');
4
- require('./chunk-AXNPD6XW.cjs');
3
+ var chunkLRFG6HRL_cjs = require('./chunk-LRFG6HRL.cjs');
4
+ require('./chunk-7ZYUFMWU.cjs');
5
5
  require('./chunk-W4EUTSB2.cjs');
6
6
  require('./chunk-GML3FBOT.cjs');
7
7
  require('./chunk-D5LMF53P.cjs');
8
8
  require('./chunk-XRKAL7WJ.cjs');
9
- require('./chunk-PDRIJURL.cjs');
9
+ require('./chunk-GIND746I.cjs');
10
10
  require('./chunk-6YIDHH2S.cjs');
11
11
  require('./chunk-GVLK7YUU.cjs');
12
12
  require('./chunk-ZNMBW67B.cjs');
@@ -25,15 +25,15 @@ require('./chunk-JEQ2X3Z6.cjs');
25
25
 
26
26
  Object.defineProperty(exports, "clearOrderingState", {
27
27
  enumerable: true,
28
- get: function () { return chunkW6U2BUHU_cjs.clearOrderingState; }
28
+ get: function () { return chunkLRFG6HRL_cjs.clearOrderingState; }
29
29
  });
30
30
  Object.defineProperty(exports, "traceConsumer", {
31
31
  enumerable: true,
32
- get: function () { return chunkW6U2BUHU_cjs.traceConsumer; }
32
+ get: function () { return chunkLRFG6HRL_cjs.traceConsumer; }
33
33
  });
34
34
  Object.defineProperty(exports, "traceProducer", {
35
35
  enumerable: true,
36
- get: function () { return chunkW6U2BUHU_cjs.traceProducer; }
36
+ get: function () { return chunkLRFG6HRL_cjs.traceProducer; }
37
37
  });
38
38
  //# sourceMappingURL=messaging.cjs.map
39
39
  //# sourceMappingURL=messaging.cjs.map
package/dist/messaging.js CHANGED
@@ -1,10 +1,10 @@
1
- export { clearOrderingState, traceConsumer, traceProducer } from './chunk-ZJTBAUXG.js';
2
- import './chunk-2D74YR4Z.js';
1
+ export { clearOrderingState, traceConsumer, traceProducer } from './chunk-JZKMXKJX.js';
2
+ import './chunk-JDV3LYOI.js';
3
3
  import './chunk-SR35DG5A.js';
4
4
  import './chunk-B3ZHLLMP.js';
5
5
  import './chunk-WD4RP6IV.js';
6
6
  import './chunk-USSL3D6L.js';
7
- import './chunk-47KW5CV7.js';
7
+ import './chunk-7RV6L24E.js';
8
8
  import './chunk-YTGF4L2C.js';
9
9
  import './chunk-X4RMFFMR.js';
10
10
  import './chunk-WGWSHJ2N.js';
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkCSG2D3BZ_cjs = require('./chunk-CSG2D3BZ.cjs');
4
- require('./chunk-AXNPD6XW.cjs');
3
+ var chunk73SCHI7V_cjs = require('./chunk-73SCHI7V.cjs');
4
+ require('./chunk-7ZYUFMWU.cjs');
5
5
  require('./chunk-W4EUTSB2.cjs');
6
6
  require('./chunk-GML3FBOT.cjs');
7
7
  require('./chunk-D5LMF53P.cjs');
8
8
  require('./chunk-XRKAL7WJ.cjs');
9
- require('./chunk-PDRIJURL.cjs');
9
+ require('./chunk-GIND746I.cjs');
10
10
  require('./chunk-6YIDHH2S.cjs');
11
11
  require('./chunk-GVLK7YUU.cjs');
12
12
  require('./chunk-ZNMBW67B.cjs');
@@ -25,19 +25,19 @@ require('./chunk-JEQ2X3Z6.cjs');
25
25
 
26
26
  Object.defineProperty(exports, "traceDB", {
27
27
  enumerable: true,
28
- get: function () { return chunkCSG2D3BZ_cjs.traceDB; }
28
+ get: function () { return chunk73SCHI7V_cjs.traceDB; }
29
29
  });
30
30
  Object.defineProperty(exports, "traceHTTP", {
31
31
  enumerable: true,
32
- get: function () { return chunkCSG2D3BZ_cjs.traceHTTP; }
32
+ get: function () { return chunk73SCHI7V_cjs.traceHTTP; }
33
33
  });
34
34
  Object.defineProperty(exports, "traceLLM", {
35
35
  enumerable: true,
36
- get: function () { return chunkCSG2D3BZ_cjs.traceLLM; }
36
+ get: function () { return chunk73SCHI7V_cjs.traceLLM; }
37
37
  });
38
38
  Object.defineProperty(exports, "traceMessaging", {
39
39
  enumerable: true,
40
- get: function () { return chunkCSG2D3BZ_cjs.traceMessaging; }
40
+ get: function () { return chunk73SCHI7V_cjs.traceMessaging; }
41
41
  });
42
42
  //# sourceMappingURL=semantic-helpers.cjs.map
43
43
  //# sourceMappingURL=semantic-helpers.cjs.map
@@ -1,10 +1,10 @@
1
- export { traceDB, traceHTTP, traceLLM, traceMessaging } from './chunk-GSZJOYFF.js';
2
- import './chunk-2D74YR4Z.js';
1
+ export { traceDB, traceHTTP, traceLLM, traceMessaging } from './chunk-BKIAH2YS.js';
2
+ import './chunk-JDV3LYOI.js';
3
3
  import './chunk-SR35DG5A.js';
4
4
  import './chunk-B3ZHLLMP.js';
5
5
  import './chunk-WD4RP6IV.js';
6
6
  import './chunk-USSL3D6L.js';
7
- import './chunk-47KW5CV7.js';
7
+ import './chunk-7RV6L24E.js';
8
8
  import './chunk-YTGF4L2C.js';
9
9
  import './chunk-X4RMFFMR.js';
10
10
  import './chunk-WGWSHJ2N.js';
@@ -80,5 +80,6 @@ function serializeSpan(span) {
80
80
  }
81
81
 
82
82
  exports.TestSpanCollector = TestSpanCollector;
83
+ exports.serializeSpan = serializeSpan;
83
84
  //# sourceMappingURL=test-span-collector.cjs.map
84
85
  //# sourceMappingURL=test-span-collector.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/test-span-collector.ts"],"names":["SpanStatusCode"],"mappings":"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","file":"test-span-collector.cjs","sourcesContent":["/**\n * TestSpanCollector — SpanExporter that groups finished spans by traceId\n * and drains per-trace for embedding in test metadata.\n *\n * @example\n * ```typescript\n * import { TestSpanCollector } from 'autotel/test-span-collector';\n * import { SimpleSpanProcessor } from 'autotel/processors';\n * import { getAutotelTracerProvider } from 'autotel';\n *\n * const collector = new TestSpanCollector();\n * const provider = getAutotelTracerProvider();\n * provider.addSpanProcessor(new SimpleSpanProcessor(collector));\n *\n * // After a test span ends:\n * const spans = collector.drainTrace(traceId, rootSpanId);\n * // spans contains only descendants of rootSpanId\n * ```\n */\n\nimport type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { SpanStatusCode } from '@opentelemetry/api';\n\n/** @see ExportResultCode from @opentelemetry/core */\nconst ExportResultCode = { SUCCESS: 0, FAILED: 1 } as const;\n\n/** Attribute value types that survive serialization */\ntype SerializableValue =\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[];\n\n/**\n * Portable serialized span for embedding in test metadata.\n * `startTimeMs` is derived from OTel HrTime — epoch-based wall-clock ms in the current SDK.\n */\nexport interface SerializedSpan {\n spanId: string;\n parentSpanId?: string;\n name: string;\n startTimeMs: number;\n durationMs: number;\n status: 'ok' | 'error' | 'unset';\n statusMessage?: string;\n attributes?: Record<string, SerializableValue>;\n}\n\nexport class TestSpanCollector implements SpanExporter {\n private traces = new Map<string, ReadableSpan[]>();\n\n export(\n spans: ReadableSpan[],\n callback: (result: { code: number }) => void,\n ): void {\n for (const span of spans) {\n const traceId = span.spanContext().traceId;\n let list = this.traces.get(traceId);\n if (!list) {\n list = [];\n this.traces.set(traceId, list);\n }\n list.push(span);\n }\n callback({ code: ExportResultCode.SUCCESS });\n }\n\n /**\n * Drain and serialize spans that are descendants of `rootSpanId` within `traceId`.\n * Filters to the subtree rooted at the test span to prevent cross-test mixing.\n * Removes the entire traceId entry from the collector.\n */\n drainTrace(traceId: string, rootSpanId: string): SerializedSpan[] {\n const allSpans = this.traces.get(traceId);\n this.traces.delete(traceId);\n if (!allSpans?.length) return [];\n\n // Build spanId → span index for efficient parent-chain walking\n const byId = new Map<string, ReadableSpan>();\n for (const s of allSpans) byId.set(s.spanContext().spanId, s);\n\n // Filter to spans that are the root or descendants of rootSpanId\n const included = allSpans.filter((s) => {\n let id: string | undefined = s.spanContext().spanId;\n while (id) {\n if (id === rootSpanId) return true;\n const parent = byId.get(id);\n const parentId = parent?.parentSpanContext?.spanId || undefined;\n if (parentId === id) break; // cycle guard\n id = parentId;\n }\n return false;\n });\n\n return included.map((s) => serializeSpan(s));\n }\n\n shutdown(): Promise<void> {\n this.traces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nfunction hrTimeToMs(hr: [number, number]): number {\n return hr[0] * 1000 + hr[1] / 1_000_000;\n}\n\nfunction isSerializable(v: unknown): v is SerializableValue {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')\n return true;\n if (Array.isArray(v) && v.length > 0) {\n const t = typeof v[0];\n return (\n (t === 'string' || t === 'number' || t === 'boolean') &&\n v.every((e) => typeof e === t)\n );\n }\n return false;\n}\n\nfunction serializeSpan(span: ReadableSpan): SerializedSpan {\n const attrs: Record<string, SerializableValue> = {};\n for (const [k, v] of Object.entries(span.attributes)) {\n if (isSerializable(v)) attrs[k] = v;\n }\n return {\n spanId: span.spanContext().spanId,\n parentSpanId: span.parentSpanContext?.spanId || undefined,\n name: span.name,\n startTimeMs: hrTimeToMs(span.startTime as [number, number]),\n durationMs: hrTimeToMs(span.duration as [number, number]),\n status:\n span.status.code === SpanStatusCode.ERROR\n ? 'error'\n : span.status.code === SpanStatusCode.OK\n ? 'ok'\n : 'unset',\n statusMessage: span.status.message || undefined,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/test-span-collector.ts"],"names":["SpanStatusCode"],"mappings":"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","file":"test-span-collector.cjs","sourcesContent":["/**\n * TestSpanCollector — SpanExporter that groups finished spans by traceId\n * and drains per-trace for embedding in test metadata.\n *\n * @example\n * ```typescript\n * import { TestSpanCollector } from 'autotel/test-span-collector';\n * import { SimpleSpanProcessor } from 'autotel/processors';\n * import { getAutotelTracerProvider } from 'autotel';\n *\n * const collector = new TestSpanCollector();\n * const provider = getAutotelTracerProvider();\n * provider.addSpanProcessor(new SimpleSpanProcessor(collector));\n *\n * // After a test span ends:\n * const spans = collector.drainTrace(traceId, rootSpanId);\n * // spans contains only descendants of rootSpanId\n * ```\n */\n\nimport type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { SpanStatusCode } from '@opentelemetry/api';\n\n/** @see ExportResultCode from @opentelemetry/core */\nconst ExportResultCode = { SUCCESS: 0, FAILED: 1 } as const;\n\n/** Attribute value types that survive serialization */\ntype SerializableValue =\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[];\n\n/**\n * Portable serialized span for embedding in test metadata.\n * `startTimeMs` is derived from OTel HrTime — epoch-based wall-clock ms in the current SDK.\n */\nexport interface SerializedSpan {\n spanId: string;\n parentSpanId?: string;\n name: string;\n startTimeMs: number;\n durationMs: number;\n status: 'ok' | 'error' | 'unset';\n statusMessage?: string;\n attributes?: Record<string, SerializableValue>;\n}\n\nexport class TestSpanCollector implements SpanExporter {\n private traces = new Map<string, ReadableSpan[]>();\n\n export(\n spans: ReadableSpan[],\n callback: (result: { code: number }) => void,\n ): void {\n for (const span of spans) {\n const traceId = span.spanContext().traceId;\n let list = this.traces.get(traceId);\n if (!list) {\n list = [];\n this.traces.set(traceId, list);\n }\n list.push(span);\n }\n callback({ code: ExportResultCode.SUCCESS });\n }\n\n /**\n * Drain and serialize spans that are descendants of `rootSpanId` within `traceId`.\n * Filters to the subtree rooted at the test span to prevent cross-test mixing.\n * Removes the entire traceId entry from the collector.\n */\n drainTrace(traceId: string, rootSpanId: string): SerializedSpan[] {\n const allSpans = this.traces.get(traceId);\n this.traces.delete(traceId);\n if (!allSpans?.length) return [];\n\n // Build spanId → span index for efficient parent-chain walking\n const byId = new Map<string, ReadableSpan>();\n for (const s of allSpans) byId.set(s.spanContext().spanId, s);\n\n // Filter to spans that are the root or descendants of rootSpanId\n const included = allSpans.filter((s) => {\n let id: string | undefined = s.spanContext().spanId;\n while (id) {\n if (id === rootSpanId) return true;\n const parent = byId.get(id);\n const parentId = parent?.parentSpanContext?.spanId || undefined;\n if (parentId === id) break; // cycle guard\n id = parentId;\n }\n return false;\n });\n\n return included.map((s) => serializeSpan(s));\n }\n\n shutdown(): Promise<void> {\n this.traces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nfunction hrTimeToMs(hr: [number, number]): number {\n return hr[0] * 1000 + hr[1] / 1_000_000;\n}\n\nfunction isSerializable(v: unknown): v is SerializableValue {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')\n return true;\n if (Array.isArray(v) && v.length > 0) {\n const t = typeof v[0];\n return (\n (t === 'string' || t === 'number' || t === 'boolean') &&\n v.every((e) => typeof e === t)\n );\n }\n return false;\n}\n\nexport function serializeSpan(span: ReadableSpan): SerializedSpan {\n const attrs: Record<string, SerializableValue> = {};\n for (const [k, v] of Object.entries(span.attributes)) {\n if (isSerializable(v)) attrs[k] = v;\n }\n return {\n spanId: span.spanContext().spanId,\n parentSpanId: span.parentSpanContext?.spanId || undefined,\n name: span.name,\n startTimeMs: hrTimeToMs(span.startTime as [number, number]),\n durationMs: hrTimeToMs(span.duration as [number, number]),\n status:\n span.status.code === SpanStatusCode.ERROR\n ? 'error'\n : span.status.code === SpanStatusCode.OK\n ? 'ok'\n : 'unset',\n statusMessage: span.status.message || undefined,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n };\n}\n"]}
@@ -50,5 +50,6 @@ declare class TestSpanCollector implements SpanExporter {
50
50
  shutdown(): Promise<void>;
51
51
  forceFlush(): Promise<void>;
52
52
  }
53
+ declare function serializeSpan(span: ReadableSpan): SerializedSpan;
53
54
 
54
- export { type SerializedSpan, TestSpanCollector };
55
+ export { type SerializedSpan, TestSpanCollector, serializeSpan };
@@ -50,5 +50,6 @@ declare class TestSpanCollector implements SpanExporter {
50
50
  shutdown(): Promise<void>;
51
51
  forceFlush(): Promise<void>;
52
52
  }
53
+ declare function serializeSpan(span: ReadableSpan): SerializedSpan;
53
54
 
54
- export { type SerializedSpan, TestSpanCollector };
55
+ export { type SerializedSpan, TestSpanCollector, serializeSpan };
@@ -77,6 +77,6 @@ function serializeSpan(span) {
77
77
  };
78
78
  }
79
79
 
80
- export { TestSpanCollector };
80
+ export { TestSpanCollector, serializeSpan };
81
81
  //# sourceMappingURL=test-span-collector.js.map
82
82
  //# sourceMappingURL=test-span-collector.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/test-span-collector.ts"],"names":[],"mappings":"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","file":"test-span-collector.js","sourcesContent":["/**\n * TestSpanCollector — SpanExporter that groups finished spans by traceId\n * and drains per-trace for embedding in test metadata.\n *\n * @example\n * ```typescript\n * import { TestSpanCollector } from 'autotel/test-span-collector';\n * import { SimpleSpanProcessor } from 'autotel/processors';\n * import { getAutotelTracerProvider } from 'autotel';\n *\n * const collector = new TestSpanCollector();\n * const provider = getAutotelTracerProvider();\n * provider.addSpanProcessor(new SimpleSpanProcessor(collector));\n *\n * // After a test span ends:\n * const spans = collector.drainTrace(traceId, rootSpanId);\n * // spans contains only descendants of rootSpanId\n * ```\n */\n\nimport type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { SpanStatusCode } from '@opentelemetry/api';\n\n/** @see ExportResultCode from @opentelemetry/core */\nconst ExportResultCode = { SUCCESS: 0, FAILED: 1 } as const;\n\n/** Attribute value types that survive serialization */\ntype SerializableValue =\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[];\n\n/**\n * Portable serialized span for embedding in test metadata.\n * `startTimeMs` is derived from OTel HrTime — epoch-based wall-clock ms in the current SDK.\n */\nexport interface SerializedSpan {\n spanId: string;\n parentSpanId?: string;\n name: string;\n startTimeMs: number;\n durationMs: number;\n status: 'ok' | 'error' | 'unset';\n statusMessage?: string;\n attributes?: Record<string, SerializableValue>;\n}\n\nexport class TestSpanCollector implements SpanExporter {\n private traces = new Map<string, ReadableSpan[]>();\n\n export(\n spans: ReadableSpan[],\n callback: (result: { code: number }) => void,\n ): void {\n for (const span of spans) {\n const traceId = span.spanContext().traceId;\n let list = this.traces.get(traceId);\n if (!list) {\n list = [];\n this.traces.set(traceId, list);\n }\n list.push(span);\n }\n callback({ code: ExportResultCode.SUCCESS });\n }\n\n /**\n * Drain and serialize spans that are descendants of `rootSpanId` within `traceId`.\n * Filters to the subtree rooted at the test span to prevent cross-test mixing.\n * Removes the entire traceId entry from the collector.\n */\n drainTrace(traceId: string, rootSpanId: string): SerializedSpan[] {\n const allSpans = this.traces.get(traceId);\n this.traces.delete(traceId);\n if (!allSpans?.length) return [];\n\n // Build spanId → span index for efficient parent-chain walking\n const byId = new Map<string, ReadableSpan>();\n for (const s of allSpans) byId.set(s.spanContext().spanId, s);\n\n // Filter to spans that are the root or descendants of rootSpanId\n const included = allSpans.filter((s) => {\n let id: string | undefined = s.spanContext().spanId;\n while (id) {\n if (id === rootSpanId) return true;\n const parent = byId.get(id);\n const parentId = parent?.parentSpanContext?.spanId || undefined;\n if (parentId === id) break; // cycle guard\n id = parentId;\n }\n return false;\n });\n\n return included.map((s) => serializeSpan(s));\n }\n\n shutdown(): Promise<void> {\n this.traces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nfunction hrTimeToMs(hr: [number, number]): number {\n return hr[0] * 1000 + hr[1] / 1_000_000;\n}\n\nfunction isSerializable(v: unknown): v is SerializableValue {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')\n return true;\n if (Array.isArray(v) && v.length > 0) {\n const t = typeof v[0];\n return (\n (t === 'string' || t === 'number' || t === 'boolean') &&\n v.every((e) => typeof e === t)\n );\n }\n return false;\n}\n\nfunction serializeSpan(span: ReadableSpan): SerializedSpan {\n const attrs: Record<string, SerializableValue> = {};\n for (const [k, v] of Object.entries(span.attributes)) {\n if (isSerializable(v)) attrs[k] = v;\n }\n return {\n spanId: span.spanContext().spanId,\n parentSpanId: span.parentSpanContext?.spanId || undefined,\n name: span.name,\n startTimeMs: hrTimeToMs(span.startTime as [number, number]),\n durationMs: hrTimeToMs(span.duration as [number, number]),\n status:\n span.status.code === SpanStatusCode.ERROR\n ? 'error'\n : span.status.code === SpanStatusCode.OK\n ? 'ok'\n : 'unset',\n statusMessage: span.status.message || undefined,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/test-span-collector.ts"],"names":[],"mappings":"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","file":"test-span-collector.js","sourcesContent":["/**\n * TestSpanCollector — SpanExporter that groups finished spans by traceId\n * and drains per-trace for embedding in test metadata.\n *\n * @example\n * ```typescript\n * import { TestSpanCollector } from 'autotel/test-span-collector';\n * import { SimpleSpanProcessor } from 'autotel/processors';\n * import { getAutotelTracerProvider } from 'autotel';\n *\n * const collector = new TestSpanCollector();\n * const provider = getAutotelTracerProvider();\n * provider.addSpanProcessor(new SimpleSpanProcessor(collector));\n *\n * // After a test span ends:\n * const spans = collector.drainTrace(traceId, rootSpanId);\n * // spans contains only descendants of rootSpanId\n * ```\n */\n\nimport type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { SpanStatusCode } from '@opentelemetry/api';\n\n/** @see ExportResultCode from @opentelemetry/core */\nconst ExportResultCode = { SUCCESS: 0, FAILED: 1 } as const;\n\n/** Attribute value types that survive serialization */\ntype SerializableValue =\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[];\n\n/**\n * Portable serialized span for embedding in test metadata.\n * `startTimeMs` is derived from OTel HrTime — epoch-based wall-clock ms in the current SDK.\n */\nexport interface SerializedSpan {\n spanId: string;\n parentSpanId?: string;\n name: string;\n startTimeMs: number;\n durationMs: number;\n status: 'ok' | 'error' | 'unset';\n statusMessage?: string;\n attributes?: Record<string, SerializableValue>;\n}\n\nexport class TestSpanCollector implements SpanExporter {\n private traces = new Map<string, ReadableSpan[]>();\n\n export(\n spans: ReadableSpan[],\n callback: (result: { code: number }) => void,\n ): void {\n for (const span of spans) {\n const traceId = span.spanContext().traceId;\n let list = this.traces.get(traceId);\n if (!list) {\n list = [];\n this.traces.set(traceId, list);\n }\n list.push(span);\n }\n callback({ code: ExportResultCode.SUCCESS });\n }\n\n /**\n * Drain and serialize spans that are descendants of `rootSpanId` within `traceId`.\n * Filters to the subtree rooted at the test span to prevent cross-test mixing.\n * Removes the entire traceId entry from the collector.\n */\n drainTrace(traceId: string, rootSpanId: string): SerializedSpan[] {\n const allSpans = this.traces.get(traceId);\n this.traces.delete(traceId);\n if (!allSpans?.length) return [];\n\n // Build spanId → span index for efficient parent-chain walking\n const byId = new Map<string, ReadableSpan>();\n for (const s of allSpans) byId.set(s.spanContext().spanId, s);\n\n // Filter to spans that are the root or descendants of rootSpanId\n const included = allSpans.filter((s) => {\n let id: string | undefined = s.spanContext().spanId;\n while (id) {\n if (id === rootSpanId) return true;\n const parent = byId.get(id);\n const parentId = parent?.parentSpanContext?.spanId || undefined;\n if (parentId === id) break; // cycle guard\n id = parentId;\n }\n return false;\n });\n\n return included.map((s) => serializeSpan(s));\n }\n\n shutdown(): Promise<void> {\n this.traces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nfunction hrTimeToMs(hr: [number, number]): number {\n return hr[0] * 1000 + hr[1] / 1_000_000;\n}\n\nfunction isSerializable(v: unknown): v is SerializableValue {\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')\n return true;\n if (Array.isArray(v) && v.length > 0) {\n const t = typeof v[0];\n return (\n (t === 'string' || t === 'number' || t === 'boolean') &&\n v.every((e) => typeof e === t)\n );\n }\n return false;\n}\n\nexport function serializeSpan(span: ReadableSpan): SerializedSpan {\n const attrs: Record<string, SerializableValue> = {};\n for (const [k, v] of Object.entries(span.attributes)) {\n if (isSerializable(v)) attrs[k] = v;\n }\n return {\n spanId: span.spanContext().spanId,\n parentSpanId: span.parentSpanContext?.spanId || undefined,\n name: span.name,\n startTimeMs: hrTimeToMs(span.startTime as [number, number]),\n durationMs: hrTimeToMs(span.duration as [number, number]),\n status:\n span.status.code === SpanStatusCode.ERROR\n ? 'error'\n : span.status.code === SpanStatusCode.OK\n ? 'ok'\n : 'unset',\n statusMessage: span.status.message || undefined,\n attributes: Object.keys(attrs).length > 0 ? attrs : undefined,\n };\n}\n"]}
package/dist/webhook.cjs CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkAXNPD6XW_cjs = require('./chunk-AXNPD6XW.cjs');
3
+ var chunk7ZYUFMWU_cjs = require('./chunk-7ZYUFMWU.cjs');
4
4
  require('./chunk-W4EUTSB2.cjs');
5
5
  require('./chunk-GML3FBOT.cjs');
6
6
  require('./chunk-D5LMF53P.cjs');
7
7
  require('./chunk-XRKAL7WJ.cjs');
8
- require('./chunk-PDRIJURL.cjs');
8
+ require('./chunk-GIND746I.cjs');
9
9
  require('./chunk-6YIDHH2S.cjs');
10
10
  require('./chunk-GVLK7YUU.cjs');
11
11
  require('./chunk-ZNMBW67B.cjs');
@@ -148,7 +148,7 @@ function createParkingLot(config) {
148
148
  },
149
149
  traceCallback(callbackConfig) {
150
150
  return (fnFactory) => {
151
- return chunkAXNPD6XW_cjs.trace(
151
+ return chunk7ZYUFMWU_cjs.trace(
152
152
  {
153
153
  name: callbackConfig.name,
154
154
  spanKind: api.SpanKind.SERVER
package/dist/webhook.js CHANGED
@@ -1,9 +1,9 @@
1
- import { trace } from './chunk-2D74YR4Z.js';
1
+ import { trace } from './chunk-JDV3LYOI.js';
2
2
  import './chunk-SR35DG5A.js';
3
3
  import './chunk-B3ZHLLMP.js';
4
4
  import './chunk-WD4RP6IV.js';
5
5
  import './chunk-USSL3D6L.js';
6
- import './chunk-47KW5CV7.js';
6
+ import './chunk-7RV6L24E.js';
7
7
  import './chunk-YTGF4L2C.js';
8
8
  import './chunk-X4RMFFMR.js';
9
9
  import './chunk-WGWSHJ2N.js';