autotel 3.6.0 → 4.0.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 (617) hide show
  1. package/dist/attribute-redacting-processor-DtTS9xxh.d.cts +175 -0
  2. package/dist/attribute-redacting-processor-DtTS9xxh.d.cts.map +1 -0
  3. package/dist/attribute-redacting-processor-DtTS9xxh.d.ts +175 -0
  4. package/dist/attribute-redacting-processor-DtTS9xxh.d.ts.map +1 -0
  5. package/dist/attribute-redacting-processor.cjs +374 -33
  6. package/dist/attribute-redacting-processor.cjs.map +1 -1
  7. package/dist/attribute-redacting-processor.d.cts +2 -207
  8. package/dist/attribute-redacting-processor.d.ts +2 -207
  9. package/dist/attribute-redacting-processor.js +368 -2
  10. package/dist/attribute-redacting-processor.js.map +1 -1
  11. package/dist/attributes-CmYpdqCN.js +591 -0
  12. package/dist/attributes-CmYpdqCN.js.map +1 -0
  13. package/dist/attributes-PZ5doLgw.cjs +704 -0
  14. package/dist/attributes-PZ5doLgw.cjs.map +1 -0
  15. package/dist/attributes.cjs +21 -85
  16. package/dist/attributes.d.cts +2 -20
  17. package/dist/attributes.d.ts +2 -20
  18. package/dist/attributes.js +3 -5
  19. package/dist/auto.cjs +50 -28
  20. package/dist/auto.cjs.map +1 -1
  21. package/dist/auto.d.cts +1 -2
  22. package/dist/auto.d.ts +1 -2
  23. package/dist/auto.js +49 -23
  24. package/dist/auto.js.map +1 -1
  25. package/dist/business-baggage.cjs +357 -13
  26. package/dist/business-baggage.cjs.map +1 -1
  27. package/dist/business-baggage.d.cts +106 -139
  28. package/dist/business-baggage.d.cts.map +1 -0
  29. package/dist/business-baggage.d.ts +106 -139
  30. package/dist/business-baggage.d.ts.map +1 -0
  31. package/dist/business-baggage.js +357 -2
  32. package/dist/business-baggage.js.map +1 -1
  33. package/dist/canonical-log-line-processor--RlFDHhm.cjs +377 -0
  34. package/dist/canonical-log-line-processor--RlFDHhm.cjs.map +1 -0
  35. package/dist/canonical-log-line-processor-BcRuAdRk.d.ts +147 -0
  36. package/dist/canonical-log-line-processor-BcRuAdRk.d.ts.map +1 -0
  37. package/dist/canonical-log-line-processor-DbBQT5vY.js +366 -0
  38. package/dist/canonical-log-line-processor-DbBQT5vY.js.map +1 -0
  39. package/dist/canonical-log-line-processor-xvjMgtpF.d.cts +147 -0
  40. package/dist/canonical-log-line-processor-xvjMgtpF.d.cts.map +1 -0
  41. package/dist/config.cjs +118 -22
  42. package/dist/config.cjs.map +1 -1
  43. package/dist/config.d.cts +33 -45
  44. package/dist/config.d.cts.map +1 -0
  45. package/dist/config.d.ts +33 -45
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +116 -3
  48. package/dist/config.js.map +1 -1
  49. package/dist/correlated-events-Bzh5y-UB.js +28 -0
  50. package/dist/correlated-events-Bzh5y-UB.js.map +1 -0
  51. package/dist/correlated-events-kSwLo3mi.cjs +34 -0
  52. package/dist/correlated-events-kSwLo3mi.cjs.map +1 -0
  53. package/dist/correlation-id.cjs +11 -54
  54. package/dist/correlation-id.d.cts +6 -5
  55. package/dist/correlation-id.d.cts.map +1 -0
  56. package/dist/correlation-id.d.ts +6 -5
  57. package/dist/correlation-id.d.ts.map +1 -0
  58. package/dist/correlation-id.js +3 -17
  59. package/dist/db.cjs +244 -209
  60. package/dist/db.cjs.map +1 -1
  61. package/dist/db.d.cts +28 -26
  62. package/dist/db.d.cts.map +1 -0
  63. package/dist/db.d.ts +28 -26
  64. package/dist/db.d.ts.map +1 -0
  65. package/dist/db.js +243 -207
  66. package/dist/db.js.map +1 -1
  67. package/dist/decorators.cjs +39 -66
  68. package/dist/decorators.cjs.map +1 -1
  69. package/dist/decorators.d.cts +10 -37
  70. package/dist/decorators.d.cts.map +1 -0
  71. package/dist/decorators.d.ts +10 -37
  72. package/dist/decorators.d.ts.map +1 -0
  73. package/dist/decorators.js +38 -64
  74. package/dist/decorators.js.map +1 -1
  75. package/dist/define-event-CreknLm3.d.ts +25 -0
  76. package/dist/define-event-CreknLm3.d.ts.map +1 -0
  77. package/dist/define-event-HZRizPwz.d.cts +25 -0
  78. package/dist/define-event-HZRizPwz.d.cts.map +1 -0
  79. package/dist/drain-pipeline.cjs +111 -9
  80. package/dist/drain-pipeline.cjs.map +1 -1
  81. package/dist/drain-pipeline.d.cts +27 -32
  82. package/dist/drain-pipeline.d.cts.map +1 -0
  83. package/dist/drain-pipeline.d.ts +27 -32
  84. package/dist/drain-pipeline.d.ts.map +1 -0
  85. package/dist/drain-pipeline.js +111 -2
  86. package/dist/drain-pipeline.js.map +1 -1
  87. package/dist/enrichers.cjs +59 -66
  88. package/dist/enrichers.cjs.map +1 -1
  89. package/dist/enrichers.d.cts +15 -13
  90. package/dist/enrichers.d.cts.map +1 -0
  91. package/dist/enrichers.d.ts +15 -13
  92. package/dist/enrichers.d.ts.map +1 -0
  93. package/dist/enrichers.js +58 -65
  94. package/dist/enrichers.js.map +1 -1
  95. package/dist/event-Dlqr4ZNL.cjs +778 -0
  96. package/dist/event-Dlqr4ZNL.cjs.map +1 -0
  97. package/dist/event-_58ryBjh.js +761 -0
  98. package/dist/event-_58ryBjh.js.map +1 -0
  99. package/dist/event-subscriber-D1XLkPzi.d.cts +223 -0
  100. package/dist/event-subscriber-D1XLkPzi.d.cts.map +1 -0
  101. package/dist/event-subscriber-D1XLkPzi.d.ts +223 -0
  102. package/dist/event-subscriber-D1XLkPzi.d.ts.map +1 -0
  103. package/dist/event-subscriber.cjs +0 -6
  104. package/dist/event-subscriber.d.cts +2 -221
  105. package/dist/event-subscriber.d.ts +2 -221
  106. package/dist/event-subscriber.js +1 -3
  107. package/dist/event-testing-BqRnI0z4.d.cts +106 -0
  108. package/dist/event-testing-BqRnI0z4.d.cts.map +1 -0
  109. package/dist/event-testing-CfFs3to2.d.ts +106 -0
  110. package/dist/event-testing-CfFs3to2.d.ts.map +1 -0
  111. package/dist/event-testing.cjs +93 -17
  112. package/dist/event-testing.cjs.map +1 -1
  113. package/dist/event-testing.d.cts +2 -110
  114. package/dist/event-testing.d.ts +2 -110
  115. package/dist/event-testing.js +91 -2
  116. package/dist/event-testing.js.map +1 -1
  117. package/dist/event.cjs +5 -37
  118. package/dist/event.d.cts +295 -340
  119. package/dist/event.d.cts.map +1 -0
  120. package/dist/event.d.ts +295 -340
  121. package/dist/event.d.ts.map +1 -0
  122. package/dist/event.js +3 -21
  123. package/dist/exporters.cjs +12 -16
  124. package/dist/exporters.d.cts +86 -111
  125. package/dist/exporters.d.cts.map +1 -0
  126. package/dist/exporters.d.ts +86 -111
  127. package/dist/exporters.d.ts.map +1 -0
  128. package/dist/exporters.js +4 -4
  129. package/dist/filtering-span-processor-B8R8B7Uk.d.cts +59 -0
  130. package/dist/filtering-span-processor-B8R8B7Uk.d.cts.map +1 -0
  131. package/dist/filtering-span-processor-B8R8B7Uk.d.ts +59 -0
  132. package/dist/filtering-span-processor-B8R8B7Uk.d.ts.map +1 -0
  133. package/dist/filtering-span-processor.cjs +49 -9
  134. package/dist/filtering-span-processor.cjs.map +1 -1
  135. package/dist/filtering-span-processor.d.cts +2 -80
  136. package/dist/filtering-span-processor.d.ts +2 -80
  137. package/dist/filtering-span-processor.js +49 -2
  138. package/dist/filtering-span-processor.js.map +1 -1
  139. package/dist/functional-BGkT8J-h.js +1265 -0
  140. package/dist/functional-BGkT8J-h.js.map +1 -0
  141. package/dist/functional-C4CzoVrX.cjs +1312 -0
  142. package/dist/functional-C4CzoVrX.cjs.map +1 -0
  143. package/dist/functional.cjs +11 -57
  144. package/dist/functional.d.cts +96 -97
  145. package/dist/functional.d.cts.map +1 -0
  146. package/dist/functional.d.ts +96 -97
  147. package/dist/functional.d.ts.map +1 -0
  148. package/dist/functional.js +3 -20
  149. package/dist/http.cjs +276 -176
  150. package/dist/http.cjs.map +1 -1
  151. package/dist/http.d.cts +17 -37
  152. package/dist/http.d.cts.map +1 -0
  153. package/dist/http.d.ts +17 -37
  154. package/dist/http.d.ts.map +1 -0
  155. package/dist/http.js +275 -174
  156. package/dist/http.js.map +1 -1
  157. package/dist/index-Ck06vlW2.d.ts +678 -0
  158. package/dist/index-Ck06vlW2.d.ts.map +1 -0
  159. package/dist/index-eKuioqT1.d.cts +678 -0
  160. package/dist/index-eKuioqT1.d.cts.map +1 -0
  161. package/dist/index.cjs +751 -1218
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +341 -659
  164. package/dist/index.d.cts.map +1 -0
  165. package/dist/index.d.ts +341 -659
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +606 -737
  168. package/dist/index.js.map +1 -1
  169. package/dist/init-CNp-ee80.d.cts +1157 -0
  170. package/dist/init-CNp-ee80.d.cts.map +1 -0
  171. package/dist/init-Ch6t7MNI.js +1015 -0
  172. package/dist/init-Ch6t7MNI.js.map +1 -0
  173. package/dist/init-DJQOdVlN.d.ts +1157 -0
  174. package/dist/init-DJQOdVlN.d.ts.map +1 -0
  175. package/dist/init-DvapOXCc.cjs +1092 -0
  176. package/dist/init-DvapOXCc.cjs.map +1 -0
  177. package/dist/instrumentation.cjs +159 -185
  178. package/dist/instrumentation.cjs.map +1 -1
  179. package/dist/instrumentation.d.cts +42 -40
  180. package/dist/instrumentation.d.cts.map +1 -0
  181. package/dist/instrumentation.d.ts +42 -40
  182. package/dist/instrumentation.d.ts.map +1 -0
  183. package/dist/instrumentation.js +158 -183
  184. package/dist/instrumentation.js.map +1 -1
  185. package/dist/logger-BauSUhUv.d.cts +313 -0
  186. package/dist/logger-BauSUhUv.d.cts.map +1 -0
  187. package/dist/logger-BauSUhUv.d.ts +313 -0
  188. package/dist/logger-BauSUhUv.d.ts.map +1 -0
  189. package/dist/logger.cjs +225 -25
  190. package/dist/logger.cjs.map +1 -1
  191. package/dist/logger.d.cts +2 -348
  192. package/dist/logger.d.ts +2 -348
  193. package/dist/logger.js +204 -4
  194. package/dist/logger.js.map +1 -1
  195. package/dist/messaging-adapters.cjs +292 -187
  196. package/dist/messaging-adapters.cjs.map +1 -1
  197. package/dist/messaging-adapters.d.cts +28 -66
  198. package/dist/messaging-adapters.d.cts.map +1 -0
  199. package/dist/messaging-adapters.d.ts +28 -66
  200. package/dist/messaging-adapters.d.ts.map +1 -0
  201. package/dist/messaging-adapters.js +291 -185
  202. package/dist/messaging-adapters.js.map +1 -1
  203. package/dist/messaging-testing.cjs +306 -372
  204. package/dist/messaging-testing.cjs.map +1 -1
  205. package/dist/messaging-testing.d.cts +194 -223
  206. package/dist/messaging-testing.d.cts.map +1 -0
  207. package/dist/messaging-testing.d.ts +194 -223
  208. package/dist/messaging-testing.d.ts.map +1 -0
  209. package/dist/messaging-testing.js +305 -371
  210. package/dist/messaging-testing.js.map +1 -1
  211. package/dist/messaging.cjs +757 -36
  212. package/dist/messaging.cjs.map +1 -1
  213. package/dist/messaging.d.cts +603 -644
  214. package/dist/messaging.d.cts.map +1 -0
  215. package/dist/messaging.d.ts +603 -644
  216. package/dist/messaging.d.ts.map +1 -0
  217. package/dist/messaging.js +756 -21
  218. package/dist/messaging.js.map +1 -1
  219. package/dist/metric-helpers.cjs +27 -27
  220. package/dist/metric-helpers.cjs.map +1 -1
  221. package/dist/metric-helpers.d.cts +4 -2
  222. package/dist/metric-helpers.d.cts.map +1 -0
  223. package/dist/metric-helpers.d.ts +4 -2
  224. package/dist/metric-helpers.d.ts.map +1 -0
  225. package/dist/metric-helpers.js +24 -4
  226. package/dist/metric-helpers.js.map +1 -1
  227. package/dist/metric-testing-DXdK3-Q3.d.ts +106 -0
  228. package/dist/metric-testing-DXdK3-Q3.d.ts.map +1 -0
  229. package/dist/metric-testing-MxvzChDp.d.cts +106 -0
  230. package/dist/metric-testing-MxvzChDp.d.cts.map +1 -0
  231. package/dist/metric-testing.cjs +93 -17
  232. package/dist/metric-testing.cjs.map +1 -1
  233. package/dist/metric-testing.d.cts +2 -110
  234. package/dist/metric-testing.d.ts +2 -110
  235. package/dist/metric-testing.js +91 -2
  236. package/dist/metric-testing.js.map +1 -1
  237. package/dist/metric.cjs +306 -22
  238. package/dist/metric.cjs.map +1 -1
  239. package/dist/metric.d.cts +170 -198
  240. package/dist/metric.d.cts.map +1 -0
  241. package/dist/metric.d.ts +170 -198
  242. package/dist/metric.d.ts.map +1 -0
  243. package/dist/metric.js +277 -7
  244. package/dist/metric.js.map +1 -1
  245. package/dist/node-require-DF5QBX6z.cjs +99 -0
  246. package/dist/node-require-DF5QBX6z.cjs.map +1 -0
  247. package/dist/node-require-Db1oDpLj.js +88 -0
  248. package/dist/node-require-Db1oDpLj.js.map +1 -0
  249. package/dist/operation-context-C-2hmmtP.js +59 -0
  250. package/dist/operation-context-C-2hmmtP.js.map +1 -0
  251. package/dist/operation-context-n4_obUwq.cjs +70 -0
  252. package/dist/operation-context-n4_obUwq.cjs.map +1 -0
  253. package/dist/parse-error.cjs +55 -9
  254. package/dist/parse-error.cjs.map +1 -1
  255. package/dist/parse-error.d.cts +12 -10
  256. package/dist/parse-error.d.cts.map +1 -0
  257. package/dist/parse-error.d.ts +12 -10
  258. package/dist/parse-error.d.ts.map +1 -0
  259. package/dist/parse-error.js +55 -2
  260. package/dist/parse-error.js.map +1 -1
  261. package/dist/pretty-console-exporter-CMzlrRNg.cjs +232 -0
  262. package/dist/pretty-console-exporter-CMzlrRNg.cjs.map +1 -0
  263. package/dist/pretty-console-exporter-DqKl_q9z.js +227 -0
  264. package/dist/pretty-console-exporter-DqKl_q9z.js.map +1 -0
  265. package/dist/processors.cjs +13 -17
  266. package/dist/processors.d.cts +3 -171
  267. package/dist/processors.d.ts +3 -171
  268. package/dist/processors.js +4 -4
  269. package/dist/register.cjs +35 -6
  270. package/dist/register.cjs.map +1 -1
  271. package/dist/register.d.cts +1 -2
  272. package/dist/register.d.ts +1 -2
  273. package/dist/register.js +36 -3
  274. package/dist/register.js.map +1 -1
  275. package/dist/registry-DVSmWg6Y.js +175 -0
  276. package/dist/registry-DVSmWg6Y.js.map +1 -0
  277. package/dist/registry-DYgvb62e.cjs +319 -0
  278. package/dist/registry-DYgvb62e.cjs.map +1 -0
  279. package/dist/sampling-CR0Va1VB.d.ts +351 -0
  280. package/dist/sampling-CR0Va1VB.d.ts.map +1 -0
  281. package/dist/sampling-DfYhDJij.d.cts +351 -0
  282. package/dist/sampling-DfYhDJij.d.cts.map +1 -0
  283. package/dist/sampling.cjs +452 -60
  284. package/dist/sampling.cjs.map +1 -1
  285. package/dist/sampling.d.cts +2 -379
  286. package/dist/sampling.d.ts +2 -379
  287. package/dist/sampling.js +441 -5
  288. package/dist/sampling.js.map +1 -1
  289. package/dist/security-schema.cjs +65 -46
  290. package/dist/security-schema.cjs.map +1 -1
  291. package/dist/security-schema.d.cts +23 -26
  292. package/dist/security-schema.d.cts.map +1 -0
  293. package/dist/security-schema.d.ts +23 -26
  294. package/dist/security-schema.d.ts.map +1 -0
  295. package/dist/security-schema.js +64 -45
  296. package/dist/security-schema.js.map +1 -1
  297. package/dist/semantic-conventions-FhSxv-bK.d.cts +32 -0
  298. package/dist/semantic-conventions-FhSxv-bK.d.cts.map +1 -0
  299. package/dist/semantic-conventions-FhSxv-bK.d.ts +32 -0
  300. package/dist/semantic-conventions-FhSxv-bK.d.ts.map +1 -0
  301. package/dist/semantic-conventions.cjs +15 -26
  302. package/dist/semantic-conventions.cjs.map +1 -1
  303. package/dist/semantic-conventions.d.cts +2 -29
  304. package/dist/semantic-conventions.d.ts +2 -29
  305. package/dist/semantic-conventions.js +12 -3
  306. package/dist/semantic-conventions.js.map +1 -1
  307. package/dist/semantic-helpers.cjs +327 -39
  308. package/dist/semantic-helpers.cjs.map +1 -1
  309. package/dist/semantic-helpers.d.cts +30 -150
  310. package/dist/semantic-helpers.d.cts.map +1 -0
  311. package/dist/semantic-helpers.d.ts +30 -150
  312. package/dist/semantic-helpers.d.ts.map +1 -0
  313. package/dist/semantic-helpers.js +326 -20
  314. package/dist/semantic-helpers.js.map +1 -1
  315. package/dist/span-name-normalizer-8ZOGJuwv.d.cts +70 -0
  316. package/dist/span-name-normalizer-8ZOGJuwv.d.cts.map +1 -0
  317. package/dist/span-name-normalizer-8ZOGJuwv.d.ts +70 -0
  318. package/dist/span-name-normalizer-8ZOGJuwv.d.ts.map +1 -0
  319. package/dist/span-name-normalizer.cjs +95 -17
  320. package/dist/span-name-normalizer.cjs.map +1 -1
  321. package/dist/span-name-normalizer.d.cts +2 -94
  322. package/dist/span-name-normalizer.d.ts +2 -94
  323. package/dist/span-name-normalizer.js +93 -2
  324. package/dist/span-name-normalizer.js.map +1 -1
  325. package/dist/stable-hash-BNTMrmdB.cjs +28 -0
  326. package/dist/stable-hash-BNTMrmdB.cjs.map +1 -0
  327. package/dist/stable-hash-Cg5cT34Q.js +23 -0
  328. package/dist/stable-hash-Cg5cT34Q.js.map +1 -0
  329. package/dist/structured-error-9--cxBay.js +143 -0
  330. package/dist/structured-error-9--cxBay.js.map +1 -0
  331. package/dist/structured-error-CHg7DoIQ.cjs +178 -0
  332. package/dist/structured-error-CHg7DoIQ.cjs.map +1 -0
  333. package/dist/tail-sampling-processor.cjs +26 -13
  334. package/dist/tail-sampling-processor.cjs.map +1 -1
  335. package/dist/tail-sampling-processor.d.cts +11 -23
  336. package/dist/tail-sampling-processor.d.cts.map +1 -0
  337. package/dist/tail-sampling-processor.d.ts +11 -23
  338. package/dist/tail-sampling-processor.d.ts.map +1 -0
  339. package/dist/tail-sampling-processor.js +27 -6
  340. package/dist/tail-sampling-processor.js.map +1 -1
  341. package/dist/test-span-collector.cjs +70 -72
  342. package/dist/test-span-collector.cjs.map +1 -1
  343. package/dist/test-span-collector.d.cts +25 -43
  344. package/dist/test-span-collector.d.cts.map +1 -0
  345. package/dist/test-span-collector.d.ts +25 -43
  346. package/dist/test-span-collector.d.ts.map +1 -0
  347. package/dist/test-span-collector.js +69 -70
  348. package/dist/test-span-collector.js.map +1 -1
  349. package/dist/testing.cjs +389 -278
  350. package/dist/testing.cjs.map +1 -1
  351. package/dist/testing.d.cts +39 -62
  352. package/dist/testing.d.cts.map +1 -0
  353. package/dist/testing.d.ts +39 -62
  354. package/dist/testing.d.ts.map +1 -0
  355. package/dist/testing.js +386 -265
  356. package/dist/testing.js.map +1 -1
  357. package/dist/trace-context-Cijqoi6e.d.cts +212 -0
  358. package/dist/trace-context-Cijqoi6e.d.cts.map +1 -0
  359. package/dist/trace-context-Cijqoi6e.d.ts +212 -0
  360. package/dist/trace-context-Cijqoi6e.d.ts.map +1 -0
  361. package/dist/trace-helpers.cjs +634 -54
  362. package/dist/trace-helpers.cjs.map +1 -1
  363. package/dist/trace-helpers.d.cts +17 -49
  364. package/dist/trace-helpers.d.cts.map +1 -0
  365. package/dist/trace-helpers.d.ts +17 -49
  366. package/dist/trace-helpers.d.ts.map +1 -0
  367. package/dist/trace-helpers.js +624 -3
  368. package/dist/trace-helpers.js.map +1 -1
  369. package/dist/tracer-provider.cjs +227 -16
  370. package/dist/tracer-provider.cjs.map +1 -1
  371. package/dist/tracer-provider.d.cts +5 -4
  372. package/dist/tracer-provider.d.cts.map +1 -0
  373. package/dist/tracer-provider.d.ts +5 -4
  374. package/dist/tracer-provider.d.ts.map +1 -0
  375. package/dist/tracer-provider.js +227 -2
  376. package/dist/tracer-provider.js.map +1 -1
  377. package/dist/track-3HY4NGV-.cjs +1212 -0
  378. package/dist/track-3HY4NGV-.cjs.map +1 -0
  379. package/dist/track-nsKVy-pj.js +1111 -0
  380. package/dist/track-nsKVy-pj.js.map +1 -0
  381. package/dist/validate.cjs +178 -115
  382. package/dist/validate.cjs.map +1 -1
  383. package/dist/validate.d.cts +40 -64
  384. package/dist/validate.d.cts.map +1 -0
  385. package/dist/validate.d.ts +40 -64
  386. package/dist/validate.d.ts.map +1 -0
  387. package/dist/validate.js +177 -113
  388. package/dist/validate.js.map +1 -1
  389. package/dist/validation-attributes.cjs +42 -17
  390. package/dist/validation-attributes.cjs.map +1 -1
  391. package/dist/validation-attributes.d.cts +13 -20
  392. package/dist/validation-attributes.d.cts.map +1 -0
  393. package/dist/validation-attributes.d.ts +13 -20
  394. package/dist/validation-attributes.d.ts.map +1 -0
  395. package/dist/validation-attributes.js +40 -2
  396. package/dist/validation-attributes.js.map +1 -1
  397. package/dist/webhook.cjs +286 -256
  398. package/dist/webhook.cjs.map +1 -1
  399. package/dist/webhook.d.cts +157 -192
  400. package/dist/webhook.d.cts.map +1 -0
  401. package/dist/webhook.d.ts +157 -192
  402. package/dist/webhook.d.ts.map +1 -0
  403. package/dist/webhook.js +285 -254
  404. package/dist/webhook.js.map +1 -1
  405. package/dist/workflow-distributed.cjs +498 -412
  406. package/dist/workflow-distributed.cjs.map +1 -1
  407. package/dist/workflow-distributed.d.cts +163 -173
  408. package/dist/workflow-distributed.d.cts.map +1 -0
  409. package/dist/workflow-distributed.d.ts +163 -173
  410. package/dist/workflow-distributed.d.ts.map +1 -0
  411. package/dist/workflow-distributed.js +497 -410
  412. package/dist/workflow-distributed.js.map +1 -1
  413. package/dist/workflow.cjs +405 -40
  414. package/dist/workflow.cjs.map +1 -1
  415. package/dist/workflow.d.cts +78 -131
  416. package/dist/workflow.d.cts.map +1 -0
  417. package/dist/workflow.d.ts +78 -131
  418. package/dist/workflow.d.ts.map +1 -0
  419. package/dist/workflow.js +403 -21
  420. package/dist/workflow.js.map +1 -1
  421. package/dist/yaml-config-B3dQ82GR.cjs +272 -0
  422. package/dist/yaml-config-B3dQ82GR.cjs.map +1 -0
  423. package/dist/yaml-config.cjs +5 -24
  424. package/dist/yaml-config.d.cts +30 -64
  425. package/dist/yaml-config.d.cts.map +1 -0
  426. package/dist/yaml-config.d.ts +30 -64
  427. package/dist/yaml-config.d.ts.map +1 -0
  428. package/dist/yaml-config.js +226 -7
  429. package/dist/yaml-config.js.map +1 -1
  430. package/package.json +4 -4
  431. package/skills/analyze-traces/SKILL.md +14 -12
  432. package/skills/review-otel-patterns/SKILL.md +4 -2
  433. package/skills/tune-sampling/SKILL.md +8 -3
  434. package/src/attributes/builders.ts +2 -20
  435. package/src/attributes/index.ts +0 -1
  436. package/src/attributes/registry.ts +2 -9
  437. package/src/attributes/types.ts +0 -8
  438. package/src/index.ts +7 -41
  439. package/src/request-logger.test.ts +53 -1
  440. package/src/request-logger.ts +58 -0
  441. package/src/semantic-helpers.test.ts +2 -87
  442. package/src/semantic-helpers.ts +0 -146
  443. package/src/validate.test.ts +3 -1
  444. package/src/validate.ts +9 -3
  445. package/dist/attributes.cjs.map +0 -1
  446. package/dist/attributes.js.map +0 -1
  447. package/dist/chunk-2ZKEORFN.cjs +0 -14
  448. package/dist/chunk-2ZKEORFN.cjs.map +0 -1
  449. package/dist/chunk-3QXBFGKP.js +0 -344
  450. package/dist/chunk-3QXBFGKP.js.map +0 -1
  451. package/dist/chunk-454CH4OV.js +0 -744
  452. package/dist/chunk-454CH4OV.js.map +0 -1
  453. package/dist/chunk-4A53YIAX.js +0 -180
  454. package/dist/chunk-4A53YIAX.js.map +0 -1
  455. package/dist/chunk-4IFSYQVX.js +0 -337
  456. package/dist/chunk-4IFSYQVX.js.map +0 -1
  457. package/dist/chunk-4P6ZOARG.cjs +0 -33
  458. package/dist/chunk-4P6ZOARG.cjs.map +0 -1
  459. package/dist/chunk-55ER2KD5.js +0 -228
  460. package/dist/chunk-55ER2KD5.js.map +0 -1
  461. package/dist/chunk-5ZN622AO.js +0 -73
  462. package/dist/chunk-5ZN622AO.js.map +0 -1
  463. package/dist/chunk-66YJ66GG.js +0 -1021
  464. package/dist/chunk-66YJ66GG.js.map +0 -1
  465. package/dist/chunk-6S5RUKU3.cjs +0 -347
  466. package/dist/chunk-6S5RUKU3.cjs.map +0 -1
  467. package/dist/chunk-6UQRVUN3.js +0 -222
  468. package/dist/chunk-6UQRVUN3.js.map +0 -1
  469. package/dist/chunk-7552UTQW.js +0 -11
  470. package/dist/chunk-7552UTQW.js.map +0 -1
  471. package/dist/chunk-7EQ4G4SI.cjs +0 -146
  472. package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
  473. package/dist/chunk-7SAWIN74.js +0 -285
  474. package/dist/chunk-7SAWIN74.js.map +0 -1
  475. package/dist/chunk-A4E5AQFK.js +0 -30
  476. package/dist/chunk-A4E5AQFK.js.map +0 -1
  477. package/dist/chunk-ALPYR2GC.js +0 -1061
  478. package/dist/chunk-ALPYR2GC.js.map +0 -1
  479. package/dist/chunk-B7SWBE4P.cjs +0 -799
  480. package/dist/chunk-B7SWBE4P.cjs.map +0 -1
  481. package/dist/chunk-BZHG5IZ4.js +0 -73
  482. package/dist/chunk-BZHG5IZ4.js.map +0 -1
  483. package/dist/chunk-CEAQK2QY.cjs +0 -32
  484. package/dist/chunk-CEAQK2QY.cjs.map +0 -1
  485. package/dist/chunk-CMHVQR6P.js +0 -170
  486. package/dist/chunk-CMHVQR6P.js.map +0 -1
  487. package/dist/chunk-CU6IDACR.cjs +0 -224
  488. package/dist/chunk-CU6IDACR.cjs.map +0 -1
  489. package/dist/chunk-D4TM63S3.js +0 -795
  490. package/dist/chunk-D4TM63S3.js.map +0 -1
  491. package/dist/chunk-DCEDJQGG.js +0 -28
  492. package/dist/chunk-DCEDJQGG.js.map +0 -1
  493. package/dist/chunk-DPSA4QLA.js +0 -344
  494. package/dist/chunk-DPSA4QLA.js.map +0 -1
  495. package/dist/chunk-E6TERL5O.cjs +0 -23
  496. package/dist/chunk-E6TERL5O.cjs.map +0 -1
  497. package/dist/chunk-EE6CPXKH.cjs +0 -164
  498. package/dist/chunk-EE6CPXKH.cjs.map +0 -1
  499. package/dist/chunk-EOFB7XCL.cjs +0 -837
  500. package/dist/chunk-EOFB7XCL.cjs.map +0 -1
  501. package/dist/chunk-ESLWRGAG.cjs +0 -92
  502. package/dist/chunk-ESLWRGAG.cjs.map +0 -1
  503. package/dist/chunk-ESMHTKLJ.cjs +0 -206
  504. package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
  505. package/dist/chunk-FMTHVSYY.cjs +0 -1039
  506. package/dist/chunk-FMTHVSYY.cjs.map +0 -1
  507. package/dist/chunk-FU6R566Y.cjs +0 -236
  508. package/dist/chunk-FU6R566Y.cjs.map +0 -1
  509. package/dist/chunk-GYR5K654.js +0 -91
  510. package/dist/chunk-GYR5K654.js.map +0 -1
  511. package/dist/chunk-HA2WBOGQ.js +0 -57
  512. package/dist/chunk-HA2WBOGQ.js.map +0 -1
  513. package/dist/chunk-HT5JQKN2.js +0 -118
  514. package/dist/chunk-HT5JQKN2.js.map +0 -1
  515. package/dist/chunk-INJD3G4K.cjs +0 -340
  516. package/dist/chunk-INJD3G4K.cjs.map +0 -1
  517. package/dist/chunk-IOYFAFHJ.cjs +0 -95
  518. package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
  519. package/dist/chunk-J5QENANM.js +0 -87
  520. package/dist/chunk-J5QENANM.js.map +0 -1
  521. package/dist/chunk-J7VGRIAJ.js +0 -64
  522. package/dist/chunk-J7VGRIAJ.js.map +0 -1
  523. package/dist/chunk-KFOHQK7X.js +0 -144
  524. package/dist/chunk-KFOHQK7X.js.map +0 -1
  525. package/dist/chunk-KIL5CUN6.js +0 -31
  526. package/dist/chunk-KIL5CUN6.js.map +0 -1
  527. package/dist/chunk-KYXZS3EA.cjs +0 -100
  528. package/dist/chunk-KYXZS3EA.cjs.map +0 -1
  529. package/dist/chunk-LITNXTTT.js +0 -3
  530. package/dist/chunk-LITNXTTT.js.map +0 -1
  531. package/dist/chunk-LVIPBYFE.js +0 -157
  532. package/dist/chunk-LVIPBYFE.js.map +0 -1
  533. package/dist/chunk-M3LFHHTN.cjs +0 -764
  534. package/dist/chunk-M3LFHHTN.cjs.map +0 -1
  535. package/dist/chunk-N25JDZSC.js +0 -95
  536. package/dist/chunk-N25JDZSC.js.map +0 -1
  537. package/dist/chunk-NEIB3TLD.cjs +0 -360
  538. package/dist/chunk-NEIB3TLD.cjs.map +0 -1
  539. package/dist/chunk-NENU7E6V.cjs +0 -344
  540. package/dist/chunk-NENU7E6V.cjs.map +0 -1
  541. package/dist/chunk-NVAI5CCN.cjs +0 -39
  542. package/dist/chunk-NVAI5CCN.cjs.map +0 -1
  543. package/dist/chunk-NZ72VDNY.cjs +0 -4
  544. package/dist/chunk-NZ72VDNY.cjs.map +0 -1
  545. package/dist/chunk-OPPXYVEZ.cjs +0 -131
  546. package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
  547. package/dist/chunk-Q4EULJQY.js +0 -35
  548. package/dist/chunk-Q4EULJQY.js.map +0 -1
  549. package/dist/chunk-QF7ARNUM.js +0 -339
  550. package/dist/chunk-QF7ARNUM.js.map +0 -1
  551. package/dist/chunk-QWW3E3JM.cjs +0 -178
  552. package/dist/chunk-QWW3E3JM.cjs.map +0 -1
  553. package/dist/chunk-R7QYGZUP.cjs +0 -1075
  554. package/dist/chunk-R7QYGZUP.cjs.map +0 -1
  555. package/dist/chunk-RUPKBKUF.js +0 -352
  556. package/dist/chunk-RUPKBKUF.js.map +0 -1
  557. package/dist/chunk-SEO6NAQT.js +0 -14
  558. package/dist/chunk-SEO6NAQT.js.map +0 -1
  559. package/dist/chunk-T4B5LB6E.cjs +0 -66
  560. package/dist/chunk-T4B5LB6E.cjs.map +0 -1
  561. package/dist/chunk-T5WRA76K.cjs +0 -32
  562. package/dist/chunk-T5WRA76K.cjs.map +0 -1
  563. package/dist/chunk-T7JO2TCP.js +0 -1233
  564. package/dist/chunk-T7JO2TCP.js.map +0 -1
  565. package/dist/chunk-TC5ZPWM4.cjs +0 -289
  566. package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
  567. package/dist/chunk-TQ5UWA7S.js +0 -26
  568. package/dist/chunk-TQ5UWA7S.js.map +0 -1
  569. package/dist/chunk-UIKYE2QZ.js +0 -833
  570. package/dist/chunk-UIKYE2QZ.js.map +0 -1
  571. package/dist/chunk-UNPLAVE7.js +0 -21
  572. package/dist/chunk-UNPLAVE7.js.map +0 -1
  573. package/dist/chunk-UY3UYPBZ.cjs +0 -77
  574. package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
  575. package/dist/chunk-V7UBMJAB.cjs +0 -1242
  576. package/dist/chunk-V7UBMJAB.cjs.map +0 -1
  577. package/dist/chunk-VH77IPJN.cjs +0 -358
  578. package/dist/chunk-VH77IPJN.cjs.map +0 -1
  579. package/dist/chunk-VQTCQKHQ.cjs +0 -17
  580. package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
  581. package/dist/chunk-WGWSHJ2N.js +0 -38
  582. package/dist/chunk-WGWSHJ2N.js.map +0 -1
  583. package/dist/chunk-WJH6IYU2.cjs +0 -32
  584. package/dist/chunk-WJH6IYU2.cjs.map +0 -1
  585. package/dist/chunk-YREV3LGG.cjs +0 -61
  586. package/dist/chunk-YREV3LGG.cjs.map +0 -1
  587. package/dist/chunk-YTXEZ4SD.cjs +0 -77
  588. package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
  589. package/dist/chunk-ZNMBW67B.cjs +0 -40
  590. package/dist/chunk-ZNMBW67B.cjs.map +0 -1
  591. package/dist/correlation-id.cjs.map +0 -1
  592. package/dist/correlation-id.js.map +0 -1
  593. package/dist/define-event-BL6Li7CM.d.ts +0 -23
  594. package/dist/define-event-ClP3T1Jx.d.cts +0 -23
  595. package/dist/event-subscriber.cjs.map +0 -1
  596. package/dist/event-subscriber.js.map +0 -1
  597. package/dist/event.cjs.map +0 -1
  598. package/dist/event.js.map +0 -1
  599. package/dist/exporters.cjs.map +0 -1
  600. package/dist/exporters.js.map +0 -1
  601. package/dist/functional.cjs.map +0 -1
  602. package/dist/functional.js.map +0 -1
  603. package/dist/init-DIowiiCh.d.ts +0 -1167
  604. package/dist/init-j-A1zI16.d.cts +0 -1167
  605. package/dist/processors.cjs.map +0 -1
  606. package/dist/processors.js.map +0 -1
  607. package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
  608. package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
  609. package/dist/utils-BahBCFtJ.d.cts +0 -712
  610. package/dist/utils-CLKwaUlG.d.ts +0 -712
  611. package/dist/yaml-config.cjs.map +0 -1
  612. package/src/gen-ai-cost.test.ts +0 -81
  613. package/src/gen-ai-cost.ts +0 -145
  614. package/src/gen-ai-events.test.ts +0 -135
  615. package/src/gen-ai-events.ts +0 -208
  616. package/src/gen-ai-metrics.test.ts +0 -96
  617. package/src/gen-ai-metrics.ts +0 -128
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/webhook.ts"],"names":["otelTrace","emitCorrelatedEvent","trace","SpanKind","recordStructuredError"],"mappings":"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","file":"webhook.cjs","sourcesContent":["/**\n * Webhook and callback tracing with the \"Parking Lot\" pattern\n *\n * When initiating async operations that return hours/days later (webhooks,\n * payment callbacks, human approvals), you can't keep a span open. This module\n * provides utilities to \"park\" trace context and retrieve it when callbacks arrive.\n *\n * @example Stripe payment webhook\n * ```typescript\n * import { createParkingLot, InMemoryTraceContextStore } from 'autotel/webhook';\n *\n * const parkingLot = createParkingLot({\n * store: new InMemoryTraceContextStore(),\n * defaultTTLMs: 24 * 60 * 60 * 1000, // 24 hours\n * });\n *\n * // When initiating payment\n * export const initiatePayment = trace(ctx => async (orderId: string) => {\n * await parkingLot.park(`payment:${orderId}`, { orderId });\n * await stripeClient.createPaymentIntent({ metadata: { orderId } });\n * });\n *\n * // When Stripe webhook arrives (hours later)\n * export const handleStripeWebhook = parkingLot.traceCallback({\n * name: 'stripe.webhook.payment_intent.succeeded',\n * correlationKeyFrom: (event) => `payment:${event.data.object.metadata.orderId}`,\n * })(ctx => async (event: Stripe.Event) => {\n * // ctx.parkedContext contains the original trace context\n * // ctx.elapsedMs shows time since payment was initiated\n * await fulfillOrder(event.data.object);\n * });\n * ```\n *\n * @module\n */\n\nimport { SpanKind, trace as otelTrace } from '@opentelemetry/api';\nimport type { SpanContext, Link } from '@opentelemetry/api';\nimport { emitCorrelatedEvent } from './correlated-events';\nimport { trace } from './functional';\nimport type { AttributeValue, TraceContext } from './trace-context';\nimport { recordStructuredError } from './structured-error';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Stored trace context for parking lot pattern\n */\nexport interface StoredTraceContext {\n /** Trace ID from the original span */\n traceId: string;\n\n /** Span ID from the original span */\n spanId: string;\n\n /** Trace flags (sampling decision) */\n traceFlags: number;\n\n /** When the context was parked */\n parkedAt: number;\n\n /** Optional TTL in milliseconds */\n ttlMs?: number;\n\n /** User-provided metadata */\n metadata?: Record<string, string>;\n}\n\n/**\n * Interface for trace context storage backends\n *\n * Implement this interface to use different storage backends (Redis, DynamoDB, etc.)\n */\nexport interface TraceContextStore {\n /**\n * Save trace context with a correlation key\n *\n * @param key - Unique correlation key (e.g., \"payment:order-123\")\n * @param context - The trace context to store\n */\n save(key: string, context: StoredTraceContext): Promise<void>;\n\n /**\n * Load trace context by correlation key\n *\n * @param key - The correlation key used when parking\n * @returns The stored context, or null if not found/expired\n */\n load(key: string): Promise<StoredTraceContext | null>;\n\n /**\n * Delete trace context by correlation key\n *\n * @param key - The correlation key to delete\n */\n delete(key: string): Promise<void>;\n}\n\n/**\n * Configuration for creating a parking lot\n */\nexport interface ParkingLotConfig {\n /** Storage backend for parked contexts */\n store: TraceContextStore;\n\n /** Default TTL in milliseconds (default: 24 hours) */\n defaultTTLMs?: number;\n\n /** Prefix for all correlation keys (default: \"parkingLot:\") */\n keyPrefix?: string;\n\n /** Whether to auto-delete after retrieval (default: true) */\n autoDeleteOnRetrieve?: boolean;\n\n /** Callback when context expires or is not found */\n onMiss?: (correlationKey: string) => void;\n}\n\n/**\n * Configuration for traceCallback wrapper\n */\nexport interface CallbackConfig {\n /** Span name for the callback handler */\n name: string;\n\n /**\n * Extract correlation key from callback arguments\n *\n * @example\n * ```typescript\n * correlationKeyFrom: (event) => `payment:${event.data.orderId}`\n * ```\n */\n correlationKeyFrom: (args: unknown[]) => string;\n\n /** Additional span attributes */\n attributes?: Record<string, string | number | boolean>;\n\n /** Whether to fail if parked context is not found (default: false) */\n requireParkedContext?: boolean;\n}\n\n/**\n * Extended context for callback handlers\n */\nexport interface CallbackContext extends TraceContext {\n /** The retrieved parked context, if found */\n parkedContext: StoredTraceContext | null;\n\n /** Time elapsed since context was parked (ms), or null if not found */\n elapsedMs: number | null;\n\n /** The correlation key used for retrieval */\n correlationKey: string;\n}\n\n/**\n * The parking lot instance\n */\nexport interface ParkingLot {\n /**\n * Park current trace context before initiating async operation\n *\n * Call this before sending a webhook, initiating a payment, or starting\n * any operation that will complete via callback.\n *\n * @param correlationKey - Unique key to retrieve context later (e.g., \"payment:order-123\")\n * @param metadata - Optional metadata to store with the context\n * @returns The correlation key (with prefix applied)\n *\n * @example\n * ```typescript\n * await parkingLot.park(`payment:${orderId}`, {\n * customerId: customer.id,\n * amount: payment.amount.toString(),\n * });\n * ```\n */\n park(\n correlationKey: string,\n metadata?: Record<string, string>,\n ): Promise<string>;\n\n /**\n * Retrieve parked context when callback arrives\n *\n * @param correlationKey - The key used when parking\n * @returns The stored context, or null if not found/expired\n */\n retrieve(correlationKey: string): Promise<StoredTraceContext | null>;\n\n /**\n * Wrap a callback handler with automatic context retrieval and linking\n *\n * Creates a traced function that:\n * 1. Extracts correlation key from arguments\n * 2. Retrieves parked context from storage\n * 3. Creates a span link to the original trace\n * 4. Provides elapsed time since parking\n *\n * @param config - Callback configuration\n * @returns Factory function for the callback handler\n *\n * @example\n * ```typescript\n * export const handleWebhook = parkingLot.traceCallback({\n * name: 'webhook.payment.completed',\n * correlationKeyFrom: (args) => `payment:${args[0].orderId}`,\n * })(ctx => async (event) => {\n * console.log(`Payment completed after ${ctx.elapsedMs}ms`);\n * await processPayment(event);\n * });\n * ```\n */\n traceCallback<TArgs extends unknown[], TReturn>(\n config: CallbackConfig,\n ): (\n fnFactory: (ctx: CallbackContext) => (...args: TArgs) => Promise<TReturn>,\n ) => (...args: TArgs) => Promise<TReturn>;\n\n /**\n * Manually create a span link from stored context\n *\n * Useful when you need more control over span creation.\n *\n * @param storedContext - The stored trace context\n * @returns A span link that can be added to a span\n */\n createLink(storedContext: StoredTraceContext): Link;\n\n /**\n * Check if a parked context exists (without retrieving/deleting it)\n *\n * @param correlationKey - The key to check\n * @returns True if context exists and hasn't expired\n */\n exists(correlationKey: string): Promise<boolean>;\n}\n\n// ============================================================================\n// In-Memory Store (for testing and development)\n// ============================================================================\n\n/**\n * In-memory trace context store\n *\n * Useful for testing and development. For production, use a persistent\n * store like Redis or DynamoDB.\n *\n * @example\n * ```typescript\n * const store = new InMemoryTraceContextStore();\n * const parkingLot = createParkingLot({ store });\n * ```\n */\nexport class InMemoryTraceContextStore implements TraceContextStore {\n private store = new Map<string, StoredTraceContext>();\n private cleanupInterval: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private options: {\n /** Cleanup interval in ms (default: 60000) */\n cleanupIntervalMs?: number;\n } = {},\n ) {\n // Start periodic cleanup of expired entries\n const cleanupMs = options.cleanupIntervalMs ?? 60_000;\n if (cleanupMs > 0) {\n this.cleanupInterval = setInterval(() => this.cleanup(), cleanupMs);\n // Don't prevent process exit\n if (this.cleanupInterval.unref) {\n this.cleanupInterval.unref();\n }\n }\n }\n\n async save(key: string, context: StoredTraceContext): Promise<void> {\n this.store.set(key, context);\n }\n\n async load(key: string): Promise<StoredTraceContext | null> {\n const context = this.store.get(key);\n if (!context) {\n return null;\n }\n\n // Check TTL expiration\n if (context.ttlMs) {\n const age = Date.now() - context.parkedAt;\n if (age > context.ttlMs) {\n this.store.delete(key);\n return null;\n }\n }\n\n return context;\n }\n\n async delete(key: string): Promise<void> {\n this.store.delete(key);\n }\n\n /**\n * Get number of stored contexts (for testing)\n */\n get size(): number {\n return this.store.size;\n }\n\n /**\n * Clear all stored contexts (for testing)\n */\n clear(): void {\n this.store.clear();\n }\n\n /**\n * Stop the cleanup interval\n */\n destroy(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n }\n\n private cleanup(): void {\n const now = Date.now();\n for (const [key, context] of this.store.entries()) {\n if (context.ttlMs) {\n const age = now - context.parkedAt;\n if (age > context.ttlMs) {\n this.store.delete(key);\n }\n }\n }\n }\n}\n\n// ============================================================================\n// Parking Lot Factory\n// ============================================================================\n\n/**\n * Create a parking lot for trace context storage and retrieval\n *\n * @param config - Parking lot configuration\n * @returns A parking lot instance\n *\n * @example Basic usage\n * ```typescript\n * const parkingLot = createParkingLot({\n * store: new InMemoryTraceContextStore(),\n * defaultTTLMs: 24 * 60 * 60 * 1000, // 24 hours\n * });\n * ```\n *\n * @example With Redis store\n * ```typescript\n * class RedisTraceContextStore implements TraceContextStore {\n * constructor(private redis: Redis) {}\n *\n * async save(key: string, context: StoredTraceContext) {\n * const ttlSeconds = context.ttlMs ? Math.ceil(context.ttlMs / 1000) : 86400;\n * await this.redis.setex(key, ttlSeconds, JSON.stringify(context));\n * }\n *\n * async load(key: string) {\n * const data = await this.redis.get(key);\n * return data ? JSON.parse(data) : null;\n * }\n *\n * async delete(key: string) {\n * await this.redis.del(key);\n * }\n * }\n *\n * const parkingLot = createParkingLot({\n * store: new RedisTraceContextStore(redis),\n * });\n * ```\n */\nexport function createParkingLot(config: ParkingLotConfig): ParkingLot {\n const {\n store,\n defaultTTLMs = 24 * 60 * 60 * 1000, // 24 hours\n keyPrefix = 'parkingLot:',\n autoDeleteOnRetrieve = true,\n onMiss,\n } = config;\n\n /**\n * Get current span context from active context\n */\n function getCurrentSpanContext(): SpanContext | null {\n const activeSpan = otelTrace.getActiveSpan();\n if (!activeSpan) {\n return null;\n }\n return activeSpan.spanContext();\n }\n\n /**\n * Apply key prefix\n */\n function prefixKey(key: string): string {\n return `${keyPrefix}${key}`;\n }\n\n const parkingLot: ParkingLot = {\n async park(\n correlationKey: string,\n metadata?: Record<string, string>,\n ): Promise<string> {\n const spanContext = getCurrentSpanContext();\n const fullKey = prefixKey(correlationKey);\n\n const storedContext: StoredTraceContext = {\n traceId: spanContext?.traceId ?? '',\n spanId: spanContext?.spanId ?? '',\n traceFlags: spanContext?.traceFlags ?? 0,\n parkedAt: Date.now(),\n ttlMs: defaultTTLMs,\n metadata,\n };\n\n await store.save(fullKey, storedContext);\n\n const activeSpan = otelTrace.getActiveSpan();\n if (activeSpan) {\n const parkAttrs: Record<string, AttributeValue> = {\n 'parking_lot.correlation_key': correlationKey,\n 'parking_lot.ttl_ms': defaultTTLMs,\n ...(metadata &&\n Object.fromEntries(\n Object.entries(metadata).map(([k, v]) => [\n `parking_lot.metadata.${k}`,\n v,\n ]),\n )),\n };\n emitCorrelatedEvent(\n {\n setAttribute: (k, v) => activeSpan.setAttribute(k, v),\n setAttributes: (a) => activeSpan.setAttributes(a),\n addEvent: (n, a) => activeSpan.addEvent(n, a),\n },\n 'trace_context_parked',\n parkAttrs,\n );\n }\n\n // Return the unprefixed key so callers can use the same key for retrieve()\n return correlationKey;\n },\n\n async retrieve(correlationKey: string): Promise<StoredTraceContext | null> {\n const fullKey = prefixKey(correlationKey);\n const storedContext = await store.load(fullKey);\n\n if (!storedContext) {\n onMiss?.(correlationKey);\n return null;\n }\n\n if (autoDeleteOnRetrieve) {\n await store.delete(fullKey);\n }\n\n return storedContext;\n },\n\n traceCallback<TArgs extends unknown[], TReturn>(\n callbackConfig: CallbackConfig,\n ): (\n fnFactory: (ctx: CallbackContext) => (...args: TArgs) => Promise<TReturn>,\n ) => (...args: TArgs) => Promise<TReturn> {\n return (\n fnFactory: (\n ctx: CallbackContext,\n ) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>(\n {\n name: callbackConfig.name,\n spanKind: SpanKind.SERVER,\n },\n (baseCtx) => {\n return async (...args: TArgs) => {\n // Extract correlation key from arguments\n const correlationKey = callbackConfig.correlationKeyFrom(args);\n\n // Retrieve parked context\n const parkedContext = await parkingLot.retrieve(correlationKey);\n\n // Calculate elapsed time\n const elapsedMs = parkedContext\n ? Date.now() - parkedContext.parkedAt\n : null;\n\n // Set span attributes\n baseCtx.setAttribute(\n 'parking_lot.correlation_key',\n correlationKey,\n );\n\n if (parkedContext) {\n baseCtx.setAttribute('parking_lot.elapsed_ms', elapsedMs!);\n baseCtx.setAttribute(\n 'parking_lot.original_trace_id',\n parkedContext.traceId,\n );\n baseCtx.setAttribute(\n 'parking_lot.original_span_id',\n parkedContext.spanId,\n );\n\n // Add metadata as attributes\n if (parkedContext.metadata) {\n for (const [key, value] of Object.entries(\n parkedContext.metadata,\n )) {\n baseCtx.setAttribute(`parking_lot.metadata.${key}`, value);\n }\n }\n\n // Create span link to original trace\n const link = parkingLot.createLink(parkedContext);\n baseCtx.addLinks([link]);\n\n emitCorrelatedEvent(baseCtx, 'parked_context_retrieved', {\n 'parking_lot.correlation_key': correlationKey,\n 'parking_lot.elapsed_ms': elapsedMs!,\n 'parking_lot.original_trace_id': parkedContext.traceId,\n });\n } else {\n baseCtx.setAttribute('parking_lot.context_found', false);\n\n if (callbackConfig.requireParkedContext) {\n const error = new Error(\n `Required parked context not found for key: ${correlationKey}`,\n );\n recordStructuredError(baseCtx, error);\n throw error;\n }\n }\n\n // Apply custom attributes\n if (callbackConfig.attributes) {\n for (const [key, value] of Object.entries(\n callbackConfig.attributes,\n )) {\n baseCtx.setAttribute(key, value);\n }\n }\n\n // Create extended context\n const callbackCtx: CallbackContext = {\n ...baseCtx,\n parkedContext,\n elapsedMs,\n correlationKey,\n };\n\n // Execute user's function\n const userFn = fnFactory(callbackCtx);\n return userFn(...args);\n };\n },\n );\n };\n },\n\n createLink(storedContext: StoredTraceContext): Link {\n return {\n context: {\n traceId: storedContext.traceId,\n spanId: storedContext.spanId,\n traceFlags: storedContext.traceFlags,\n isRemote: true,\n },\n attributes: {\n 'link.type': 'parking_lot',\n 'parking_lot.parked_at': storedContext.parkedAt,\n ...(storedContext.metadata && {\n 'parking_lot.has_metadata': true,\n }),\n },\n };\n },\n\n async exists(correlationKey: string): Promise<boolean> {\n const fullKey = prefixKey(correlationKey);\n const context = await store.load(fullKey);\n return context !== null;\n },\n };\n\n return parkingLot;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Create a correlation key from multiple parts\n *\n * @param parts - Key parts to join\n * @returns A correlation key string\n *\n * @example\n * ```typescript\n * const key = createCorrelationKey('payment', orderId, 'stripe');\n * // Returns: \"payment:order-123:stripe\"\n * ```\n */\nexport function createCorrelationKey(...parts: (string | number)[]): string {\n return parts.map(String).join(':');\n}\n\n/**\n * Extract span context from stored context for manual linking\n *\n * @param storedContext - The stored trace context\n * @returns SpanContext compatible object\n */\nexport function toSpanContext(storedContext: StoredTraceContext): SpanContext {\n return {\n traceId: storedContext.traceId,\n spanId: storedContext.spanId,\n traceFlags: storedContext.traceFlags,\n isRemote: true,\n };\n}\n"]}
1
+ {"version":3,"file":"webhook.cjs","names":["otelTrace","trace","SpanKind"],"sources":["../src/webhook.ts"],"sourcesContent":["/**\n * Webhook and callback tracing with the \"Parking Lot\" pattern\n *\n * When initiating async operations that return hours/days later (webhooks,\n * payment callbacks, human approvals), you can't keep a span open. This module\n * provides utilities to \"park\" trace context and retrieve it when callbacks arrive.\n *\n * @example Stripe payment webhook\n * ```typescript\n * import { createParkingLot, InMemoryTraceContextStore } from 'autotel/webhook';\n *\n * const parkingLot = createParkingLot({\n * store: new InMemoryTraceContextStore(),\n * defaultTTLMs: 24 * 60 * 60 * 1000, // 24 hours\n * });\n *\n * // When initiating payment\n * export const initiatePayment = trace(ctx => async (orderId: string) => {\n * await parkingLot.park(`payment:${orderId}`, { orderId });\n * await stripeClient.createPaymentIntent({ metadata: { orderId } });\n * });\n *\n * // When Stripe webhook arrives (hours later)\n * export const handleStripeWebhook = parkingLot.traceCallback({\n * name: 'stripe.webhook.payment_intent.succeeded',\n * correlationKeyFrom: (event) => `payment:${event.data.object.metadata.orderId}`,\n * })(ctx => async (event: Stripe.Event) => {\n * // ctx.parkedContext contains the original trace context\n * // ctx.elapsedMs shows time since payment was initiated\n * await fulfillOrder(event.data.object);\n * });\n * ```\n *\n * @module\n */\n\nimport { SpanKind, trace as otelTrace } from '@opentelemetry/api';\nimport type { SpanContext, Link } from '@opentelemetry/api';\nimport { emitCorrelatedEvent } from './correlated-events';\nimport { trace } from './functional';\nimport type { AttributeValue, TraceContext } from './trace-context';\nimport { recordStructuredError } from './structured-error';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Stored trace context for parking lot pattern\n */\nexport interface StoredTraceContext {\n /** Trace ID from the original span */\n traceId: string;\n\n /** Span ID from the original span */\n spanId: string;\n\n /** Trace flags (sampling decision) */\n traceFlags: number;\n\n /** When the context was parked */\n parkedAt: number;\n\n /** Optional TTL in milliseconds */\n ttlMs?: number;\n\n /** User-provided metadata */\n metadata?: Record<string, string>;\n}\n\n/**\n * Interface for trace context storage backends\n *\n * Implement this interface to use different storage backends (Redis, DynamoDB, etc.)\n */\nexport interface TraceContextStore {\n /**\n * Save trace context with a correlation key\n *\n * @param key - Unique correlation key (e.g., \"payment:order-123\")\n * @param context - The trace context to store\n */\n save(key: string, context: StoredTraceContext): Promise<void>;\n\n /**\n * Load trace context by correlation key\n *\n * @param key - The correlation key used when parking\n * @returns The stored context, or null if not found/expired\n */\n load(key: string): Promise<StoredTraceContext | null>;\n\n /**\n * Delete trace context by correlation key\n *\n * @param key - The correlation key to delete\n */\n delete(key: string): Promise<void>;\n}\n\n/**\n * Configuration for creating a parking lot\n */\nexport interface ParkingLotConfig {\n /** Storage backend for parked contexts */\n store: TraceContextStore;\n\n /** Default TTL in milliseconds (default: 24 hours) */\n defaultTTLMs?: number;\n\n /** Prefix for all correlation keys (default: \"parkingLot:\") */\n keyPrefix?: string;\n\n /** Whether to auto-delete after retrieval (default: true) */\n autoDeleteOnRetrieve?: boolean;\n\n /** Callback when context expires or is not found */\n onMiss?: (correlationKey: string) => void;\n}\n\n/**\n * Configuration for traceCallback wrapper\n */\nexport interface CallbackConfig {\n /** Span name for the callback handler */\n name: string;\n\n /**\n * Extract correlation key from callback arguments\n *\n * @example\n * ```typescript\n * correlationKeyFrom: (event) => `payment:${event.data.orderId}`\n * ```\n */\n correlationKeyFrom: (args: unknown[]) => string;\n\n /** Additional span attributes */\n attributes?: Record<string, string | number | boolean>;\n\n /** Whether to fail if parked context is not found (default: false) */\n requireParkedContext?: boolean;\n}\n\n/**\n * Extended context for callback handlers\n */\nexport interface CallbackContext extends TraceContext {\n /** The retrieved parked context, if found */\n parkedContext: StoredTraceContext | null;\n\n /** Time elapsed since context was parked (ms), or null if not found */\n elapsedMs: number | null;\n\n /** The correlation key used for retrieval */\n correlationKey: string;\n}\n\n/**\n * The parking lot instance\n */\nexport interface ParkingLot {\n /**\n * Park current trace context before initiating async operation\n *\n * Call this before sending a webhook, initiating a payment, or starting\n * any operation that will complete via callback.\n *\n * @param correlationKey - Unique key to retrieve context later (e.g., \"payment:order-123\")\n * @param metadata - Optional metadata to store with the context\n * @returns The correlation key (with prefix applied)\n *\n * @example\n * ```typescript\n * await parkingLot.park(`payment:${orderId}`, {\n * customerId: customer.id,\n * amount: payment.amount.toString(),\n * });\n * ```\n */\n park(\n correlationKey: string,\n metadata?: Record<string, string>,\n ): Promise<string>;\n\n /**\n * Retrieve parked context when callback arrives\n *\n * @param correlationKey - The key used when parking\n * @returns The stored context, or null if not found/expired\n */\n retrieve(correlationKey: string): Promise<StoredTraceContext | null>;\n\n /**\n * Wrap a callback handler with automatic context retrieval and linking\n *\n * Creates a traced function that:\n * 1. Extracts correlation key from arguments\n * 2. Retrieves parked context from storage\n * 3. Creates a span link to the original trace\n * 4. Provides elapsed time since parking\n *\n * @param config - Callback configuration\n * @returns Factory function for the callback handler\n *\n * @example\n * ```typescript\n * export const handleWebhook = parkingLot.traceCallback({\n * name: 'webhook.payment.completed',\n * correlationKeyFrom: (args) => `payment:${args[0].orderId}`,\n * })(ctx => async (event) => {\n * console.log(`Payment completed after ${ctx.elapsedMs}ms`);\n * await processPayment(event);\n * });\n * ```\n */\n traceCallback<TArgs extends unknown[], TReturn>(\n config: CallbackConfig,\n ): (\n fnFactory: (ctx: CallbackContext) => (...args: TArgs) => Promise<TReturn>,\n ) => (...args: TArgs) => Promise<TReturn>;\n\n /**\n * Manually create a span link from stored context\n *\n * Useful when you need more control over span creation.\n *\n * @param storedContext - The stored trace context\n * @returns A span link that can be added to a span\n */\n createLink(storedContext: StoredTraceContext): Link;\n\n /**\n * Check if a parked context exists (without retrieving/deleting it)\n *\n * @param correlationKey - The key to check\n * @returns True if context exists and hasn't expired\n */\n exists(correlationKey: string): Promise<boolean>;\n}\n\n// ============================================================================\n// In-Memory Store (for testing and development)\n// ============================================================================\n\n/**\n * In-memory trace context store\n *\n * Useful for testing and development. For production, use a persistent\n * store like Redis or DynamoDB.\n *\n * @example\n * ```typescript\n * const store = new InMemoryTraceContextStore();\n * const parkingLot = createParkingLot({ store });\n * ```\n */\nexport class InMemoryTraceContextStore implements TraceContextStore {\n private store = new Map<string, StoredTraceContext>();\n private cleanupInterval: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private options: {\n /** Cleanup interval in ms (default: 60000) */\n cleanupIntervalMs?: number;\n } = {},\n ) {\n // Start periodic cleanup of expired entries\n const cleanupMs = options.cleanupIntervalMs ?? 60_000;\n if (cleanupMs > 0) {\n this.cleanupInterval = setInterval(() => this.cleanup(), cleanupMs);\n // Don't prevent process exit\n if (this.cleanupInterval.unref) {\n this.cleanupInterval.unref();\n }\n }\n }\n\n async save(key: string, context: StoredTraceContext): Promise<void> {\n this.store.set(key, context);\n }\n\n async load(key: string): Promise<StoredTraceContext | null> {\n const context = this.store.get(key);\n if (!context) {\n return null;\n }\n\n // Check TTL expiration\n if (context.ttlMs) {\n const age = Date.now() - context.parkedAt;\n if (age > context.ttlMs) {\n this.store.delete(key);\n return null;\n }\n }\n\n return context;\n }\n\n async delete(key: string): Promise<void> {\n this.store.delete(key);\n }\n\n /**\n * Get number of stored contexts (for testing)\n */\n get size(): number {\n return this.store.size;\n }\n\n /**\n * Clear all stored contexts (for testing)\n */\n clear(): void {\n this.store.clear();\n }\n\n /**\n * Stop the cleanup interval\n */\n destroy(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n }\n\n private cleanup(): void {\n const now = Date.now();\n for (const [key, context] of this.store.entries()) {\n if (context.ttlMs) {\n const age = now - context.parkedAt;\n if (age > context.ttlMs) {\n this.store.delete(key);\n }\n }\n }\n }\n}\n\n// ============================================================================\n// Parking Lot Factory\n// ============================================================================\n\n/**\n * Create a parking lot for trace context storage and retrieval\n *\n * @param config - Parking lot configuration\n * @returns A parking lot instance\n *\n * @example Basic usage\n * ```typescript\n * const parkingLot = createParkingLot({\n * store: new InMemoryTraceContextStore(),\n * defaultTTLMs: 24 * 60 * 60 * 1000, // 24 hours\n * });\n * ```\n *\n * @example With Redis store\n * ```typescript\n * class RedisTraceContextStore implements TraceContextStore {\n * constructor(private redis: Redis) {}\n *\n * async save(key: string, context: StoredTraceContext) {\n * const ttlSeconds = context.ttlMs ? Math.ceil(context.ttlMs / 1000) : 86400;\n * await this.redis.setex(key, ttlSeconds, JSON.stringify(context));\n * }\n *\n * async load(key: string) {\n * const data = await this.redis.get(key);\n * return data ? JSON.parse(data) : null;\n * }\n *\n * async delete(key: string) {\n * await this.redis.del(key);\n * }\n * }\n *\n * const parkingLot = createParkingLot({\n * store: new RedisTraceContextStore(redis),\n * });\n * ```\n */\nexport function createParkingLot(config: ParkingLotConfig): ParkingLot {\n const {\n store,\n defaultTTLMs = 24 * 60 * 60 * 1000, // 24 hours\n keyPrefix = 'parkingLot:',\n autoDeleteOnRetrieve = true,\n onMiss,\n } = config;\n\n /**\n * Get current span context from active context\n */\n function getCurrentSpanContext(): SpanContext | null {\n const activeSpan = otelTrace.getActiveSpan();\n if (!activeSpan) {\n return null;\n }\n return activeSpan.spanContext();\n }\n\n /**\n * Apply key prefix\n */\n function prefixKey(key: string): string {\n return `${keyPrefix}${key}`;\n }\n\n const parkingLot: ParkingLot = {\n async park(\n correlationKey: string,\n metadata?: Record<string, string>,\n ): Promise<string> {\n const spanContext = getCurrentSpanContext();\n const fullKey = prefixKey(correlationKey);\n\n const storedContext: StoredTraceContext = {\n traceId: spanContext?.traceId ?? '',\n spanId: spanContext?.spanId ?? '',\n traceFlags: spanContext?.traceFlags ?? 0,\n parkedAt: Date.now(),\n ttlMs: defaultTTLMs,\n metadata,\n };\n\n await store.save(fullKey, storedContext);\n\n const activeSpan = otelTrace.getActiveSpan();\n if (activeSpan) {\n const parkAttrs: Record<string, AttributeValue> = {\n 'parking_lot.correlation_key': correlationKey,\n 'parking_lot.ttl_ms': defaultTTLMs,\n ...(metadata &&\n Object.fromEntries(\n Object.entries(metadata).map(([k, v]) => [\n `parking_lot.metadata.${k}`,\n v,\n ]),\n )),\n };\n emitCorrelatedEvent(\n {\n setAttribute: (k, v) => activeSpan.setAttribute(k, v),\n setAttributes: (a) => activeSpan.setAttributes(a),\n addEvent: (n, a) => activeSpan.addEvent(n, a),\n },\n 'trace_context_parked',\n parkAttrs,\n );\n }\n\n // Return the unprefixed key so callers can use the same key for retrieve()\n return correlationKey;\n },\n\n async retrieve(correlationKey: string): Promise<StoredTraceContext | null> {\n const fullKey = prefixKey(correlationKey);\n const storedContext = await store.load(fullKey);\n\n if (!storedContext) {\n onMiss?.(correlationKey);\n return null;\n }\n\n if (autoDeleteOnRetrieve) {\n await store.delete(fullKey);\n }\n\n return storedContext;\n },\n\n traceCallback<TArgs extends unknown[], TReturn>(\n callbackConfig: CallbackConfig,\n ): (\n fnFactory: (ctx: CallbackContext) => (...args: TArgs) => Promise<TReturn>,\n ) => (...args: TArgs) => Promise<TReturn> {\n return (\n fnFactory: (\n ctx: CallbackContext,\n ) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>(\n {\n name: callbackConfig.name,\n spanKind: SpanKind.SERVER,\n },\n (baseCtx) => {\n return async (...args: TArgs) => {\n // Extract correlation key from arguments\n const correlationKey = callbackConfig.correlationKeyFrom(args);\n\n // Retrieve parked context\n const parkedContext = await parkingLot.retrieve(correlationKey);\n\n // Calculate elapsed time\n const elapsedMs = parkedContext\n ? Date.now() - parkedContext.parkedAt\n : null;\n\n // Set span attributes\n baseCtx.setAttribute(\n 'parking_lot.correlation_key',\n correlationKey,\n );\n\n if (parkedContext) {\n baseCtx.setAttribute('parking_lot.elapsed_ms', elapsedMs!);\n baseCtx.setAttribute(\n 'parking_lot.original_trace_id',\n parkedContext.traceId,\n );\n baseCtx.setAttribute(\n 'parking_lot.original_span_id',\n parkedContext.spanId,\n );\n\n // Add metadata as attributes\n if (parkedContext.metadata) {\n for (const [key, value] of Object.entries(\n parkedContext.metadata,\n )) {\n baseCtx.setAttribute(`parking_lot.metadata.${key}`, value);\n }\n }\n\n // Create span link to original trace\n const link = parkingLot.createLink(parkedContext);\n baseCtx.addLinks([link]);\n\n emitCorrelatedEvent(baseCtx, 'parked_context_retrieved', {\n 'parking_lot.correlation_key': correlationKey,\n 'parking_lot.elapsed_ms': elapsedMs!,\n 'parking_lot.original_trace_id': parkedContext.traceId,\n });\n } else {\n baseCtx.setAttribute('parking_lot.context_found', false);\n\n if (callbackConfig.requireParkedContext) {\n const error = new Error(\n `Required parked context not found for key: ${correlationKey}`,\n );\n recordStructuredError(baseCtx, error);\n throw error;\n }\n }\n\n // Apply custom attributes\n if (callbackConfig.attributes) {\n for (const [key, value] of Object.entries(\n callbackConfig.attributes,\n )) {\n baseCtx.setAttribute(key, value);\n }\n }\n\n // Create extended context\n const callbackCtx: CallbackContext = {\n ...baseCtx,\n parkedContext,\n elapsedMs,\n correlationKey,\n };\n\n // Execute user's function\n const userFn = fnFactory(callbackCtx);\n return userFn(...args);\n };\n },\n );\n };\n },\n\n createLink(storedContext: StoredTraceContext): Link {\n return {\n context: {\n traceId: storedContext.traceId,\n spanId: storedContext.spanId,\n traceFlags: storedContext.traceFlags,\n isRemote: true,\n },\n attributes: {\n 'link.type': 'parking_lot',\n 'parking_lot.parked_at': storedContext.parkedAt,\n ...(storedContext.metadata && {\n 'parking_lot.has_metadata': true,\n }),\n },\n };\n },\n\n async exists(correlationKey: string): Promise<boolean> {\n const fullKey = prefixKey(correlationKey);\n const context = await store.load(fullKey);\n return context !== null;\n },\n };\n\n return parkingLot;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Create a correlation key from multiple parts\n *\n * @param parts - Key parts to join\n * @returns A correlation key string\n *\n * @example\n * ```typescript\n * const key = createCorrelationKey('payment', orderId, 'stripe');\n * // Returns: \"payment:order-123:stripe\"\n * ```\n */\nexport function createCorrelationKey(...parts: (string | number)[]): string {\n return parts.map(String).join(':');\n}\n\n/**\n * Extract span context from stored context for manual linking\n *\n * @param storedContext - The stored trace context\n * @returns SpanContext compatible object\n */\nexport function toSpanContext(storedContext: StoredTraceContext): SpanContext {\n return {\n traceId: storedContext.traceId,\n spanId: storedContext.spanId,\n traceFlags: storedContext.traceFlags,\n isRemote: true,\n };\n}\n"],"mappings":"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"}
@@ -1,58 +1,23 @@
1
- import { Link, SpanContext } from '@opentelemetry/api';
2
- import { T as TraceContext } from './trace-context-DbGKd1Rn.cjs';
3
-
4
- /**
5
- * Webhook and callback tracing with the "Parking Lot" pattern
6
- *
7
- * When initiating async operations that return hours/days later (webhooks,
8
- * payment callbacks, human approvals), you can't keep a span open. This module
9
- * provides utilities to "park" trace context and retrieve it when callbacks arrive.
10
- *
11
- * @example Stripe payment webhook
12
- * ```typescript
13
- * import { createParkingLot, InMemoryTraceContextStore } from 'autotel/webhook';
14
- *
15
- * const parkingLot = createParkingLot({
16
- * store: new InMemoryTraceContextStore(),
17
- * defaultTTLMs: 24 * 60 * 60 * 1000, // 24 hours
18
- * });
19
- *
20
- * // When initiating payment
21
- * export const initiatePayment = trace(ctx => async (orderId: string) => {
22
- * await parkingLot.park(`payment:${orderId}`, { orderId });
23
- * await stripeClient.createPaymentIntent({ metadata: { orderId } });
24
- * });
25
- *
26
- * // When Stripe webhook arrives (hours later)
27
- * export const handleStripeWebhook = parkingLot.traceCallback({
28
- * name: 'stripe.webhook.payment_intent.succeeded',
29
- * correlationKeyFrom: (event) => `payment:${event.data.object.metadata.orderId}`,
30
- * })(ctx => async (event: Stripe.Event) => {
31
- * // ctx.parkedContext contains the original trace context
32
- * // ctx.elapsedMs shows time since payment was initiated
33
- * await fulfillOrder(event.data.object);
34
- * });
35
- * ```
36
- *
37
- * @module
38
- */
1
+ import { n as TraceContext } from "./trace-context-Cijqoi6e.cjs";
2
+ import { Link, SpanContext } from "@opentelemetry/api";
39
3
 
4
+ //#region src/webhook.d.ts
40
5
  /**
41
6
  * Stored trace context for parking lot pattern
42
7
  */
43
8
  interface StoredTraceContext {
44
- /** Trace ID from the original span */
45
- traceId: string;
46
- /** Span ID from the original span */
47
- spanId: string;
48
- /** Trace flags (sampling decision) */
49
- traceFlags: number;
50
- /** When the context was parked */
51
- parkedAt: number;
52
- /** Optional TTL in milliseconds */
53
- ttlMs?: number;
54
- /** User-provided metadata */
55
- metadata?: Record<string, string>;
9
+ /** Trace ID from the original span */
10
+ traceId: string;
11
+ /** Span ID from the original span */
12
+ spanId: string;
13
+ /** Trace flags (sampling decision) */
14
+ traceFlags: number;
15
+ /** When the context was parked */
16
+ parkedAt: number;
17
+ /** Optional TTL in milliseconds */
18
+ ttlMs?: number;
19
+ /** User-provided metadata */
20
+ metadata?: Record<string, string>;
56
21
  }
57
22
  /**
58
23
  * Interface for trace context storage backends
@@ -60,143 +25,143 @@ interface StoredTraceContext {
60
25
  * Implement this interface to use different storage backends (Redis, DynamoDB, etc.)
61
26
  */
62
27
  interface TraceContextStore {
63
- /**
64
- * Save trace context with a correlation key
65
- *
66
- * @param key - Unique correlation key (e.g., "payment:order-123")
67
- * @param context - The trace context to store
68
- */
69
- save(key: string, context: StoredTraceContext): Promise<void>;
70
- /**
71
- * Load trace context by correlation key
72
- *
73
- * @param key - The correlation key used when parking
74
- * @returns The stored context, or null if not found/expired
75
- */
76
- load(key: string): Promise<StoredTraceContext | null>;
77
- /**
78
- * Delete trace context by correlation key
79
- *
80
- * @param key - The correlation key to delete
81
- */
82
- delete(key: string): Promise<void>;
28
+ /**
29
+ * Save trace context with a correlation key
30
+ *
31
+ * @param key - Unique correlation key (e.g., "payment:order-123")
32
+ * @param context - The trace context to store
33
+ */
34
+ save(key: string, context: StoredTraceContext): Promise<void>;
35
+ /**
36
+ * Load trace context by correlation key
37
+ *
38
+ * @param key - The correlation key used when parking
39
+ * @returns The stored context, or null if not found/expired
40
+ */
41
+ load(key: string): Promise<StoredTraceContext | null>;
42
+ /**
43
+ * Delete trace context by correlation key
44
+ *
45
+ * @param key - The correlation key to delete
46
+ */
47
+ delete(key: string): Promise<void>;
83
48
  }
84
49
  /**
85
50
  * Configuration for creating a parking lot
86
51
  */
87
52
  interface ParkingLotConfig {
88
- /** Storage backend for parked contexts */
89
- store: TraceContextStore;
90
- /** Default TTL in milliseconds (default: 24 hours) */
91
- defaultTTLMs?: number;
92
- /** Prefix for all correlation keys (default: "parkingLot:") */
93
- keyPrefix?: string;
94
- /** Whether to auto-delete after retrieval (default: true) */
95
- autoDeleteOnRetrieve?: boolean;
96
- /** Callback when context expires or is not found */
97
- onMiss?: (correlationKey: string) => void;
53
+ /** Storage backend for parked contexts */
54
+ store: TraceContextStore;
55
+ /** Default TTL in milliseconds (default: 24 hours) */
56
+ defaultTTLMs?: number;
57
+ /** Prefix for all correlation keys (default: "parkingLot:") */
58
+ keyPrefix?: string;
59
+ /** Whether to auto-delete after retrieval (default: true) */
60
+ autoDeleteOnRetrieve?: boolean;
61
+ /** Callback when context expires or is not found */
62
+ onMiss?: (correlationKey: string) => void;
98
63
  }
99
64
  /**
100
65
  * Configuration for traceCallback wrapper
101
66
  */
102
67
  interface CallbackConfig {
103
- /** Span name for the callback handler */
104
- name: string;
105
- /**
106
- * Extract correlation key from callback arguments
107
- *
108
- * @example
109
- * ```typescript
110
- * correlationKeyFrom: (event) => `payment:${event.data.orderId}`
111
- * ```
112
- */
113
- correlationKeyFrom: (args: unknown[]) => string;
114
- /** Additional span attributes */
115
- attributes?: Record<string, string | number | boolean>;
116
- /** Whether to fail if parked context is not found (default: false) */
117
- requireParkedContext?: boolean;
68
+ /** Span name for the callback handler */
69
+ name: string;
70
+ /**
71
+ * Extract correlation key from callback arguments
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * correlationKeyFrom: (event) => `payment:${event.data.orderId}`
76
+ * ```
77
+ */
78
+ correlationKeyFrom: (args: unknown[]) => string;
79
+ /** Additional span attributes */
80
+ attributes?: Record<string, string | number | boolean>;
81
+ /** Whether to fail if parked context is not found (default: false) */
82
+ requireParkedContext?: boolean;
118
83
  }
119
84
  /**
120
85
  * Extended context for callback handlers
121
86
  */
122
87
  interface CallbackContext extends TraceContext {
123
- /** The retrieved parked context, if found */
124
- parkedContext: StoredTraceContext | null;
125
- /** Time elapsed since context was parked (ms), or null if not found */
126
- elapsedMs: number | null;
127
- /** The correlation key used for retrieval */
128
- correlationKey: string;
88
+ /** The retrieved parked context, if found */
89
+ parkedContext: StoredTraceContext | null;
90
+ /** Time elapsed since context was parked (ms), or null if not found */
91
+ elapsedMs: number | null;
92
+ /** The correlation key used for retrieval */
93
+ correlationKey: string;
129
94
  }
130
95
  /**
131
96
  * The parking lot instance
132
97
  */
133
98
  interface ParkingLot {
134
- /**
135
- * Park current trace context before initiating async operation
136
- *
137
- * Call this before sending a webhook, initiating a payment, or starting
138
- * any operation that will complete via callback.
139
- *
140
- * @param correlationKey - Unique key to retrieve context later (e.g., "payment:order-123")
141
- * @param metadata - Optional metadata to store with the context
142
- * @returns The correlation key (with prefix applied)
143
- *
144
- * @example
145
- * ```typescript
146
- * await parkingLot.park(`payment:${orderId}`, {
147
- * customerId: customer.id,
148
- * amount: payment.amount.toString(),
149
- * });
150
- * ```
151
- */
152
- park(correlationKey: string, metadata?: Record<string, string>): Promise<string>;
153
- /**
154
- * Retrieve parked context when callback arrives
155
- *
156
- * @param correlationKey - The key used when parking
157
- * @returns The stored context, or null if not found/expired
158
- */
159
- retrieve(correlationKey: string): Promise<StoredTraceContext | null>;
160
- /**
161
- * Wrap a callback handler with automatic context retrieval and linking
162
- *
163
- * Creates a traced function that:
164
- * 1. Extracts correlation key from arguments
165
- * 2. Retrieves parked context from storage
166
- * 3. Creates a span link to the original trace
167
- * 4. Provides elapsed time since parking
168
- *
169
- * @param config - Callback configuration
170
- * @returns Factory function for the callback handler
171
- *
172
- * @example
173
- * ```typescript
174
- * export const handleWebhook = parkingLot.traceCallback({
175
- * name: 'webhook.payment.completed',
176
- * correlationKeyFrom: (args) => `payment:${args[0].orderId}`,
177
- * })(ctx => async (event) => {
178
- * console.log(`Payment completed after ${ctx.elapsedMs}ms`);
179
- * await processPayment(event);
180
- * });
181
- * ```
182
- */
183
- traceCallback<TArgs extends unknown[], TReturn>(config: CallbackConfig): (fnFactory: (ctx: CallbackContext) => (...args: TArgs) => Promise<TReturn>) => (...args: TArgs) => Promise<TReturn>;
184
- /**
185
- * Manually create a span link from stored context
186
- *
187
- * Useful when you need more control over span creation.
188
- *
189
- * @param storedContext - The stored trace context
190
- * @returns A span link that can be added to a span
191
- */
192
- createLink(storedContext: StoredTraceContext): Link;
193
- /**
194
- * Check if a parked context exists (without retrieving/deleting it)
195
- *
196
- * @param correlationKey - The key to check
197
- * @returns True if context exists and hasn't expired
198
- */
199
- exists(correlationKey: string): Promise<boolean>;
99
+ /**
100
+ * Park current trace context before initiating async operation
101
+ *
102
+ * Call this before sending a webhook, initiating a payment, or starting
103
+ * any operation that will complete via callback.
104
+ *
105
+ * @param correlationKey - Unique key to retrieve context later (e.g., "payment:order-123")
106
+ * @param metadata - Optional metadata to store with the context
107
+ * @returns The correlation key (with prefix applied)
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * await parkingLot.park(`payment:${orderId}`, {
112
+ * customerId: customer.id,
113
+ * amount: payment.amount.toString(),
114
+ * });
115
+ * ```
116
+ */
117
+ park(correlationKey: string, metadata?: Record<string, string>): Promise<string>;
118
+ /**
119
+ * Retrieve parked context when callback arrives
120
+ *
121
+ * @param correlationKey - The key used when parking
122
+ * @returns The stored context, or null if not found/expired
123
+ */
124
+ retrieve(correlationKey: string): Promise<StoredTraceContext | null>;
125
+ /**
126
+ * Wrap a callback handler with automatic context retrieval and linking
127
+ *
128
+ * Creates a traced function that:
129
+ * 1. Extracts correlation key from arguments
130
+ * 2. Retrieves parked context from storage
131
+ * 3. Creates a span link to the original trace
132
+ * 4. Provides elapsed time since parking
133
+ *
134
+ * @param config - Callback configuration
135
+ * @returns Factory function for the callback handler
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * export const handleWebhook = parkingLot.traceCallback({
140
+ * name: 'webhook.payment.completed',
141
+ * correlationKeyFrom: (args) => `payment:${args[0].orderId}`,
142
+ * })(ctx => async (event) => {
143
+ * console.log(`Payment completed after ${ctx.elapsedMs}ms`);
144
+ * await processPayment(event);
145
+ * });
146
+ * ```
147
+ */
148
+ traceCallback<TArgs extends unknown[], TReturn>(config: CallbackConfig): (fnFactory: (ctx: CallbackContext) => (...args: TArgs) => Promise<TReturn>) => (...args: TArgs) => Promise<TReturn>;
149
+ /**
150
+ * Manually create a span link from stored context
151
+ *
152
+ * Useful when you need more control over span creation.
153
+ *
154
+ * @param storedContext - The stored trace context
155
+ * @returns A span link that can be added to a span
156
+ */
157
+ createLink(storedContext: StoredTraceContext): Link;
158
+ /**
159
+ * Check if a parked context exists (without retrieving/deleting it)
160
+ *
161
+ * @param correlationKey - The key to check
162
+ * @returns True if context exists and hasn't expired
163
+ */
164
+ exists(correlationKey: string): Promise<boolean>;
200
165
  }
201
166
  /**
202
167
  * In-memory trace context store
@@ -211,29 +176,28 @@ interface ParkingLot {
211
176
  * ```
212
177
  */
213
178
  declare class InMemoryTraceContextStore implements TraceContextStore {
214
- private options;
215
- private store;
216
- private cleanupInterval;
217
- constructor(options?: {
218
- /** Cleanup interval in ms (default: 60000) */
219
- cleanupIntervalMs?: number;
220
- });
221
- save(key: string, context: StoredTraceContext): Promise<void>;
222
- load(key: string): Promise<StoredTraceContext | null>;
223
- delete(key: string): Promise<void>;
224
- /**
225
- * Get number of stored contexts (for testing)
226
- */
227
- get size(): number;
228
- /**
229
- * Clear all stored contexts (for testing)
230
- */
231
- clear(): void;
232
- /**
233
- * Stop the cleanup interval
234
- */
235
- destroy(): void;
236
- private cleanup;
179
+ private options;
180
+ private store;
181
+ private cleanupInterval;
182
+ constructor(options?: {
183
+ /** Cleanup interval in ms (default: 60000) */cleanupIntervalMs?: number;
184
+ });
185
+ save(key: string, context: StoredTraceContext): Promise<void>;
186
+ load(key: string): Promise<StoredTraceContext | null>;
187
+ delete(key: string): Promise<void>;
188
+ /**
189
+ * Get number of stored contexts (for testing)
190
+ */
191
+ get size(): number;
192
+ /**
193
+ * Clear all stored contexts (for testing)
194
+ */
195
+ clear(): void;
196
+ /**
197
+ * Stop the cleanup interval
198
+ */
199
+ destroy(): void;
200
+ private cleanup;
237
201
  }
238
202
  /**
239
203
  * Create a parking lot for trace context storage and retrieval
@@ -295,5 +259,6 @@ declare function createCorrelationKey(...parts: (string | number)[]): string;
295
259
  * @returns SpanContext compatible object
296
260
  */
297
261
  declare function toSpanContext(storedContext: StoredTraceContext): SpanContext;
298
-
299
- export { type CallbackConfig, type CallbackContext, InMemoryTraceContextStore, type ParkingLot, type ParkingLotConfig, type StoredTraceContext, type TraceContextStore, createCorrelationKey, createParkingLot, toSpanContext };
262
+ //#endregion
263
+ export { CallbackConfig, CallbackContext, InMemoryTraceContextStore, ParkingLot, ParkingLotConfig, StoredTraceContext, TraceContextStore, createCorrelationKey, createParkingLot, toSpanContext };
264
+ //# sourceMappingURL=webhook.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.cts","names":[],"sources":["../src/webhook.ts"],"mappings":";;;;;;;UAkDiB,kBAAA;EAqDA;EAnDf,OAAA;;EAGA,MAAA;EAkDA;EA/CA,UAAA;EAkDA;EA/CA,QAAA;EAqDA;EAlDA,KAAA;EAqDU;EAlDV,QAAA,GAAW,MAAM;AAAA;AAwDnB;;;;;AAAA,UAhDiB,iBAAA;EA4DM;;;;;AAMD;EA3DpB,IAAA,CAAK,GAAA,UAAa,OAAA,EAAS,kBAAA,GAAqB,OAAA;EAiEjB;;;;;;EAzD/B,IAAA,CAAK,GAAA,WAAc,OAAA,CAAQ,kBAAA;EAiE3B;;AAAc;AAMhB;;EAhEE,MAAA,CAAO,GAAA,WAAc,OAAA;AAAA;;;;UAMN,gBAAA;EAoHI;EAlHnB,KAAA,EAAO,iBAAiB;EAkH2C;EA/GnE,YAAA;EAgHe;EA7Gf,SAAA;EA6GyB;EA1GzB,oBAAA;EAoH+C;EAjH/C,MAAA,IAAU,cAAA;AAAA;;;;UAMK,cAAA;EA2Db;EAzDF,IAAA;EAkEA;;;;;;;;EAxDA,kBAAA,GAAqB,IAAA;EAoFF;EAjFnB,UAAA,GAAa,MAAM;EAiFwB;EA9E3C,oBAAA;AAAA;;;;UAMe,eAAA,SAAwB,YAAY;EAyE1B;EAvEzB,aAAA,EAAe,kBAAA;EAiFf;EA9EA,SAAA;EA8EW;EA3EX,cAAA;AAAA;;;;UAMe,UAAA;EAgGJ;;;;;;;;;;;;;;;;;;EA7EX,IAAA,CACE,cAAA,UACA,QAAA,GAAW,MAAA,mBACV,OAAA;EA+FQ;;;;;;EAvFX,QAAA,CAAS,cAAA,WAAyB,OAAA,CAAQ,kBAAA;EA2FT;;;;;;;;;AA8ClB;AAwDjB;;;;;;;;AAAsE;AA2OtE;;;;EAnZE,aAAA,mCACE,MAAA,EAAQ,cAAA,IAER,SAAA,GAAY,GAAA,EAAK,eAAA,SAAwB,IAAA,EAAM,KAAA,KAAU,OAAA,CAAQ,OAAA,UAC1D,IAAA,EAAM,KAAA,KAAU,OAAA,CAAQ,OAAA;EAyZnB;;;;;;;;EA/Yd,UAAA,CAAW,aAAA,EAAe,kBAAA,GAAqB,IAAA;;;;;;;EAQ/C,MAAA,CAAO,cAAA,WAAyB,OAAA;AAAA;;;;;;;;;;;;;cAmBrB,yBAAA,YAAqC,iBAAA;EAAA,QAKtC,OAAA;EAAA,QAJF,KAAA;EAAA,QACA,eAAA;cAGE,OAAA;kDAEN,iBAAA;EAAA;EAcE,IAAA,CAAK,GAAA,UAAa,OAAA,EAAS,kBAAA,GAAqB,OAAA;EAIhD,IAAA,CAAK,GAAA,WAAc,OAAA,CAAQ,kBAAA;EAkB3B,MAAA,CAAO,GAAA,WAAc,OAAA;;;;MAOvB,IAAA;;;;EAOJ,KAAA;;;;EAOA,OAAA;EAAA,QAOQ,OAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwDM,gBAAA,CAAiB,MAAA,EAAQ,gBAAA,GAAmB,UAAU;;;;;;;;;;;;;iBA2OtD,oBAAA,IAAwB,KAAK;;;;;;;iBAU7B,aAAA,CAAc,aAAA,EAAe,kBAAA,GAAqB,WAAW"}