autotel 2.1.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 (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1946 -0
  3. package/dist/chunk-2LNRY4QK.js +273 -0
  4. package/dist/chunk-2LNRY4QK.js.map +1 -0
  5. package/dist/chunk-3HENGDW2.js +587 -0
  6. package/dist/chunk-3HENGDW2.js.map +1 -0
  7. package/dist/chunk-4OAT42CA.cjs +73 -0
  8. package/dist/chunk-4OAT42CA.cjs.map +1 -0
  9. package/dist/chunk-5GWX5LFW.js +70 -0
  10. package/dist/chunk-5GWX5LFW.js.map +1 -0
  11. package/dist/chunk-5R2M36QB.js +195 -0
  12. package/dist/chunk-5R2M36QB.js.map +1 -0
  13. package/dist/chunk-5ZN622AO.js +73 -0
  14. package/dist/chunk-5ZN622AO.js.map +1 -0
  15. package/dist/chunk-77MSMAUQ.cjs +498 -0
  16. package/dist/chunk-77MSMAUQ.cjs.map +1 -0
  17. package/dist/chunk-ABPEQ6RK.cjs +596 -0
  18. package/dist/chunk-ABPEQ6RK.cjs.map +1 -0
  19. package/dist/chunk-BWYGJKRB.js +95 -0
  20. package/dist/chunk-BWYGJKRB.js.map +1 -0
  21. package/dist/chunk-BZHG5IZ4.js +73 -0
  22. package/dist/chunk-BZHG5IZ4.js.map +1 -0
  23. package/dist/chunk-G7VZBCD6.cjs +35 -0
  24. package/dist/chunk-G7VZBCD6.cjs.map +1 -0
  25. package/dist/chunk-GVLK7YUU.cjs +30 -0
  26. package/dist/chunk-GVLK7YUU.cjs.map +1 -0
  27. package/dist/chunk-HCCXC7XG.js +205 -0
  28. package/dist/chunk-HCCXC7XG.js.map +1 -0
  29. package/dist/chunk-HE6T6FIX.cjs +203 -0
  30. package/dist/chunk-HE6T6FIX.cjs.map +1 -0
  31. package/dist/chunk-KIXWPOCO.cjs +100 -0
  32. package/dist/chunk-KIXWPOCO.cjs.map +1 -0
  33. package/dist/chunk-KVGNW3FC.js +87 -0
  34. package/dist/chunk-KVGNW3FC.js.map +1 -0
  35. package/dist/chunk-LITNXTTT.js +3 -0
  36. package/dist/chunk-LITNXTTT.js.map +1 -0
  37. package/dist/chunk-M4ANN7RL.js +114 -0
  38. package/dist/chunk-M4ANN7RL.js.map +1 -0
  39. package/dist/chunk-NC52UBR2.cjs +32 -0
  40. package/dist/chunk-NC52UBR2.cjs.map +1 -0
  41. package/dist/chunk-NHCNRQD3.cjs +212 -0
  42. package/dist/chunk-NHCNRQD3.cjs.map +1 -0
  43. package/dist/chunk-NZ72VDNY.cjs +4 -0
  44. package/dist/chunk-NZ72VDNY.cjs.map +1 -0
  45. package/dist/chunk-P6JUDYNO.js +57 -0
  46. package/dist/chunk-P6JUDYNO.js.map +1 -0
  47. package/dist/chunk-RJYY7BWX.js +1349 -0
  48. package/dist/chunk-RJYY7BWX.js.map +1 -0
  49. package/dist/chunk-TRI4V5BF.cjs +126 -0
  50. package/dist/chunk-TRI4V5BF.cjs.map +1 -0
  51. package/dist/chunk-UL33I6IS.js +139 -0
  52. package/dist/chunk-UL33I6IS.js.map +1 -0
  53. package/dist/chunk-URRW6M2C.cjs +61 -0
  54. package/dist/chunk-URRW6M2C.cjs.map +1 -0
  55. package/dist/chunk-UY3UYPBZ.cjs +77 -0
  56. package/dist/chunk-UY3UYPBZ.cjs.map +1 -0
  57. package/dist/chunk-W3253FGB.cjs +277 -0
  58. package/dist/chunk-W3253FGB.cjs.map +1 -0
  59. package/dist/chunk-W7LHZVQF.js +26 -0
  60. package/dist/chunk-W7LHZVQF.js.map +1 -0
  61. package/dist/chunk-WBWNM6LB.cjs +1360 -0
  62. package/dist/chunk-WBWNM6LB.cjs.map +1 -0
  63. package/dist/chunk-WFJ7L2RV.js +494 -0
  64. package/dist/chunk-WFJ7L2RV.js.map +1 -0
  65. package/dist/chunk-X4RMFFMR.js +28 -0
  66. package/dist/chunk-X4RMFFMR.js.map +1 -0
  67. package/dist/chunk-Y4Y2S7BM.cjs +92 -0
  68. package/dist/chunk-Y4Y2S7BM.cjs.map +1 -0
  69. package/dist/chunk-YLPNXZFI.cjs +143 -0
  70. package/dist/chunk-YLPNXZFI.cjs.map +1 -0
  71. package/dist/chunk-YTXEZ4SD.cjs +77 -0
  72. package/dist/chunk-YTXEZ4SD.cjs.map +1 -0
  73. package/dist/chunk-Z6ZWNWWR.js +30 -0
  74. package/dist/chunk-Z6ZWNWWR.js.map +1 -0
  75. package/dist/config.cjs +26 -0
  76. package/dist/config.cjs.map +1 -0
  77. package/dist/config.d.cts +75 -0
  78. package/dist/config.d.ts +75 -0
  79. package/dist/config.js +5 -0
  80. package/dist/config.js.map +1 -0
  81. package/dist/db.cjs +233 -0
  82. package/dist/db.cjs.map +1 -0
  83. package/dist/db.d.cts +123 -0
  84. package/dist/db.d.ts +123 -0
  85. package/dist/db.js +228 -0
  86. package/dist/db.js.map +1 -0
  87. package/dist/decorators.cjs +67 -0
  88. package/dist/decorators.cjs.map +1 -0
  89. package/dist/decorators.d.cts +91 -0
  90. package/dist/decorators.d.ts +91 -0
  91. package/dist/decorators.js +65 -0
  92. package/dist/decorators.js.map +1 -0
  93. package/dist/event-subscriber.cjs +6 -0
  94. package/dist/event-subscriber.cjs.map +1 -0
  95. package/dist/event-subscriber.d.cts +116 -0
  96. package/dist/event-subscriber.d.ts +116 -0
  97. package/dist/event-subscriber.js +3 -0
  98. package/dist/event-subscriber.js.map +1 -0
  99. package/dist/event-testing.cjs +21 -0
  100. package/dist/event-testing.cjs.map +1 -0
  101. package/dist/event-testing.d.cts +110 -0
  102. package/dist/event-testing.d.ts +110 -0
  103. package/dist/event-testing.js +4 -0
  104. package/dist/event-testing.js.map +1 -0
  105. package/dist/event.cjs +30 -0
  106. package/dist/event.cjs.map +1 -0
  107. package/dist/event.d.cts +282 -0
  108. package/dist/event.d.ts +282 -0
  109. package/dist/event.js +13 -0
  110. package/dist/event.js.map +1 -0
  111. package/dist/exporters.cjs +17 -0
  112. package/dist/exporters.cjs.map +1 -0
  113. package/dist/exporters.d.cts +1 -0
  114. package/dist/exporters.d.ts +1 -0
  115. package/dist/exporters.js +4 -0
  116. package/dist/exporters.js.map +1 -0
  117. package/dist/functional.cjs +46 -0
  118. package/dist/functional.cjs.map +1 -0
  119. package/dist/functional.d.cts +478 -0
  120. package/dist/functional.d.ts +478 -0
  121. package/dist/functional.js +13 -0
  122. package/dist/functional.js.map +1 -0
  123. package/dist/http.cjs +189 -0
  124. package/dist/http.cjs.map +1 -0
  125. package/dist/http.d.cts +169 -0
  126. package/dist/http.d.ts +169 -0
  127. package/dist/http.js +184 -0
  128. package/dist/http.js.map +1 -0
  129. package/dist/index.cjs +333 -0
  130. package/dist/index.cjs.map +1 -0
  131. package/dist/index.d.cts +758 -0
  132. package/dist/index.d.ts +758 -0
  133. package/dist/index.js +143 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/instrumentation.cjs +182 -0
  136. package/dist/instrumentation.cjs.map +1 -0
  137. package/dist/instrumentation.d.cts +49 -0
  138. package/dist/instrumentation.d.ts +49 -0
  139. package/dist/instrumentation.js +179 -0
  140. package/dist/instrumentation.js.map +1 -0
  141. package/dist/logger.cjs +19 -0
  142. package/dist/logger.cjs.map +1 -0
  143. package/dist/logger.d.cts +146 -0
  144. package/dist/logger.d.ts +146 -0
  145. package/dist/logger.js +6 -0
  146. package/dist/logger.js.map +1 -0
  147. package/dist/metric-helpers.cjs +31 -0
  148. package/dist/metric-helpers.cjs.map +1 -0
  149. package/dist/metric-helpers.d.cts +13 -0
  150. package/dist/metric-helpers.d.ts +13 -0
  151. package/dist/metric-helpers.js +6 -0
  152. package/dist/metric-helpers.js.map +1 -0
  153. package/dist/metric-testing.cjs +21 -0
  154. package/dist/metric-testing.cjs.map +1 -0
  155. package/dist/metric-testing.d.cts +110 -0
  156. package/dist/metric-testing.d.ts +110 -0
  157. package/dist/metric-testing.js +4 -0
  158. package/dist/metric-testing.js.map +1 -0
  159. package/dist/metric.cjs +26 -0
  160. package/dist/metric.cjs.map +1 -0
  161. package/dist/metric.d.cts +240 -0
  162. package/dist/metric.d.ts +240 -0
  163. package/dist/metric.js +9 -0
  164. package/dist/metric.js.map +1 -0
  165. package/dist/processors.cjs +17 -0
  166. package/dist/processors.cjs.map +1 -0
  167. package/dist/processors.d.cts +1 -0
  168. package/dist/processors.d.ts +1 -0
  169. package/dist/processors.js +4 -0
  170. package/dist/processors.js.map +1 -0
  171. package/dist/sampling.cjs +40 -0
  172. package/dist/sampling.cjs.map +1 -0
  173. package/dist/sampling.d.cts +260 -0
  174. package/dist/sampling.d.ts +260 -0
  175. package/dist/sampling.js +7 -0
  176. package/dist/sampling.js.map +1 -0
  177. package/dist/semantic-helpers.cjs +35 -0
  178. package/dist/semantic-helpers.cjs.map +1 -0
  179. package/dist/semantic-helpers.d.cts +442 -0
  180. package/dist/semantic-helpers.d.ts +442 -0
  181. package/dist/semantic-helpers.js +14 -0
  182. package/dist/semantic-helpers.js.map +1 -0
  183. package/dist/tail-sampling-processor.cjs +13 -0
  184. package/dist/tail-sampling-processor.cjs.map +1 -0
  185. package/dist/tail-sampling-processor.d.cts +27 -0
  186. package/dist/tail-sampling-processor.d.ts +27 -0
  187. package/dist/tail-sampling-processor.js +4 -0
  188. package/dist/tail-sampling-processor.js.map +1 -0
  189. package/dist/testing.cjs +286 -0
  190. package/dist/testing.cjs.map +1 -0
  191. package/dist/testing.d.cts +291 -0
  192. package/dist/testing.d.ts +291 -0
  193. package/dist/testing.js +263 -0
  194. package/dist/testing.js.map +1 -0
  195. package/dist/trace-context-DRZdUvVY.d.cts +181 -0
  196. package/dist/trace-context-DRZdUvVY.d.ts +181 -0
  197. package/dist/trace-helpers.cjs +54 -0
  198. package/dist/trace-helpers.cjs.map +1 -0
  199. package/dist/trace-helpers.d.cts +524 -0
  200. package/dist/trace-helpers.d.ts +524 -0
  201. package/dist/trace-helpers.js +5 -0
  202. package/dist/trace-helpers.js.map +1 -0
  203. package/dist/tracer-provider.cjs +21 -0
  204. package/dist/tracer-provider.cjs.map +1 -0
  205. package/dist/tracer-provider.d.cts +169 -0
  206. package/dist/tracer-provider.d.ts +169 -0
  207. package/dist/tracer-provider.js +4 -0
  208. package/dist/tracer-provider.js.map +1 -0
  209. package/package.json +280 -0
  210. package/src/baggage-span-processor.test.ts +202 -0
  211. package/src/baggage-span-processor.ts +98 -0
  212. package/src/circuit-breaker.test.ts +341 -0
  213. package/src/circuit-breaker.ts +184 -0
  214. package/src/config.test.ts +94 -0
  215. package/src/config.ts +169 -0
  216. package/src/db.test.ts +252 -0
  217. package/src/db.ts +447 -0
  218. package/src/decorators.test.ts +203 -0
  219. package/src/decorators.ts +188 -0
  220. package/src/env-config.test.ts +246 -0
  221. package/src/env-config.ts +158 -0
  222. package/src/event-queue.test.ts +222 -0
  223. package/src/event-queue.ts +203 -0
  224. package/src/event-subscriber.ts +136 -0
  225. package/src/event-testing.ts +197 -0
  226. package/src/event.test.ts +718 -0
  227. package/src/event.ts +556 -0
  228. package/src/exporters.ts +96 -0
  229. package/src/functional.test.ts +1059 -0
  230. package/src/functional.ts +2295 -0
  231. package/src/http.test.ts +487 -0
  232. package/src/http.ts +424 -0
  233. package/src/index.ts +158 -0
  234. package/src/init.customization.test.ts +210 -0
  235. package/src/init.integrations.test.ts +366 -0
  236. package/src/init.openllmetry.test.ts +282 -0
  237. package/src/init.protocol.test.ts +215 -0
  238. package/src/init.ts +1426 -0
  239. package/src/instrumentation.test.ts +108 -0
  240. package/src/instrumentation.ts +308 -0
  241. package/src/logger.test.ts +117 -0
  242. package/src/logger.ts +246 -0
  243. package/src/metric-helpers.ts +47 -0
  244. package/src/metric-testing.ts +197 -0
  245. package/src/metric.ts +434 -0
  246. package/src/metrics.test.ts +205 -0
  247. package/src/operation-context.ts +93 -0
  248. package/src/processors.ts +106 -0
  249. package/src/rate-limiter.test.ts +199 -0
  250. package/src/rate-limiter.ts +98 -0
  251. package/src/sampling.test.ts +513 -0
  252. package/src/sampling.ts +428 -0
  253. package/src/semantic-helpers.test.ts +311 -0
  254. package/src/semantic-helpers.ts +584 -0
  255. package/src/shutdown.test.ts +311 -0
  256. package/src/shutdown.ts +222 -0
  257. package/src/stub.integration.test.ts +361 -0
  258. package/src/tail-sampling-processor.test.ts +226 -0
  259. package/src/tail-sampling-processor.ts +51 -0
  260. package/src/testing.ts +670 -0
  261. package/src/trace-context.ts +470 -0
  262. package/src/trace-helpers.new.test.ts +278 -0
  263. package/src/trace-helpers.test.ts +242 -0
  264. package/src/trace-helpers.ts +690 -0
  265. package/src/tracer-provider.test.ts +183 -0
  266. package/src/tracer-provider.ts +266 -0
  267. package/src/track.test.ts +153 -0
  268. package/src/track.ts +120 -0
  269. package/src/validation.test.ts +306 -0
  270. package/src/validation.ts +239 -0
  271. package/src/variable-name-inference.test.ts +178 -0
  272. package/src/variable-name-inference.ts +242 -0
@@ -0,0 +1,110 @@
1
+ import { EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.js';
2
+
3
+ /**
4
+ * Testing utilities for Metrics
5
+ *
6
+ * Provides in-memory collection of metrics for testing purposes.
7
+ */
8
+
9
+ interface MetricsEvent {
10
+ event: string;
11
+ attributes?: EventAttributes;
12
+ service: string;
13
+ timestamp: number;
14
+ }
15
+ interface MetricsFunnelStep {
16
+ funnel: string;
17
+ status: FunnelStatus;
18
+ attributes?: EventAttributes;
19
+ service: string;
20
+ timestamp: number;
21
+ }
22
+ interface MetricsOutcome {
23
+ operation: string;
24
+ status: OutcomeStatus;
25
+ attributes?: EventAttributes;
26
+ service: string;
27
+ timestamp: number;
28
+ }
29
+ interface MetricsValue {
30
+ metric: string;
31
+ value: number;
32
+ attributes?: EventAttributes;
33
+ service: string;
34
+ timestamp: number;
35
+ }
36
+ /**
37
+ * In-memory metrics collector for testing
38
+ */
39
+ interface MetricsCollector {
40
+ /** Get all collected events */
41
+ getEvents(): MetricsEvent[];
42
+ /** Get all collected funnel steps */
43
+ getFunnelSteps(): MetricsFunnelStep[];
44
+ /** Get all collected outcomes */
45
+ getOutcomes(): MetricsOutcome[];
46
+ /** Get all collected values */
47
+ getValues(): MetricsValue[];
48
+ /** Clear all collected metrics */
49
+ clear(): void;
50
+ /** Record an event (internal use) */
51
+ recordEvent(event: MetricsEvent): void;
52
+ /** Record a funnel step (internal use) */
53
+ recordFunnelStep(step: MetricsFunnelStep): void;
54
+ /** Record an outcome (internal use) */
55
+ recordOutcome(outcome: MetricsOutcome): void;
56
+ /** Record a value (internal use) */
57
+ recordValue(value: MetricsValue): void;
58
+ }
59
+ /**
60
+ * Create an in-memory metrics collector for testing
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const collector = createMetricsCollector()
65
+ *
66
+ * const metrics = new Metric('test-service', { collector })
67
+ * metrics.trackEvent('order.completed', { orderId: '123' })
68
+ *
69
+ * const event =collector.getEvents()
70
+ * expect(events).toHaveLength(1)
71
+ * expect(events[0].event).toBe('order.completed')
72
+ * ```
73
+ */
74
+ declare function createMetricsCollector(): MetricsCollector;
75
+ /**
76
+ * Assert that a metric event was tracked
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * assertEventTracked({
81
+ * collector,
82
+ * eventName: 'order.completed',
83
+ * attributes: { orderId: '123' }
84
+ * })
85
+ * ```
86
+ */
87
+ declare function assertEventTracked(options: {
88
+ collector: MetricsCollector;
89
+ eventName: string;
90
+ attributes?: Record<string, unknown>;
91
+ }): void;
92
+ /**
93
+ * Assert that an outcome was tracked
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * assertOutcomeTracked({
98
+ * collector,
99
+ * operation: 'payment.process',
100
+ * status: 'success'
101
+ * })
102
+ * ```
103
+ */
104
+ declare function assertOutcomeTracked(options: {
105
+ collector: MetricsCollector;
106
+ operation: string;
107
+ status: 'success' | 'failure' | 'partial';
108
+ }): void;
109
+
110
+ export { type MetricsCollector, type MetricsEvent, type MetricsFunnelStep, type MetricsOutcome, type MetricsValue, assertEventTracked, assertOutcomeTracked, createMetricsCollector };
@@ -0,0 +1,4 @@
1
+ export { assertEventTracked, assertOutcomeTracked, createMetricsCollector } from './chunk-5ZN622AO.js';
2
+ import './chunk-Z6ZWNWWR.js';
3
+ //# sourceMappingURL=metric-testing.js.map
4
+ //# sourceMappingURL=metric-testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"metric-testing.js"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var chunkW3253FGB_cjs = require('./chunk-W3253FGB.cjs');
4
+ require('./chunk-YTXEZ4SD.cjs');
5
+ require('./chunk-NZ72VDNY.cjs');
6
+ require('./chunk-4OAT42CA.cjs');
7
+ require('./chunk-Y4Y2S7BM.cjs');
8
+ require('./chunk-URRW6M2C.cjs');
9
+ require('./chunk-G7VZBCD6.cjs');
10
+
11
+
12
+
13
+ Object.defineProperty(exports, "Metric", {
14
+ enumerable: true,
15
+ get: function () { return chunkW3253FGB_cjs.Metric; }
16
+ });
17
+ Object.defineProperty(exports, "getMetrics", {
18
+ enumerable: true,
19
+ get: function () { return chunkW3253FGB_cjs.getMetrics; }
20
+ });
21
+ Object.defineProperty(exports, "resetMetrics", {
22
+ enumerable: true,
23
+ get: function () { return chunkW3253FGB_cjs.resetMetrics; }
24
+ });
25
+ //# sourceMappingURL=metric.cjs.map
26
+ //# sourceMappingURL=metric.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"metric.cjs"}
@@ -0,0 +1,240 @@
1
+ import { Logger } from './logger.cjs';
2
+ import { EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.cjs';
3
+ import { MetricsCollector } from './metric-testing.cjs';
4
+ import 'pino';
5
+
6
+ /**
7
+ * Metrics API for OpenTelemetry
8
+ *
9
+ * Track business metrics for OpenTelemetry (Prometheus/Grafana).
10
+ * For business people who think in metrics.
11
+ *
12
+ * @example Track business metrics
13
+ * ```typescript
14
+ * const metrics = new Metric('checkout')
15
+ *
16
+ * // Track events as metrics
17
+ * metrics.trackEvent('order.completed', {
18
+ * amount: 99.99,
19
+ * currency: 'USD'
20
+ * })
21
+ *
22
+ * // Track conversion funnels
23
+ * metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
24
+ * metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
25
+ *
26
+ * // Track outcomes
27
+ * metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
28
+ * metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
29
+ *
30
+ * // Track values
31
+ * metrics.trackValue('revenue', 149.99, { currency: 'USD' })
32
+ * ```
33
+ */
34
+
35
+ /**
36
+ * Metrics class for tracking business metrics in OpenTelemetry
37
+ *
38
+ * Track critical business indicators such as:
39
+ * - User events (signups, purchases, feature usage) as metrics
40
+ * - Conversion funnels (signup → activation → purchase)
41
+ * - Business outcomes (success/failure rates)
42
+ * - Value metrics (revenue, counts, etc.)
43
+ *
44
+ * All metrics are sent to OpenTelemetry (OTLP/Prometheus/Grafana).
45
+ */
46
+ /**
47
+ * Metric configuration for customizing metric names and descriptions
48
+ */
49
+ interface MetricConfig {
50
+ /** Metric name (e.g., 'metrics.events' or 'custom.events') */
51
+ name?: string;
52
+ /** Metric description */
53
+ description?: string;
54
+ /** Metric unit (default: '1') */
55
+ unit?: string;
56
+ }
57
+ /**
58
+ * Metrics options
59
+ */
60
+ interface MetricsOptions {
61
+ /** Optional logger for audit trail */
62
+ logger?: Logger;
63
+ /** Optional collector for testing (captures metrics in memory) */
64
+ collector?: MetricsCollector;
65
+ /**
66
+ * Namespace for metrics (default: 'metrics')
67
+ * Results in metrics like: {serviceName}.{namespace}.events
68
+ */
69
+ namespace?: string;
70
+ /**
71
+ * Custom metric configurations
72
+ * Override metric names, descriptions, and units
73
+ */
74
+ metrics?: {
75
+ events?: MetricConfig;
76
+ funnel?: MetricConfig;
77
+ outcomes?: MetricConfig;
78
+ value?: MetricConfig;
79
+ };
80
+ }
81
+ declare class Metric {
82
+ private serviceName;
83
+ private eventCounter;
84
+ private funnelCounter;
85
+ private outcomeCounter;
86
+ private valueHistogram;
87
+ private logger?;
88
+ private collector?;
89
+ /**
90
+ * Create a new Metrics instance
91
+ *
92
+ * @param serviceName - Service name for metric namespacing
93
+ * @param options - Optional configuration (logger, collector, namespace, metrics)
94
+ *
95
+ * @example Basic usage (default 'metrics' namespace)
96
+ * ```typescript
97
+ * const metrics = new Metric('checkout');
98
+ * // Creates: checkout.metrics.events, checkout.metrics.funnel, etc.
99
+ * ```
100
+ *
101
+ * @example Custom namespace
102
+ * ```typescript
103
+ * const metrics = new Metric('api', { namespace: 'business' });
104
+ * // Creates: api.business.events, api.business.funnel, etc.
105
+ * ```
106
+ *
107
+ * @example Custom metric names and descriptions
108
+ * ```typescript
109
+ * const metrics = new Metric('payments', {
110
+ * metrics: {
111
+ * outcomes: {
112
+ * name: 'payments.transactions',
113
+ * description: 'Payment transaction outcomes',
114
+ * unit: 'transactions'
115
+ * },
116
+ * value: {
117
+ * name: 'payments.revenue',
118
+ * description: 'Payment revenue in USD',
119
+ * unit: 'USD'
120
+ * }
121
+ * }
122
+ * });
123
+ * ```
124
+ */
125
+ constructor(serviceName: string, options?: MetricsOptions);
126
+ /**
127
+ * Track a business event as a metric
128
+ *
129
+ * Use this for tracking user actions, business events, product usage as metrics:
130
+ * - "user.signup"
131
+ * - "order.completed"
132
+ * - "feature.used"
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * // Track user signup as metric
137
+ * metrics.trackEvent('user.signup', {
138
+ * userId: '123',
139
+ * plan: 'pro'
140
+ * })
141
+ *
142
+ * // Track order as metric
143
+ * metrics.trackEvent('order.completed', {
144
+ * orderId: 'ord_123',
145
+ * amount: 99.99
146
+ * })
147
+ * ```
148
+ */
149
+ trackEvent(eventName: string, attributes?: EventAttributes): void;
150
+ /**
151
+ * Track conversion funnel steps as metrics
152
+ *
153
+ * Monitor where users drop off in multi-step processes.
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * // Track signup funnel
158
+ * metrics.trackFunnelStep('signup', 'started', { userId: '123' })
159
+ * metrics.trackFunnelStep('signup', 'email_verified', { userId: '123' })
160
+ * metrics.trackFunnelStep('signup', 'completed', { userId: '123' })
161
+ *
162
+ * // Track checkout flow
163
+ * metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
164
+ * metrics.trackFunnelStep('checkout', 'payment_info', { cartValue: 99.99 })
165
+ * metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
166
+ * ```
167
+ */
168
+ trackFunnelStep(funnelName: string, status: FunnelStatus, attributes?: EventAttributes): void;
169
+ /**
170
+ * Track outcomes (success/failure/partial) as metrics
171
+ *
172
+ * Monitor success rates of critical operations.
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * // Track email delivery
177
+ * metrics.trackOutcome('email.delivery', 'success', {
178
+ * recipientType: 'user',
179
+ * emailType: 'welcome'
180
+ * })
181
+ *
182
+ * metrics.trackOutcome('email.delivery', 'failure', {
183
+ * recipientType: 'user',
184
+ * errorCode: 'invalid_email'
185
+ * })
186
+ *
187
+ * // Track payment processing
188
+ * metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
189
+ * metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
190
+ * ```
191
+ */
192
+ trackOutcome(operationName: string, status: OutcomeStatus, attributes?: EventAttributes): void;
193
+ /**
194
+ * Track value metrics
195
+ *
196
+ * Record numerical values like revenue, transaction amounts,
197
+ * item counts, processing times, engagement scores, etc.
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * // Track revenue
202
+ * metrics.trackValue('order.revenue', 149.99, {
203
+ * currency: 'USD',
204
+ * productCategory: 'electronics'
205
+ * })
206
+ *
207
+ * // Track items per cart
208
+ * metrics.trackValue('cart.item_count', 5, {
209
+ * userId: '123'
210
+ * })
211
+ *
212
+ * // Track processing time
213
+ * metrics.trackValue('api.response_time', 250, {
214
+ * unit: 'ms',
215
+ * endpoint: '/api/checkout'
216
+ * })
217
+ * ```
218
+ */
219
+ trackValue(metricName: string, value: number, attributes?: EventAttributes): void;
220
+ }
221
+ /**
222
+ * Get or create a Metrics instance for a service
223
+ *
224
+ * @param serviceName - Service name for metric namespacing
225
+ * @param logger - Optional logger
226
+ * @returns Metrics instance
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * const metrics = getMetrics('checkout')
231
+ * metrics.trackEvent('order.completed', { orderId: '123' })
232
+ * ```
233
+ */
234
+ declare function getMetrics(serviceName: string, logger?: Logger): Metric;
235
+ /**
236
+ * Reset all metrics instances (mainly for testing)
237
+ */
238
+ declare function resetMetrics(): void;
239
+
240
+ export { EventAttributes, FunnelStatus, Metric, type MetricConfig, type MetricsOptions, OutcomeStatus, getMetrics, resetMetrics };
@@ -0,0 +1,240 @@
1
+ import { Logger } from './logger.js';
2
+ import { EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.js';
3
+ import { MetricsCollector } from './metric-testing.js';
4
+ import 'pino';
5
+
6
+ /**
7
+ * Metrics API for OpenTelemetry
8
+ *
9
+ * Track business metrics for OpenTelemetry (Prometheus/Grafana).
10
+ * For business people who think in metrics.
11
+ *
12
+ * @example Track business metrics
13
+ * ```typescript
14
+ * const metrics = new Metric('checkout')
15
+ *
16
+ * // Track events as metrics
17
+ * metrics.trackEvent('order.completed', {
18
+ * amount: 99.99,
19
+ * currency: 'USD'
20
+ * })
21
+ *
22
+ * // Track conversion funnels
23
+ * metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
24
+ * metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
25
+ *
26
+ * // Track outcomes
27
+ * metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
28
+ * metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
29
+ *
30
+ * // Track values
31
+ * metrics.trackValue('revenue', 149.99, { currency: 'USD' })
32
+ * ```
33
+ */
34
+
35
+ /**
36
+ * Metrics class for tracking business metrics in OpenTelemetry
37
+ *
38
+ * Track critical business indicators such as:
39
+ * - User events (signups, purchases, feature usage) as metrics
40
+ * - Conversion funnels (signup → activation → purchase)
41
+ * - Business outcomes (success/failure rates)
42
+ * - Value metrics (revenue, counts, etc.)
43
+ *
44
+ * All metrics are sent to OpenTelemetry (OTLP/Prometheus/Grafana).
45
+ */
46
+ /**
47
+ * Metric configuration for customizing metric names and descriptions
48
+ */
49
+ interface MetricConfig {
50
+ /** Metric name (e.g., 'metrics.events' or 'custom.events') */
51
+ name?: string;
52
+ /** Metric description */
53
+ description?: string;
54
+ /** Metric unit (default: '1') */
55
+ unit?: string;
56
+ }
57
+ /**
58
+ * Metrics options
59
+ */
60
+ interface MetricsOptions {
61
+ /** Optional logger for audit trail */
62
+ logger?: Logger;
63
+ /** Optional collector for testing (captures metrics in memory) */
64
+ collector?: MetricsCollector;
65
+ /**
66
+ * Namespace for metrics (default: 'metrics')
67
+ * Results in metrics like: {serviceName}.{namespace}.events
68
+ */
69
+ namespace?: string;
70
+ /**
71
+ * Custom metric configurations
72
+ * Override metric names, descriptions, and units
73
+ */
74
+ metrics?: {
75
+ events?: MetricConfig;
76
+ funnel?: MetricConfig;
77
+ outcomes?: MetricConfig;
78
+ value?: MetricConfig;
79
+ };
80
+ }
81
+ declare class Metric {
82
+ private serviceName;
83
+ private eventCounter;
84
+ private funnelCounter;
85
+ private outcomeCounter;
86
+ private valueHistogram;
87
+ private logger?;
88
+ private collector?;
89
+ /**
90
+ * Create a new Metrics instance
91
+ *
92
+ * @param serviceName - Service name for metric namespacing
93
+ * @param options - Optional configuration (logger, collector, namespace, metrics)
94
+ *
95
+ * @example Basic usage (default 'metrics' namespace)
96
+ * ```typescript
97
+ * const metrics = new Metric('checkout');
98
+ * // Creates: checkout.metrics.events, checkout.metrics.funnel, etc.
99
+ * ```
100
+ *
101
+ * @example Custom namespace
102
+ * ```typescript
103
+ * const metrics = new Metric('api', { namespace: 'business' });
104
+ * // Creates: api.business.events, api.business.funnel, etc.
105
+ * ```
106
+ *
107
+ * @example Custom metric names and descriptions
108
+ * ```typescript
109
+ * const metrics = new Metric('payments', {
110
+ * metrics: {
111
+ * outcomes: {
112
+ * name: 'payments.transactions',
113
+ * description: 'Payment transaction outcomes',
114
+ * unit: 'transactions'
115
+ * },
116
+ * value: {
117
+ * name: 'payments.revenue',
118
+ * description: 'Payment revenue in USD',
119
+ * unit: 'USD'
120
+ * }
121
+ * }
122
+ * });
123
+ * ```
124
+ */
125
+ constructor(serviceName: string, options?: MetricsOptions);
126
+ /**
127
+ * Track a business event as a metric
128
+ *
129
+ * Use this for tracking user actions, business events, product usage as metrics:
130
+ * - "user.signup"
131
+ * - "order.completed"
132
+ * - "feature.used"
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * // Track user signup as metric
137
+ * metrics.trackEvent('user.signup', {
138
+ * userId: '123',
139
+ * plan: 'pro'
140
+ * })
141
+ *
142
+ * // Track order as metric
143
+ * metrics.trackEvent('order.completed', {
144
+ * orderId: 'ord_123',
145
+ * amount: 99.99
146
+ * })
147
+ * ```
148
+ */
149
+ trackEvent(eventName: string, attributes?: EventAttributes): void;
150
+ /**
151
+ * Track conversion funnel steps as metrics
152
+ *
153
+ * Monitor where users drop off in multi-step processes.
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * // Track signup funnel
158
+ * metrics.trackFunnelStep('signup', 'started', { userId: '123' })
159
+ * metrics.trackFunnelStep('signup', 'email_verified', { userId: '123' })
160
+ * metrics.trackFunnelStep('signup', 'completed', { userId: '123' })
161
+ *
162
+ * // Track checkout flow
163
+ * metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
164
+ * metrics.trackFunnelStep('checkout', 'payment_info', { cartValue: 99.99 })
165
+ * metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
166
+ * ```
167
+ */
168
+ trackFunnelStep(funnelName: string, status: FunnelStatus, attributes?: EventAttributes): void;
169
+ /**
170
+ * Track outcomes (success/failure/partial) as metrics
171
+ *
172
+ * Monitor success rates of critical operations.
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * // Track email delivery
177
+ * metrics.trackOutcome('email.delivery', 'success', {
178
+ * recipientType: 'user',
179
+ * emailType: 'welcome'
180
+ * })
181
+ *
182
+ * metrics.trackOutcome('email.delivery', 'failure', {
183
+ * recipientType: 'user',
184
+ * errorCode: 'invalid_email'
185
+ * })
186
+ *
187
+ * // Track payment processing
188
+ * metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
189
+ * metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
190
+ * ```
191
+ */
192
+ trackOutcome(operationName: string, status: OutcomeStatus, attributes?: EventAttributes): void;
193
+ /**
194
+ * Track value metrics
195
+ *
196
+ * Record numerical values like revenue, transaction amounts,
197
+ * item counts, processing times, engagement scores, etc.
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * // Track revenue
202
+ * metrics.trackValue('order.revenue', 149.99, {
203
+ * currency: 'USD',
204
+ * productCategory: 'electronics'
205
+ * })
206
+ *
207
+ * // Track items per cart
208
+ * metrics.trackValue('cart.item_count', 5, {
209
+ * userId: '123'
210
+ * })
211
+ *
212
+ * // Track processing time
213
+ * metrics.trackValue('api.response_time', 250, {
214
+ * unit: 'ms',
215
+ * endpoint: '/api/checkout'
216
+ * })
217
+ * ```
218
+ */
219
+ trackValue(metricName: string, value: number, attributes?: EventAttributes): void;
220
+ }
221
+ /**
222
+ * Get or create a Metrics instance for a service
223
+ *
224
+ * @param serviceName - Service name for metric namespacing
225
+ * @param logger - Optional logger
226
+ * @returns Metrics instance
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * const metrics = getMetrics('checkout')
231
+ * metrics.trackEvent('order.completed', { orderId: '123' })
232
+ * ```
233
+ */
234
+ declare function getMetrics(serviceName: string, logger?: Logger): Metric;
235
+ /**
236
+ * Reset all metrics instances (mainly for testing)
237
+ */
238
+ declare function resetMetrics(): void;
239
+
240
+ export { EventAttributes, FunnelStatus, Metric, type MetricConfig, type MetricsOptions, OutcomeStatus, getMetrics, resetMetrics };
package/dist/metric.js ADDED
@@ -0,0 +1,9 @@
1
+ export { Metric, getMetrics, resetMetrics } from './chunk-2LNRY4QK.js';
2
+ import './chunk-5ZN622AO.js';
3
+ import './chunk-LITNXTTT.js';
4
+ import './chunk-5GWX5LFW.js';
5
+ import './chunk-KVGNW3FC.js';
6
+ import './chunk-P6JUDYNO.js';
7
+ import './chunk-Z6ZWNWWR.js';
8
+ //# sourceMappingURL=metric.js.map
9
+ //# sourceMappingURL=metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"metric.js"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ require('./chunk-G7VZBCD6.cjs');
4
+ var sdkTraceBase = require('@opentelemetry/sdk-trace-base');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "BatchSpanProcessor", {
9
+ enumerable: true,
10
+ get: function () { return sdkTraceBase.BatchSpanProcessor; }
11
+ });
12
+ Object.defineProperty(exports, "SimpleSpanProcessor", {
13
+ enumerable: true,
14
+ get: function () { return sdkTraceBase.SimpleSpanProcessor; }
15
+ });
16
+ //# sourceMappingURL=processors.cjs.map
17
+ //# sourceMappingURL=processors.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"processors.cjs","sourcesContent":[]}
@@ -0,0 +1 @@
1
+ export { BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
@@ -0,0 +1 @@
1
+ export { BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
@@ -0,0 +1,4 @@
1
+ import './chunk-Z6ZWNWWR.js';
2
+ export { BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
3
+ //# sourceMappingURL=processors.js.map
4
+ //# sourceMappingURL=processors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"processors.js","sourcesContent":[]}