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,282 @@
1
+ import { Logger } from './logger.cjs';
2
+ import { EventSubscriber, EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.cjs';
3
+ import { EventCollector } from './event-testing.cjs';
4
+ import 'pino';
5
+
6
+ /**
7
+ * Events API for product events platforms
8
+ *
9
+ * Track user behavior, business events, and critical actions.
10
+ * Sends to product events platforms (PostHog, Mixpanel, Amplitude) via subscribers.
11
+ * For business people who think in events/funnels.
12
+ *
13
+ * For OpenTelemetry metrics (Prometheus/Grafana), use the Metrics class instead.
14
+ *
15
+ * @example Recommended: Configure subscribers in init(), use track() function
16
+ * ```typescript
17
+ * import { init, track } from 'autotel';
18
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
19
+ *
20
+ * init({
21
+ * service: 'my-app',
22
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_...' })]
23
+ * });
24
+ *
25
+ * // Track events - uses subscribers from init()
26
+ * track('application.submitted', { jobId: '123', userId: '456' });
27
+ * ```
28
+ *
29
+ * @example Create Event instance (inherits subscribers from init)
30
+ * ```typescript
31
+ * import { Event } from 'autotel/event';
32
+ *
33
+ * // Uses subscribers configured in init()
34
+ * const event = new Event('job-application');
35
+ * event.trackEvent('application.submitted', { jobId: '123' });
36
+ * ```
37
+ *
38
+ * @example Override subscribers for specific Event instance
39
+ * ```typescript
40
+ * import { Event } from 'autotel/event';
41
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
42
+ *
43
+ * // Override: use different subscribers for this instance
44
+ * const event = new Event('job-application', {
45
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_different_project' })]
46
+ * });
47
+ *
48
+ * event.trackEvent('application.submitted', { jobId: '123' });
49
+ * ```
50
+ */
51
+
52
+ /**
53
+ * Events class for tracking user behavior and product events
54
+ *
55
+ * Track critical indicators such as:
56
+ * - User events (signups, purchases, feature usage)
57
+ * - Conversion funnels (signup → activation → purchase)
58
+ * - Business outcomes (success/failure rates)
59
+ * - Product metrics (revenue, engagement, retention)
60
+ *
61
+ * All events are sent to events platforms via subscribers (PostHog, Mixpanel, etc.).
62
+ * For OpenTelemetry metrics, use the Metrics class instead.
63
+ */
64
+ /**
65
+ * Events options
66
+ */
67
+ interface EventsOptions {
68
+ /** Optional logger for audit trail */
69
+ logger?: Logger;
70
+ /** Optional collector for testing (captures events in memory) */
71
+ collector?: EventCollector;
72
+ /**
73
+ * Optional subscribers to send events to other platforms
74
+ * (e.g., PostHog, Mixpanel, Amplitude)
75
+ *
76
+ * **Subscriber Resolution**:
77
+ * - If provided → uses these subscribers (instance override)
78
+ * - If not provided → falls back to subscribers from `init()` (global config)
79
+ * - If neither → no subscribers (events logged only)
80
+ *
81
+ * Install `autotel-subscribers` package for ready-made subscribers
82
+ */
83
+ subscribers?: EventSubscriber[];
84
+ }
85
+ declare class Event {
86
+ private serviceName;
87
+ private logger?;
88
+ private collector?;
89
+ private subscribers;
90
+ private hasSubscribers;
91
+ private circuitBreakers;
92
+ /**
93
+ * Create a new Event instance
94
+ *
95
+ * **Note**: Most users should use `init()` + `track()` instead of creating Event instances directly.
96
+ *
97
+ * **Subscriber Resolution**:
98
+ * - If `subscribers` provided in options → uses those (instance override)
99
+ * - If `subscribers` not provided → falls back to subscribers from `init()` (global config)
100
+ * - If neither → no subscribers (events logged only)
101
+ *
102
+ * @param serviceName - Service name for identifying events
103
+ * @param options - Optional configuration (logger, collector, subscribers)
104
+ *
105
+ * @example Recommended: Use track() with init()
106
+ * ```typescript
107
+ * import { init, track } from 'autotel';
108
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
109
+ *
110
+ * init({
111
+ * service: 'checkout',
112
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_...' })]
113
+ * });
114
+ *
115
+ * track('purchase.completed', { amount: 99.99 });
116
+ * ```
117
+ *
118
+ * @example Inherit subscribers from init()
119
+ * ```typescript
120
+ * // Uses subscribers configured in init()
121
+ * const event = new Event('checkout');
122
+ * event.trackEvent('purchase.completed', { amount: 99.99 });
123
+ * ```
124
+ *
125
+ * @example Override subscribers for this instance
126
+ * ```typescript
127
+ * import { Event } from 'autotel/event';
128
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
129
+ *
130
+ * // Override: use different subscribers for this instance only
131
+ * const event = new Event('checkout', {
132
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_different_project' })]
133
+ * });
134
+ * ```
135
+ */
136
+ constructor(serviceName: string, options?: EventsOptions);
137
+ /**
138
+ * Automatically enrich attributes with all available telemetry context
139
+ *
140
+ * Auto-captures:
141
+ * - Resource attributes: service.version, deployment.environment
142
+ * - Trace context: traceId, spanId, correlationId
143
+ * - Operation context: operation.name
144
+ */
145
+ private enrichWithTelemetryContext;
146
+ /**
147
+ * Track a business event
148
+ *
149
+ * Use this for tracking user actions, business events, product usage:
150
+ * - "user.signup"
151
+ * - "order.completed"
152
+ * - "feature.used"
153
+ *
154
+ * Events are sent to configured subscribers (PostHog, Mixpanel, etc.).
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * // Track user signup
159
+ * events.trackEvent('user.signup', {
160
+ * userId: '123',
161
+ * plan: 'pro'
162
+ * })
163
+ *
164
+ * // Track order
165
+ * events.trackEvent('order.completed', {
166
+ * orderId: 'ord_123',
167
+ * amount: 99.99
168
+ * })
169
+ * ```
170
+ */
171
+ trackEvent(eventName: string, attributes?: EventAttributes): void;
172
+ /**
173
+ * Notify all subscribers concurrently without blocking
174
+ * Uses circuit breakers to protect against failing subscribers
175
+ * Uses Promise.allSettled to prevent subscriber errors from affecting other subscribers
176
+ */
177
+ private notifySubscribers;
178
+ /**
179
+ * Track conversion funnel steps
180
+ *
181
+ * Monitor where users drop off in multi-step processes.
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * // Track signup funnel
186
+ * events.trackFunnelStep('signup', 'started', { userId: '123' })
187
+ * events.trackFunnelStep('signup', 'email_verified', { userId: '123' })
188
+ * events.trackFunnelStep('signup', 'completed', { userId: '123' })
189
+ *
190
+ * // Track checkout flow
191
+ * events.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
192
+ * events.trackFunnelStep('checkout', 'payment_info', { cartValue: 99.99 })
193
+ * events.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
194
+ * ```
195
+ */
196
+ trackFunnelStep(funnelName: string, status: FunnelStatus, attributes?: EventAttributes): void;
197
+ /**
198
+ * Track outcomes (success/failure/partial)
199
+ *
200
+ * Monitor success rates of critical operations.
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * // Track email delivery
205
+ * events.trackOutcome('email.delivery', 'success', {
206
+ * recipientType: 'user',
207
+ * emailType: 'welcome'
208
+ * })
209
+ *
210
+ * events.trackOutcome('email.delivery', 'failure', {
211
+ * recipientType: 'user',
212
+ * errorCode: 'invalid_email'
213
+ * })
214
+ *
215
+ * // Track payment processing
216
+ * events.trackOutcome('payment.process', 'success', { amount: 99.99 })
217
+ * events.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
218
+ * ```
219
+ */
220
+ trackOutcome(operationName: string, status: OutcomeStatus, attributes?: EventAttributes): void;
221
+ /**
222
+ * Track value metrics
223
+ *
224
+ * Record numerical values like revenue, transaction amounts,
225
+ * item counts, processing times, engagement scores, etc.
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * // Track revenue
230
+ * events.trackValue('order.revenue', 149.99, {
231
+ * currency: 'USD',
232
+ * productCategory: 'electronics'
233
+ * })
234
+ *
235
+ * // Track items per cart
236
+ * events.trackValue('cart.item_count', 5, {
237
+ * userId: '123'
238
+ * })
239
+ *
240
+ * // Track processing time
241
+ * events.trackValue('api.response_time', 250, {
242
+ * unit: 'ms',
243
+ * endpoint: '/api/checkout'
244
+ * })
245
+ * ```
246
+ */
247
+ trackValue(metricName: string, value: number, attributes?: EventAttributes): void;
248
+ /**
249
+ * Flush all subscribers and wait for pending events
250
+ *
251
+ * Call this before shutdown to ensure all events are delivered.
252
+ *
253
+ * @example
254
+ * ```typescript
255
+ * const event =new Event('app', { subscribers: [...] });
256
+ *
257
+ * // Before shutdown
258
+ * await events.flush();
259
+ * ```
260
+ */
261
+ flush(): Promise<void>;
262
+ }
263
+ /**
264
+ * Get or create an Events instance for a service
265
+ *
266
+ * @param serviceName - Service name for identifying events
267
+ * @param logger - Optional logger
268
+ * @returns Events instance
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * const event =getEvents('job-application')
273
+ * events.trackEvent('application.submitted', { jobId: '123' })
274
+ * ```
275
+ */
276
+ declare function getEvents(serviceName: string, logger?: Logger): Event;
277
+ /**
278
+ * Reset all events instances (mainly for testing)
279
+ */
280
+ declare function resetEvents(): void;
281
+
282
+ export { Event, EventAttributes, type EventsOptions, FunnelStatus, OutcomeStatus, getEvents, resetEvents };
@@ -0,0 +1,282 @@
1
+ import { Logger } from './logger.js';
2
+ import { EventSubscriber, EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.js';
3
+ import { EventCollector } from './event-testing.js';
4
+ import 'pino';
5
+
6
+ /**
7
+ * Events API for product events platforms
8
+ *
9
+ * Track user behavior, business events, and critical actions.
10
+ * Sends to product events platforms (PostHog, Mixpanel, Amplitude) via subscribers.
11
+ * For business people who think in events/funnels.
12
+ *
13
+ * For OpenTelemetry metrics (Prometheus/Grafana), use the Metrics class instead.
14
+ *
15
+ * @example Recommended: Configure subscribers in init(), use track() function
16
+ * ```typescript
17
+ * import { init, track } from 'autotel';
18
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
19
+ *
20
+ * init({
21
+ * service: 'my-app',
22
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_...' })]
23
+ * });
24
+ *
25
+ * // Track events - uses subscribers from init()
26
+ * track('application.submitted', { jobId: '123', userId: '456' });
27
+ * ```
28
+ *
29
+ * @example Create Event instance (inherits subscribers from init)
30
+ * ```typescript
31
+ * import { Event } from 'autotel/event';
32
+ *
33
+ * // Uses subscribers configured in init()
34
+ * const event = new Event('job-application');
35
+ * event.trackEvent('application.submitted', { jobId: '123' });
36
+ * ```
37
+ *
38
+ * @example Override subscribers for specific Event instance
39
+ * ```typescript
40
+ * import { Event } from 'autotel/event';
41
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
42
+ *
43
+ * // Override: use different subscribers for this instance
44
+ * const event = new Event('job-application', {
45
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_different_project' })]
46
+ * });
47
+ *
48
+ * event.trackEvent('application.submitted', { jobId: '123' });
49
+ * ```
50
+ */
51
+
52
+ /**
53
+ * Events class for tracking user behavior and product events
54
+ *
55
+ * Track critical indicators such as:
56
+ * - User events (signups, purchases, feature usage)
57
+ * - Conversion funnels (signup → activation → purchase)
58
+ * - Business outcomes (success/failure rates)
59
+ * - Product metrics (revenue, engagement, retention)
60
+ *
61
+ * All events are sent to events platforms via subscribers (PostHog, Mixpanel, etc.).
62
+ * For OpenTelemetry metrics, use the Metrics class instead.
63
+ */
64
+ /**
65
+ * Events options
66
+ */
67
+ interface EventsOptions {
68
+ /** Optional logger for audit trail */
69
+ logger?: Logger;
70
+ /** Optional collector for testing (captures events in memory) */
71
+ collector?: EventCollector;
72
+ /**
73
+ * Optional subscribers to send events to other platforms
74
+ * (e.g., PostHog, Mixpanel, Amplitude)
75
+ *
76
+ * **Subscriber Resolution**:
77
+ * - If provided → uses these subscribers (instance override)
78
+ * - If not provided → falls back to subscribers from `init()` (global config)
79
+ * - If neither → no subscribers (events logged only)
80
+ *
81
+ * Install `autotel-subscribers` package for ready-made subscribers
82
+ */
83
+ subscribers?: EventSubscriber[];
84
+ }
85
+ declare class Event {
86
+ private serviceName;
87
+ private logger?;
88
+ private collector?;
89
+ private subscribers;
90
+ private hasSubscribers;
91
+ private circuitBreakers;
92
+ /**
93
+ * Create a new Event instance
94
+ *
95
+ * **Note**: Most users should use `init()` + `track()` instead of creating Event instances directly.
96
+ *
97
+ * **Subscriber Resolution**:
98
+ * - If `subscribers` provided in options → uses those (instance override)
99
+ * - If `subscribers` not provided → falls back to subscribers from `init()` (global config)
100
+ * - If neither → no subscribers (events logged only)
101
+ *
102
+ * @param serviceName - Service name for identifying events
103
+ * @param options - Optional configuration (logger, collector, subscribers)
104
+ *
105
+ * @example Recommended: Use track() with init()
106
+ * ```typescript
107
+ * import { init, track } from 'autotel';
108
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
109
+ *
110
+ * init({
111
+ * service: 'checkout',
112
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_...' })]
113
+ * });
114
+ *
115
+ * track('purchase.completed', { amount: 99.99 });
116
+ * ```
117
+ *
118
+ * @example Inherit subscribers from init()
119
+ * ```typescript
120
+ * // Uses subscribers configured in init()
121
+ * const event = new Event('checkout');
122
+ * event.trackEvent('purchase.completed', { amount: 99.99 });
123
+ * ```
124
+ *
125
+ * @example Override subscribers for this instance
126
+ * ```typescript
127
+ * import { Event } from 'autotel/event';
128
+ * import { PostHogSubscriber } from 'autotel-subscribers/posthog';
129
+ *
130
+ * // Override: use different subscribers for this instance only
131
+ * const event = new Event('checkout', {
132
+ * subscribers: [new PostHogSubscriber({ apiKey: 'phc_different_project' })]
133
+ * });
134
+ * ```
135
+ */
136
+ constructor(serviceName: string, options?: EventsOptions);
137
+ /**
138
+ * Automatically enrich attributes with all available telemetry context
139
+ *
140
+ * Auto-captures:
141
+ * - Resource attributes: service.version, deployment.environment
142
+ * - Trace context: traceId, spanId, correlationId
143
+ * - Operation context: operation.name
144
+ */
145
+ private enrichWithTelemetryContext;
146
+ /**
147
+ * Track a business event
148
+ *
149
+ * Use this for tracking user actions, business events, product usage:
150
+ * - "user.signup"
151
+ * - "order.completed"
152
+ * - "feature.used"
153
+ *
154
+ * Events are sent to configured subscribers (PostHog, Mixpanel, etc.).
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * // Track user signup
159
+ * events.trackEvent('user.signup', {
160
+ * userId: '123',
161
+ * plan: 'pro'
162
+ * })
163
+ *
164
+ * // Track order
165
+ * events.trackEvent('order.completed', {
166
+ * orderId: 'ord_123',
167
+ * amount: 99.99
168
+ * })
169
+ * ```
170
+ */
171
+ trackEvent(eventName: string, attributes?: EventAttributes): void;
172
+ /**
173
+ * Notify all subscribers concurrently without blocking
174
+ * Uses circuit breakers to protect against failing subscribers
175
+ * Uses Promise.allSettled to prevent subscriber errors from affecting other subscribers
176
+ */
177
+ private notifySubscribers;
178
+ /**
179
+ * Track conversion funnel steps
180
+ *
181
+ * Monitor where users drop off in multi-step processes.
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * // Track signup funnel
186
+ * events.trackFunnelStep('signup', 'started', { userId: '123' })
187
+ * events.trackFunnelStep('signup', 'email_verified', { userId: '123' })
188
+ * events.trackFunnelStep('signup', 'completed', { userId: '123' })
189
+ *
190
+ * // Track checkout flow
191
+ * events.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
192
+ * events.trackFunnelStep('checkout', 'payment_info', { cartValue: 99.99 })
193
+ * events.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
194
+ * ```
195
+ */
196
+ trackFunnelStep(funnelName: string, status: FunnelStatus, attributes?: EventAttributes): void;
197
+ /**
198
+ * Track outcomes (success/failure/partial)
199
+ *
200
+ * Monitor success rates of critical operations.
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * // Track email delivery
205
+ * events.trackOutcome('email.delivery', 'success', {
206
+ * recipientType: 'user',
207
+ * emailType: 'welcome'
208
+ * })
209
+ *
210
+ * events.trackOutcome('email.delivery', 'failure', {
211
+ * recipientType: 'user',
212
+ * errorCode: 'invalid_email'
213
+ * })
214
+ *
215
+ * // Track payment processing
216
+ * events.trackOutcome('payment.process', 'success', { amount: 99.99 })
217
+ * events.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
218
+ * ```
219
+ */
220
+ trackOutcome(operationName: string, status: OutcomeStatus, attributes?: EventAttributes): void;
221
+ /**
222
+ * Track value metrics
223
+ *
224
+ * Record numerical values like revenue, transaction amounts,
225
+ * item counts, processing times, engagement scores, etc.
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * // Track revenue
230
+ * events.trackValue('order.revenue', 149.99, {
231
+ * currency: 'USD',
232
+ * productCategory: 'electronics'
233
+ * })
234
+ *
235
+ * // Track items per cart
236
+ * events.trackValue('cart.item_count', 5, {
237
+ * userId: '123'
238
+ * })
239
+ *
240
+ * // Track processing time
241
+ * events.trackValue('api.response_time', 250, {
242
+ * unit: 'ms',
243
+ * endpoint: '/api/checkout'
244
+ * })
245
+ * ```
246
+ */
247
+ trackValue(metricName: string, value: number, attributes?: EventAttributes): void;
248
+ /**
249
+ * Flush all subscribers and wait for pending events
250
+ *
251
+ * Call this before shutdown to ensure all events are delivered.
252
+ *
253
+ * @example
254
+ * ```typescript
255
+ * const event =new Event('app', { subscribers: [...] });
256
+ *
257
+ * // Before shutdown
258
+ * await events.flush();
259
+ * ```
260
+ */
261
+ flush(): Promise<void>;
262
+ }
263
+ /**
264
+ * Get or create an Events instance for a service
265
+ *
266
+ * @param serviceName - Service name for identifying events
267
+ * @param logger - Optional logger
268
+ * @returns Events instance
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * const event =getEvents('job-application')
273
+ * events.trackEvent('application.submitted', { jobId: '123' })
274
+ * ```
275
+ */
276
+ declare function getEvents(serviceName: string, logger?: Logger): Event;
277
+ /**
278
+ * Reset all events instances (mainly for testing)
279
+ */
280
+ declare function resetEvents(): void;
281
+
282
+ export { Event, EventAttributes, type EventsOptions, FunnelStatus, OutcomeStatus, getEvents, resetEvents };
package/dist/event.js ADDED
@@ -0,0 +1,13 @@
1
+ export { Event, getEvents, resetEvents } from './chunk-WFJ7L2RV.js';
2
+ import './chunk-LITNXTTT.js';
3
+ import './chunk-BZHG5IZ4.js';
4
+ import './chunk-UL33I6IS.js';
5
+ import './chunk-3HENGDW2.js';
6
+ import './chunk-X4RMFFMR.js';
7
+ import './chunk-5R2M36QB.js';
8
+ import './chunk-5GWX5LFW.js';
9
+ import './chunk-KVGNW3FC.js';
10
+ import './chunk-P6JUDYNO.js';
11
+ import './chunk-Z6ZWNWWR.js';
12
+ //# sourceMappingURL=event.js.map
13
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"event.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, "ConsoleSpanExporter", {
9
+ enumerable: true,
10
+ get: function () { return sdkTraceBase.ConsoleSpanExporter; }
11
+ });
12
+ Object.defineProperty(exports, "InMemorySpanExporter", {
13
+ enumerable: true,
14
+ get: function () { return sdkTraceBase.InMemorySpanExporter; }
15
+ });
16
+ //# sourceMappingURL=exporters.cjs.map
17
+ //# sourceMappingURL=exporters.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"exporters.cjs","sourcesContent":[]}
@@ -0,0 +1 @@
1
+ export { ConsoleSpanExporter, InMemorySpanExporter } from '@opentelemetry/sdk-trace-base';
@@ -0,0 +1 @@
1
+ export { ConsoleSpanExporter, InMemorySpanExporter } from '@opentelemetry/sdk-trace-base';
@@ -0,0 +1,4 @@
1
+ import './chunk-Z6ZWNWWR.js';
2
+ export { ConsoleSpanExporter, InMemorySpanExporter } from '@opentelemetry/sdk-trace-base';
3
+ //# sourceMappingURL=exporters.js.map
4
+ //# sourceMappingURL=exporters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"exporters.js","sourcesContent":[]}
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var chunkWBWNM6LB_cjs = require('./chunk-WBWNM6LB.cjs');
4
+ require('./chunk-TRI4V5BF.cjs');
5
+ require('./chunk-NHCNRQD3.cjs');
6
+ require('./chunk-YLPNXZFI.cjs');
7
+ require('./chunk-ABPEQ6RK.cjs');
8
+ require('./chunk-GVLK7YUU.cjs');
9
+ require('./chunk-HE6T6FIX.cjs');
10
+ require('./chunk-4OAT42CA.cjs');
11
+ require('./chunk-Y4Y2S7BM.cjs');
12
+ require('./chunk-URRW6M2C.cjs');
13
+ require('./chunk-G7VZBCD6.cjs');
14
+
15
+
16
+
17
+ Object.defineProperty(exports, "ctx", {
18
+ enumerable: true,
19
+ get: function () { return chunkWBWNM6LB_cjs.ctx; }
20
+ });
21
+ Object.defineProperty(exports, "instrument", {
22
+ enumerable: true,
23
+ get: function () { return chunkWBWNM6LB_cjs.instrument; }
24
+ });
25
+ Object.defineProperty(exports, "span", {
26
+ enumerable: true,
27
+ get: function () { return chunkWBWNM6LB_cjs.span; }
28
+ });
29
+ Object.defineProperty(exports, "trace", {
30
+ enumerable: true,
31
+ get: function () { return chunkWBWNM6LB_cjs.trace; }
32
+ });
33
+ Object.defineProperty(exports, "withBaggage", {
34
+ enumerable: true,
35
+ get: function () { return chunkWBWNM6LB_cjs.withBaggage; }
36
+ });
37
+ Object.defineProperty(exports, "withNewContext", {
38
+ enumerable: true,
39
+ get: function () { return chunkWBWNM6LB_cjs.withNewContext; }
40
+ });
41
+ Object.defineProperty(exports, "withTracing", {
42
+ enumerable: true,
43
+ get: function () { return chunkWBWNM6LB_cjs.withTracing; }
44
+ });
45
+ //# sourceMappingURL=functional.cjs.map
46
+ //# sourceMappingURL=functional.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"functional.cjs"}