autotel 3.5.0 → 3.7.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 (591) 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-D3etyRVc.cjs +713 -0
  12. package/dist/attributes-D3etyRVc.cjs.map +1 -0
  13. package/dist/attributes-ksn4HVbd.js +600 -0
  14. package/dist/attributes-ksn4HVbd.js.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 -53
  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 -16
  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 -65
  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 -63
  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 -36
  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 -20
  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 -56
  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 -19
  149. package/dist/http.cjs +276 -175
  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 -173
  156. package/dist/http.js.map +1 -1
  157. package/dist/index-CX0aG1Uh.d.ts +708 -0
  158. package/dist/index-CX0aG1Uh.d.ts.map +1 -0
  159. package/dist/index-DIWZFKUS.d.cts +708 -0
  160. package/dist/index-DIWZFKUS.d.cts.map +1 -0
  161. package/dist/index.cjs +1050 -1184
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +401 -570
  164. package/dist/index.d.cts.map +1 -0
  165. package/dist/index.d.ts +401 -570
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +913 -725
  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 -35
  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 -20
  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-DfXA3R1L.js +184 -0
  276. package/dist/registry-DfXA3R1L.js.map +1 -0
  277. package/dist/registry-JZg2J3RZ.cjs +334 -0
  278. package/dist/registry-JZg2J3RZ.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 +440 -38
  308. package/dist/semantic-helpers.cjs.map +1 -1
  309. package/dist/semantic-helpers.d.cts +38 -45
  310. package/dist/semantic-helpers.d.cts.map +1 -0
  311. package/dist/semantic-helpers.d.ts +38 -45
  312. package/dist/semantic-helpers.d.ts.map +1 -0
  313. package/dist/semantic-helpers.js +438 -19
  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 +201 -0
  382. package/dist/validate.cjs.map +1 -0
  383. package/dist/validate.d.cts +105 -0
  384. package/dist/validate.d.cts.map +1 -0
  385. package/dist/validate.d.ts +105 -0
  386. package/dist/validate.d.ts.map +1 -0
  387. package/dist/validate.js +197 -0
  388. package/dist/validate.js.map +1 -0
  389. package/dist/validation-attributes.cjs +45 -0
  390. package/dist/validation-attributes.cjs.map +1 -0
  391. package/dist/validation-attributes.d.cts +33 -0
  392. package/dist/validation-attributes.d.cts.map +1 -0
  393. package/dist/validation-attributes.d.ts +33 -0
  394. package/dist/validation-attributes.d.ts.map +1 -0
  395. package/dist/validation-attributes.js +41 -0
  396. package/dist/validation-attributes.js.map +1 -0
  397. package/dist/webhook.cjs +286 -255
  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 -253
  404. package/dist/webhook.js.map +1 -1
  405. package/dist/workflow-distributed.cjs +498 -411
  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 -409
  412. package/dist/workflow-distributed.js.map +1 -1
  413. package/dist/workflow.cjs +405 -39
  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 -20
  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 +14 -4
  431. package/src/define-event.ts +2 -21
  432. package/src/index.ts +3 -0
  433. package/src/request-logger.test.ts +53 -1
  434. package/src/request-logger.ts +58 -0
  435. package/src/stable-hash.ts +27 -0
  436. package/src/validate.test.ts +287 -0
  437. package/src/validate.ts +307 -0
  438. package/src/validation-attributes.ts +43 -0
  439. package/dist/attributes.cjs.map +0 -1
  440. package/dist/attributes.js.map +0 -1
  441. package/dist/chunk-2ZKEORFN.cjs +0 -14
  442. package/dist/chunk-2ZKEORFN.cjs.map +0 -1
  443. package/dist/chunk-3QXBFGKP.js +0 -344
  444. package/dist/chunk-3QXBFGKP.js.map +0 -1
  445. package/dist/chunk-454CH4OV.js +0 -744
  446. package/dist/chunk-454CH4OV.js.map +0 -1
  447. package/dist/chunk-4A53YIAX.js +0 -180
  448. package/dist/chunk-4A53YIAX.js.map +0 -1
  449. package/dist/chunk-4IFSYQVX.js +0 -337
  450. package/dist/chunk-4IFSYQVX.js.map +0 -1
  451. package/dist/chunk-4P6ZOARG.cjs +0 -33
  452. package/dist/chunk-4P6ZOARG.cjs.map +0 -1
  453. package/dist/chunk-55ER2KD5.js +0 -228
  454. package/dist/chunk-55ER2KD5.js.map +0 -1
  455. package/dist/chunk-5ZN622AO.js +0 -73
  456. package/dist/chunk-5ZN622AO.js.map +0 -1
  457. package/dist/chunk-6S5RUKU3.cjs +0 -347
  458. package/dist/chunk-6S5RUKU3.cjs.map +0 -1
  459. package/dist/chunk-6UQRVUN3.js +0 -222
  460. package/dist/chunk-6UQRVUN3.js.map +0 -1
  461. package/dist/chunk-7552UTQW.js +0 -11
  462. package/dist/chunk-7552UTQW.js.map +0 -1
  463. package/dist/chunk-7EQ4G4SI.cjs +0 -146
  464. package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
  465. package/dist/chunk-7SAWIN74.js +0 -285
  466. package/dist/chunk-7SAWIN74.js.map +0 -1
  467. package/dist/chunk-A4E5AQFK.js +0 -30
  468. package/dist/chunk-A4E5AQFK.js.map +0 -1
  469. package/dist/chunk-AC5GNZKB.cjs +0 -344
  470. package/dist/chunk-AC5GNZKB.cjs.map +0 -1
  471. package/dist/chunk-ALPYR2GC.js +0 -1061
  472. package/dist/chunk-ALPYR2GC.js.map +0 -1
  473. package/dist/chunk-BZHG5IZ4.js +0 -73
  474. package/dist/chunk-BZHG5IZ4.js.map +0 -1
  475. package/dist/chunk-CEAQK2QY.cjs +0 -32
  476. package/dist/chunk-CEAQK2QY.cjs.map +0 -1
  477. package/dist/chunk-CMHVQR6P.js +0 -170
  478. package/dist/chunk-CMHVQR6P.js.map +0 -1
  479. package/dist/chunk-CU6IDACR.cjs +0 -224
  480. package/dist/chunk-CU6IDACR.cjs.map +0 -1
  481. package/dist/chunk-DPSA4QLA.js +0 -344
  482. package/dist/chunk-DPSA4QLA.js.map +0 -1
  483. package/dist/chunk-DQEHQNQE.js +0 -795
  484. package/dist/chunk-DQEHQNQE.js.map +0 -1
  485. package/dist/chunk-ESLWRGAG.cjs +0 -92
  486. package/dist/chunk-ESLWRGAG.cjs.map +0 -1
  487. package/dist/chunk-ESMHTKLJ.cjs +0 -206
  488. package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
  489. package/dist/chunk-FGNDN2FD.cjs +0 -1242
  490. package/dist/chunk-FGNDN2FD.cjs.map +0 -1
  491. package/dist/chunk-FU6R566Y.cjs +0 -236
  492. package/dist/chunk-FU6R566Y.cjs.map +0 -1
  493. package/dist/chunk-GBFTC7Q7.cjs +0 -837
  494. package/dist/chunk-GBFTC7Q7.cjs.map +0 -1
  495. package/dist/chunk-GYR5K654.js +0 -91
  496. package/dist/chunk-GYR5K654.js.map +0 -1
  497. package/dist/chunk-HA2WBOGQ.js +0 -57
  498. package/dist/chunk-HA2WBOGQ.js.map +0 -1
  499. package/dist/chunk-HT5JQKN2.js +0 -118
  500. package/dist/chunk-HT5JQKN2.js.map +0 -1
  501. package/dist/chunk-INJD3G4K.cjs +0 -340
  502. package/dist/chunk-INJD3G4K.cjs.map +0 -1
  503. package/dist/chunk-IOYFAFHJ.cjs +0 -95
  504. package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
  505. package/dist/chunk-J5QENANM.js +0 -87
  506. package/dist/chunk-J5QENANM.js.map +0 -1
  507. package/dist/chunk-J7VGRIAJ.js +0 -64
  508. package/dist/chunk-J7VGRIAJ.js.map +0 -1
  509. package/dist/chunk-KFOHQK7X.js +0 -144
  510. package/dist/chunk-KFOHQK7X.js.map +0 -1
  511. package/dist/chunk-KIL5CUN6.js +0 -31
  512. package/dist/chunk-KIL5CUN6.js.map +0 -1
  513. package/dist/chunk-LITNXTTT.js +0 -3
  514. package/dist/chunk-LITNXTTT.js.map +0 -1
  515. package/dist/chunk-M3LFHHTN.cjs +0 -764
  516. package/dist/chunk-M3LFHHTN.cjs.map +0 -1
  517. package/dist/chunk-NEIB3TLD.cjs +0 -360
  518. package/dist/chunk-NEIB3TLD.cjs.map +0 -1
  519. package/dist/chunk-NVAI5CCN.cjs +0 -39
  520. package/dist/chunk-NVAI5CCN.cjs.map +0 -1
  521. package/dist/chunk-NVGPMGI4.js +0 -95
  522. package/dist/chunk-NVGPMGI4.js.map +0 -1
  523. package/dist/chunk-NZ72VDNY.cjs +0 -4
  524. package/dist/chunk-NZ72VDNY.cjs.map +0 -1
  525. package/dist/chunk-O4JZUCUE.js +0 -1174
  526. package/dist/chunk-O4JZUCUE.js.map +0 -1
  527. package/dist/chunk-O7JOKRN2.js +0 -833
  528. package/dist/chunk-O7JOKRN2.js.map +0 -1
  529. package/dist/chunk-OPPXYVEZ.cjs +0 -131
  530. package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
  531. package/dist/chunk-Q4EULJQY.js +0 -35
  532. package/dist/chunk-Q4EULJQY.js.map +0 -1
  533. package/dist/chunk-QWW3E3JM.cjs +0 -178
  534. package/dist/chunk-QWW3E3JM.cjs.map +0 -1
  535. package/dist/chunk-R7QYGZUP.cjs +0 -1075
  536. package/dist/chunk-R7QYGZUP.cjs.map +0 -1
  537. package/dist/chunk-RUPKBKUF.js +0 -352
  538. package/dist/chunk-RUPKBKUF.js.map +0 -1
  539. package/dist/chunk-SEO6NAQT.js +0 -14
  540. package/dist/chunk-SEO6NAQT.js.map +0 -1
  541. package/dist/chunk-T4B5LB6E.cjs +0 -66
  542. package/dist/chunk-T4B5LB6E.cjs.map +0 -1
  543. package/dist/chunk-TC5ZPWM4.cjs +0 -289
  544. package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
  545. package/dist/chunk-TQ5UWA7S.js +0 -26
  546. package/dist/chunk-TQ5UWA7S.js.map +0 -1
  547. package/dist/chunk-URHPSJW2.js +0 -339
  548. package/dist/chunk-URHPSJW2.js.map +0 -1
  549. package/dist/chunk-UY3UYPBZ.cjs +0 -77
  550. package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
  551. package/dist/chunk-VG2ABKJX.cjs +0 -100
  552. package/dist/chunk-VG2ABKJX.cjs.map +0 -1
  553. package/dist/chunk-VH77IPJN.cjs +0 -358
  554. package/dist/chunk-VH77IPJN.cjs.map +0 -1
  555. package/dist/chunk-VQTCQKHQ.cjs +0 -17
  556. package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
  557. package/dist/chunk-WGWSHJ2N.js +0 -38
  558. package/dist/chunk-WGWSHJ2N.js.map +0 -1
  559. package/dist/chunk-WJH6IYU2.cjs +0 -32
  560. package/dist/chunk-WJH6IYU2.cjs.map +0 -1
  561. package/dist/chunk-YREV3LGG.cjs +0 -61
  562. package/dist/chunk-YREV3LGG.cjs.map +0 -1
  563. package/dist/chunk-YTXEZ4SD.cjs +0 -77
  564. package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
  565. package/dist/chunk-YWCESU4Y.js +0 -1233
  566. package/dist/chunk-YWCESU4Y.js.map +0 -1
  567. package/dist/chunk-Z6HRSM2Y.cjs +0 -799
  568. package/dist/chunk-Z6HRSM2Y.cjs.map +0 -1
  569. package/dist/chunk-Z7PW3KHL.cjs +0 -1198
  570. package/dist/chunk-Z7PW3KHL.cjs.map +0 -1
  571. package/dist/chunk-ZNMBW67B.cjs +0 -40
  572. package/dist/chunk-ZNMBW67B.cjs.map +0 -1
  573. package/dist/correlation-id.cjs.map +0 -1
  574. package/dist/correlation-id.js.map +0 -1
  575. package/dist/event-subscriber.cjs.map +0 -1
  576. package/dist/event-subscriber.js.map +0 -1
  577. package/dist/event.cjs.map +0 -1
  578. package/dist/event.js.map +0 -1
  579. package/dist/exporters.cjs.map +0 -1
  580. package/dist/exporters.js.map +0 -1
  581. package/dist/functional.cjs.map +0 -1
  582. package/dist/functional.js.map +0 -1
  583. package/dist/init-DIowiiCh.d.ts +0 -1167
  584. package/dist/init-j-A1zI16.d.cts +0 -1167
  585. package/dist/processors.cjs.map +0 -1
  586. package/dist/processors.js.map +0 -1
  587. package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
  588. package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
  589. package/dist/utils-BahBCFtJ.d.cts +0 -712
  590. package/dist/utils-CLKwaUlG.d.ts +0 -712
  591. package/dist/yaml-config.cjs.map +0 -1
@@ -1,204 +1,309 @@
1
- 'use strict';
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ let _opentelemetry_api = require("@opentelemetry/api");
2
3
 
3
- var api = require('@opentelemetry/api');
4
-
5
- // src/messaging-adapters.ts
6
- var natsAdapter = {
7
- producer: {
8
- customAttributes: (_ctx, args) => {
9
- const msg = args[0];
10
- const attrs = {};
11
- if (msg?.subject) attrs["nats.subject"] = msg.subject;
12
- if (msg?.replyTo) attrs["nats.reply_to"] = msg.replyTo;
13
- if (msg?.stream) attrs["nats.stream"] = msg.stream;
14
- return attrs;
15
- }
16
- },
17
- consumer: {
18
- headersFrom: (msg) => {
19
- const natsMsg = msg;
20
- const headers = natsMsg.headers;
21
- if (!headers) return;
22
- if (typeof headers.toJSON === "function") {
23
- const json = headers.toJSON();
24
- if (json && typeof json === "object") {
25
- return json;
26
- }
27
- }
28
- if (typeof headers.get === "function") {
29
- const result = {};
30
- const traceHeaders = [
31
- "traceparent",
32
- "tracestate",
33
- "baggage",
34
- "x-b3-traceid",
35
- "x-b3-spanid",
36
- "x-b3-sampled",
37
- "b3"
38
- ];
39
- for (const key of traceHeaders) {
40
- const value = headers.get(key);
41
- if (value) {
42
- result[key] = value;
43
- }
44
- }
45
- if (Object.keys(result).length > 0) {
46
- return result;
47
- }
48
- }
49
- if (typeof headers.entries === "function") {
50
- const result = {};
51
- for (const [key, value] of headers.entries()) {
52
- if (typeof key === "string" && typeof value === "string") {
53
- result[key] = value;
54
- }
55
- }
56
- if (Object.keys(result).length > 0) {
57
- return result;
58
- }
59
- }
60
- return;
61
- },
62
- customAttributes: (_ctx, msg) => {
63
- const natsMsg = msg;
64
- const attrs = {};
65
- if (natsMsg.subject) attrs["nats.subject"] = natsMsg.subject;
66
- if (natsMsg.reply) attrs["nats.reply_to"] = natsMsg.reply;
67
- if (natsMsg.info?.stream) attrs["nats.stream"] = natsMsg.info.stream;
68
- if (natsMsg.info?.consumer)
69
- attrs["nats.consumer"] = natsMsg.info.consumer;
70
- if (natsMsg.info?.redeliveryCount !== void 0) {
71
- attrs["nats.delivered_count"] = natsMsg.info.redeliveryCount;
72
- }
73
- if (natsMsg.info?.pending !== void 0) {
74
- attrs["nats.pending"] = natsMsg.info.pending;
75
- }
76
- return attrs;
77
- }
78
- }
79
- };
80
- var temporalAdapter = {
81
- producer: {
82
- customAttributes: (_ctx, args) => {
83
- const info = args[0];
84
- const attrs = {};
85
- if (info?.workflowId) attrs["temporal.workflow_id"] = info.workflowId;
86
- if (info?.runId) attrs["temporal.run_id"] = info.runId;
87
- if (info?.taskQueue) attrs["temporal.task_queue"] = info.taskQueue;
88
- if (info?.workflowType)
89
- attrs["temporal.workflow_type"] = info.workflowType;
90
- return attrs;
91
- }
92
- },
93
- consumer: {
94
- customAttributes: (_ctx, msg) => {
95
- const info = msg;
96
- const attrs = {};
97
- if (info.workflowId) attrs["temporal.workflow_id"] = info.workflowId;
98
- if (info.runId) attrs["temporal.run_id"] = info.runId;
99
- if (info.activityId) attrs["temporal.activity_id"] = info.activityId;
100
- if (info.taskQueue) attrs["temporal.task_queue"] = info.taskQueue;
101
- if (info.attempt !== void 0) attrs["temporal.attempt"] = info.attempt;
102
- if (info.activityType)
103
- attrs["temporal.activity_type"] = info.activityType;
104
- return attrs;
105
- }
106
- }
4
+ //#region src/messaging-adapters.ts
5
+ /**
6
+ * NATS JetStream adapter
7
+ *
8
+ * Captures NATS-specific attributes following NATS observability conventions.
9
+ *
10
+ * @example Producer
11
+ * ```typescript
12
+ * const publishOrder = traceProducer({
13
+ * system: 'nats',
14
+ * destination: 'orders.created',
15
+ * ...natsAdapter.producer,
16
+ * })(ctx => async (subject, payload, opts) => {
17
+ * const headers = ctx.getTraceHeaders();
18
+ * await nc.publish(subject, payload, { headers });
19
+ * });
20
+ * ```
21
+ *
22
+ * @example Consumer
23
+ * ```typescript
24
+ * const processOrder = traceConsumer({
25
+ * system: 'nats',
26
+ * destination: 'orders.created',
27
+ * consumerGroup: 'order-processor',
28
+ * ...natsAdapter.consumer,
29
+ * })(ctx => async (msg: JsMsg) => {
30
+ * await handleOrder(msg.data);
31
+ * msg.ack();
32
+ * });
33
+ * ```
34
+ */
35
+ const natsAdapter = {
36
+ producer: { customAttributes: (_ctx, args) => {
37
+ const msg = args[0];
38
+ const attrs = {};
39
+ if (msg?.subject) attrs["nats.subject"] = msg.subject;
40
+ if (msg?.replyTo) attrs["nats.reply_to"] = msg.replyTo;
41
+ if (msg?.stream) attrs["nats.stream"] = msg.stream;
42
+ return attrs;
43
+ } },
44
+ consumer: {
45
+ headersFrom: (msg) => {
46
+ const headers = msg.headers;
47
+ if (!headers) return;
48
+ if (typeof headers.toJSON === "function") {
49
+ const json = headers.toJSON();
50
+ if (json && typeof json === "object") return json;
51
+ }
52
+ if (typeof headers.get === "function") {
53
+ const result = {};
54
+ for (const key of [
55
+ "traceparent",
56
+ "tracestate",
57
+ "baggage",
58
+ "x-b3-traceid",
59
+ "x-b3-spanid",
60
+ "x-b3-sampled",
61
+ "b3"
62
+ ]) {
63
+ const value = headers.get(key);
64
+ if (value) result[key] = value;
65
+ }
66
+ if (Object.keys(result).length > 0) return result;
67
+ }
68
+ if (typeof headers.entries === "function") {
69
+ const result = {};
70
+ for (const [key, value] of headers.entries()) if (typeof key === "string" && typeof value === "string") result[key] = value;
71
+ if (Object.keys(result).length > 0) return result;
72
+ }
73
+ },
74
+ customAttributes: (_ctx, msg) => {
75
+ const natsMsg = msg;
76
+ const attrs = {};
77
+ if (natsMsg.subject) attrs["nats.subject"] = natsMsg.subject;
78
+ if (natsMsg.reply) attrs["nats.reply_to"] = natsMsg.reply;
79
+ if (natsMsg.info?.stream) attrs["nats.stream"] = natsMsg.info.stream;
80
+ if (natsMsg.info?.consumer) attrs["nats.consumer"] = natsMsg.info.consumer;
81
+ if (natsMsg.info?.redeliveryCount !== void 0) attrs["nats.delivered_count"] = natsMsg.info.redeliveryCount;
82
+ if (natsMsg.info?.pending !== void 0) attrs["nats.pending"] = natsMsg.info.pending;
83
+ return attrs;
84
+ }
85
+ }
107
86
  };
108
- var cloudflareQueuesAdapter = {
109
- consumer: {
110
- customAttributes: (_ctx, msg) => {
111
- const cfMsg = msg;
112
- const attrs = {};
113
- if (cfMsg.id) attrs["cloudflare.queue.message_id"] = cfMsg.id;
114
- if (cfMsg.timestamp) {
115
- attrs["cloudflare.queue.timestamp_ms"] = cfMsg.timestamp.getTime();
116
- }
117
- if (cfMsg.attempts !== void 0) {
118
- attrs["cloudflare.queue.attempts"] = cfMsg.attempts;
119
- }
120
- return attrs;
121
- }
122
- }
87
+ /**
88
+ * Temporal adapter
89
+ *
90
+ * Captures Temporal-specific attributes for workflow activities.
91
+ * Use this when instrumenting Temporal activity handlers.
92
+ *
93
+ * @example Activity handler
94
+ * ```typescript
95
+ * const processOrder = traceConsumer({
96
+ * system: 'temporal',
97
+ * destination: 'order-activities',
98
+ * ...temporalAdapter.consumer,
99
+ * })(ctx => async (info: ActivityInfo, input: OrderInput) => {
100
+ * // Temporal attributes are captured automatically
101
+ * return processOrderLogic(input);
102
+ * });
103
+ * ```
104
+ *
105
+ * @example Workflow signal/query
106
+ * ```typescript
107
+ * const sendSignal = traceProducer({
108
+ * system: 'temporal',
109
+ * destination: 'order-signals',
110
+ * ...temporalAdapter.producer,
111
+ * })(ctx => async (workflowId, signalName, payload) => {
112
+ * await client.workflow.signal(workflowId, signalName, payload);
113
+ * });
114
+ * ```
115
+ */
116
+ const temporalAdapter = {
117
+ producer: { customAttributes: (_ctx, args) => {
118
+ const info = args[0];
119
+ const attrs = {};
120
+ if (info?.workflowId) attrs["temporal.workflow_id"] = info.workflowId;
121
+ if (info?.runId) attrs["temporal.run_id"] = info.runId;
122
+ if (info?.taskQueue) attrs["temporal.task_queue"] = info.taskQueue;
123
+ if (info?.workflowType) attrs["temporal.workflow_type"] = info.workflowType;
124
+ return attrs;
125
+ } },
126
+ consumer: { customAttributes: (_ctx, msg) => {
127
+ const info = msg;
128
+ const attrs = {};
129
+ if (info.workflowId) attrs["temporal.workflow_id"] = info.workflowId;
130
+ if (info.runId) attrs["temporal.run_id"] = info.runId;
131
+ if (info.activityId) attrs["temporal.activity_id"] = info.activityId;
132
+ if (info.taskQueue) attrs["temporal.task_queue"] = info.taskQueue;
133
+ if (info.attempt !== void 0) attrs["temporal.attempt"] = info.attempt;
134
+ if (info.activityType) attrs["temporal.activity_type"] = info.activityType;
135
+ return attrs;
136
+ } }
123
137
  };
138
+ /**
139
+ * Cloudflare Queues adapter
140
+ *
141
+ * Captures Cloudflare Queue-specific attributes.
142
+ *
143
+ * @example Queue consumer
144
+ * ```typescript
145
+ * export default {
146
+ * async queue(batch: MessageBatch, env: Env) {
147
+ * for (const msg of batch.messages) {
148
+ * await processMessage(msg);
149
+ * }
150
+ * },
151
+ * };
152
+ *
153
+ * const processMessage = traceConsumer({
154
+ * system: 'cloudflare_queues',
155
+ * destination: 'my-queue',
156
+ * ...cloudflareQueuesAdapter.consumer,
157
+ * })(ctx => async (msg: Message) => {
158
+ * await handleMessage(msg.body);
159
+ * msg.ack();
160
+ * });
161
+ * ```
162
+ */
163
+ const cloudflareQueuesAdapter = { consumer: { customAttributes: (_ctx, msg) => {
164
+ const cfMsg = msg;
165
+ const attrs = {};
166
+ if (cfMsg.id) attrs["cloudflare.queue.message_id"] = cfMsg.id;
167
+ if (cfMsg.timestamp) attrs["cloudflare.queue.timestamp_ms"] = cfMsg.timestamp.getTime();
168
+ if (cfMsg.attempts !== void 0) attrs["cloudflare.queue.attempts"] = cfMsg.attempts;
169
+ return attrs;
170
+ } } };
171
+ /**
172
+ * Datadog trace context extractor
173
+ *
174
+ * Extracts parent span context from Datadog-format trace headers.
175
+ * Converts Datadog's decimal IDs to OpenTelemetry's hex format.
176
+ *
177
+ * Note: Datadog sends trace/span IDs as decimal strings, not hex.
178
+ * This extractor converts decimal -> hex before formatting for OTel.
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const processMessage = traceConsumer({
183
+ * system: 'kafka',
184
+ * destination: 'events',
185
+ * customContextExtractor: datadogContextExtractor,
186
+ * })(ctx => async (msg) => {
187
+ * // Links to parent Datadog span automatically
188
+ * });
189
+ * ```
190
+ */
124
191
  function datadogContextExtractor(headers) {
125
- const traceIdDecimal = headers["x-datadog-trace-id"];
126
- const spanIdDecimal = headers["x-datadog-parent-id"];
127
- const samplingPriority = headers["x-datadog-sampling-priority"];
128
- if (!traceIdDecimal || !spanIdDecimal) return null;
129
- let otelTraceId;
130
- let otelSpanId;
131
- try {
132
- otelTraceId = BigInt(traceIdDecimal).toString(16).padStart(32, "0");
133
- otelSpanId = BigInt(spanIdDecimal).toString(16).padStart(16, "0");
134
- } catch {
135
- return null;
136
- }
137
- const sampled = samplingPriority ? Number.parseInt(samplingPriority, 10) > 0 : true;
138
- return {
139
- traceId: otelTraceId,
140
- spanId: otelSpanId,
141
- traceFlags: sampled ? api.TraceFlags.SAMPLED : api.TraceFlags.NONE,
142
- isRemote: true
143
- };
192
+ const traceIdDecimal = headers["x-datadog-trace-id"];
193
+ const spanIdDecimal = headers["x-datadog-parent-id"];
194
+ const samplingPriority = headers["x-datadog-sampling-priority"];
195
+ if (!traceIdDecimal || !spanIdDecimal) return null;
196
+ let otelTraceId;
197
+ let otelSpanId;
198
+ try {
199
+ otelTraceId = BigInt(traceIdDecimal).toString(16).padStart(32, "0");
200
+ otelSpanId = BigInt(spanIdDecimal).toString(16).padStart(16, "0");
201
+ } catch {
202
+ return null;
203
+ }
204
+ return {
205
+ traceId: otelTraceId,
206
+ spanId: otelSpanId,
207
+ traceFlags: (samplingPriority ? Number.parseInt(samplingPriority, 10) > 0 : true) ? _opentelemetry_api.TraceFlags.SAMPLED : _opentelemetry_api.TraceFlags.NONE,
208
+ isRemote: true
209
+ };
144
210
  }
211
+ /**
212
+ * B3 (Zipkin) trace context extractor
213
+ *
214
+ * Extracts parent span context from B3 format headers.
215
+ * Supports both single-header (b3) and multi-header formats.
216
+ *
217
+ * @see https://github.com/openzipkin/b3-propagation
218
+ *
219
+ * @example Single-header format
220
+ * ```typescript
221
+ * // Header: b3: 80f198ee56343ba864fe8b2a57d3eff7-e457b5a2e4d86bd1-1
222
+ * const processMessage = traceConsumer({
223
+ * system: 'rabbitmq',
224
+ * destination: 'events',
225
+ * customContextExtractor: b3ContextExtractor,
226
+ * })(ctx => async (msg) => {
227
+ * // Links to parent Zipkin span
228
+ * });
229
+ * ```
230
+ *
231
+ * @example Multi-header format
232
+ * ```typescript
233
+ * // Headers: X-B3-TraceId, X-B3-SpanId, X-B3-Sampled
234
+ * ```
235
+ */
145
236
  function b3ContextExtractor(headers) {
146
- const b3Single = headers["b3"] || headers["B3"];
147
- if (b3Single) {
148
- if (b3Single === "0") return null;
149
- const parts = b3Single.split("-");
150
- const traceId2 = parts[0];
151
- const spanId2 = parts[1];
152
- const sampledFlag = parts[2];
153
- if (traceId2 && spanId2) {
154
- const sampled2 = sampledFlag !== "0" && sampledFlag !== "d";
155
- return {
156
- traceId: traceId2.padStart(32, "0"),
157
- spanId: spanId2.padStart(16, "0"),
158
- traceFlags: sampled2 ? api.TraceFlags.SAMPLED : api.TraceFlags.NONE,
159
- isRemote: true
160
- };
161
- }
162
- }
163
- const traceId = headers["x-b3-traceid"] || headers["X-B3-TraceId"] || headers["X-B3-Traceid"];
164
- const spanId = headers["x-b3-spanid"] || headers["X-B3-SpanId"] || headers["X-B3-Spanid"];
165
- const sampledHeader = headers["x-b3-sampled"] || headers["X-B3-Sampled"] || headers["x-b3-flags"] || headers["X-B3-Flags"];
166
- if (!traceId || !spanId) return null;
167
- const sampled = sampledHeader === "1" || sampledHeader === "true" || sampledHeader === void 0;
168
- return {
169
- traceId: traceId.padStart(32, "0"),
170
- spanId: spanId.padStart(16, "0"),
171
- traceFlags: sampled ? api.TraceFlags.SAMPLED : api.TraceFlags.NONE,
172
- isRemote: true
173
- };
237
+ const b3Single = headers["b3"] || headers["B3"];
238
+ if (b3Single) {
239
+ if (b3Single === "0") return null;
240
+ const parts = b3Single.split("-");
241
+ const traceId = parts[0];
242
+ const spanId = parts[1];
243
+ const sampledFlag = parts[2];
244
+ if (traceId && spanId) {
245
+ const sampled = sampledFlag !== "0" && sampledFlag !== "d";
246
+ return {
247
+ traceId: traceId.padStart(32, "0"),
248
+ spanId: spanId.padStart(16, "0"),
249
+ traceFlags: sampled ? _opentelemetry_api.TraceFlags.SAMPLED : _opentelemetry_api.TraceFlags.NONE,
250
+ isRemote: true
251
+ };
252
+ }
253
+ }
254
+ const traceId = headers["x-b3-traceid"] || headers["X-B3-TraceId"] || headers["X-B3-Traceid"];
255
+ const spanId = headers["x-b3-spanid"] || headers["X-B3-SpanId"] || headers["X-B3-Spanid"];
256
+ const sampledHeader = headers["x-b3-sampled"] || headers["X-B3-Sampled"] || headers["x-b3-flags"] || headers["X-B3-Flags"];
257
+ if (!traceId || !spanId) return null;
258
+ const sampled = sampledHeader === "1" || sampledHeader === "true" || sampledHeader === void 0;
259
+ return {
260
+ traceId: traceId.padStart(32, "0"),
261
+ spanId: spanId.padStart(16, "0"),
262
+ traceFlags: sampled ? _opentelemetry_api.TraceFlags.SAMPLED : _opentelemetry_api.TraceFlags.NONE,
263
+ isRemote: true
264
+ };
174
265
  }
266
+ /**
267
+ * AWS X-Ray trace context extractor
268
+ *
269
+ * Extracts parent span context from AWS X-Ray trace header.
270
+ * Format: Root=1-{timestamp}-{random};Parent={parent-id};Sampled={0|1}
271
+ *
272
+ * @example
273
+ * ```typescript
274
+ * const processMessage = traceConsumer({
275
+ * system: 'sqs',
276
+ * destination: 'my-queue',
277
+ * customContextExtractor: xrayContextExtractor,
278
+ * })(ctx => async (msg) => {
279
+ * // Links to parent X-Ray trace
280
+ * });
281
+ * ```
282
+ */
175
283
  function xrayContextExtractor(headers) {
176
- const xrayHeader = headers["x-amzn-trace-id"] || headers["X-Amzn-Trace-Id"];
177
- if (!xrayHeader) return null;
178
- const rootMatch = xrayHeader.match(/Root=1-([a-f0-9]{8})-([a-f0-9]{24})/i);
179
- const parentMatch = xrayHeader.match(/Parent=([a-f0-9]{16})/i);
180
- const sampledMatch = xrayHeader.match(/Sampled=([01])/);
181
- if (!rootMatch || !parentMatch) return null;
182
- const timestamp = rootMatch[1];
183
- const random = rootMatch[2];
184
- const parentId = parentMatch[1];
185
- if (!timestamp || !random || !parentId) return null;
186
- const traceId = `${timestamp}${random}`;
187
- const spanId = parentId;
188
- const sampled = sampledMatch ? sampledMatch[1] === "1" : true;
189
- return {
190
- traceId,
191
- spanId,
192
- traceFlags: sampled ? api.TraceFlags.SAMPLED : api.TraceFlags.NONE,
193
- isRemote: true
194
- };
284
+ const xrayHeader = headers["x-amzn-trace-id"] || headers["X-Amzn-Trace-Id"];
285
+ if (!xrayHeader) return null;
286
+ const rootMatch = xrayHeader.match(/Root=1-([a-f0-9]{8})-([a-f0-9]{24})/i);
287
+ const parentMatch = xrayHeader.match(/Parent=([a-f0-9]{16})/i);
288
+ const sampledMatch = xrayHeader.match(/Sampled=([01])/);
289
+ if (!rootMatch || !parentMatch) return null;
290
+ const timestamp = rootMatch[1];
291
+ const random = rootMatch[2];
292
+ const parentId = parentMatch[1];
293
+ if (!timestamp || !random || !parentId) return null;
294
+ return {
295
+ traceId: `${timestamp}${random}`,
296
+ spanId: parentId,
297
+ traceFlags: (sampledMatch ? sampledMatch[1] === "1" : true) ? _opentelemetry_api.TraceFlags.SAMPLED : _opentelemetry_api.TraceFlags.NONE,
298
+ isRemote: true
299
+ };
195
300
  }
196
301
 
302
+ //#endregion
197
303
  exports.b3ContextExtractor = b3ContextExtractor;
198
304
  exports.cloudflareQueuesAdapter = cloudflareQueuesAdapter;
199
305
  exports.datadogContextExtractor = datadogContextExtractor;
200
306
  exports.natsAdapter = natsAdapter;
201
307
  exports.temporalAdapter = temporalAdapter;
202
308
  exports.xrayContextExtractor = xrayContextExtractor;
203
- //# sourceMappingURL=messaging-adapters.cjs.map
204
309
  //# sourceMappingURL=messaging-adapters.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/messaging-adapters.ts"],"names":["TraceFlags","traceId","spanId","sampled"],"mappings":"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","file":"messaging-adapters.cjs","sourcesContent":["/**\n * Pre-built adapter configurations for common messaging systems.\n *\n * These adapters provide ready-to-use hook configurations for systems\n * not explicitly supported by the core messaging module. Use them with\n * traceProducer/traceConsumer to get system-specific attributes.\n *\n * @example NATS consumer\n * ```typescript\n * import { traceConsumer } from 'autotel/messaging';\n * import { natsAdapter } from 'autotel/messaging/adapters';\n *\n * const processMessage = traceConsumer({\n * system: 'nats',\n * destination: 'orders',\n * ...natsAdapter.consumer,\n * })(ctx => async (msg) => {\n * // msg.subject, msg.info.stream are now captured as span attributes\n * await handleOrder(msg.data);\n * });\n * ```\n *\n * @example Datadog context propagation\n * ```typescript\n * import { traceConsumer } from 'autotel/messaging';\n * import { datadogContextExtractor } from 'autotel/messaging/adapters';\n *\n * const processMessage = traceConsumer({\n * system: 'kafka',\n * destination: 'events',\n * customContextExtractor: datadogContextExtractor,\n * })(ctx => async (msg) => {\n * // Parent span from Datadog trace headers is linked\n * });\n * ```\n *\n * @module\n */\n\nimport type { AttributeValue, SpanContext } from '@opentelemetry/api';\nimport { TraceFlags } from '@opentelemetry/api';\nimport type { ProducerContext, ConsumerContext } from './messaging';\n\n// ============================================================================\n// Adapter Types\n// ============================================================================\n\n/**\n * Producer adapter configuration\n */\nexport interface ProducerAdapter {\n /**\n * Hook to add system-specific attributes to producer spans\n */\n customAttributes?: (\n ctx: ProducerContext,\n args: unknown[],\n ) => Record<string, AttributeValue>;\n\n /**\n * Hook to inject custom headers beyond W3C traceparent\n */\n customHeaders?: (ctx: ProducerContext) => Record<string, string>;\n}\n\n/**\n * Consumer adapter configuration\n */\nexport interface ConsumerAdapter {\n /**\n * Extract headers from the message for trace context propagation\n */\n headersFrom?: (msg: unknown) => Record<string, string> | undefined;\n\n /**\n * Hook to add system-specific attributes to consumer spans\n */\n customAttributes?: (\n ctx: ConsumerContext,\n msg: unknown,\n ) => Record<string, AttributeValue>;\n\n /**\n * Hook to extract parent span context from non-W3C header formats\n */\n customContextExtractor?: (\n headers: Record<string, string>,\n ) => SpanContext | null;\n}\n\n/**\n * Combined producer and consumer adapter\n */\nexport interface MessagingAdapter {\n producer?: ProducerAdapter;\n consumer?: ConsumerAdapter;\n}\n\n// ============================================================================\n// NATS JetStream Adapter\n// ============================================================================\n\n/**\n * NATS JetStream message type (for reference)\n *\n * @internal Not exported - users bring their own NATS types\n */\ninterface NatsJetStreamMsg {\n subject: string;\n reply?: string;\n data: Uint8Array;\n headers?: {\n /** Convert headers to plain object (some NATS implementations) */\n toJSON?: () => Record<string, string> | unknown;\n /** Get a header value by key (Headers-like interface) */\n get?: (key: string) => string | undefined;\n /** Iterate over header entries */\n entries?: () => Iterable<[string, string]>;\n };\n info?: {\n stream: string;\n consumer: string;\n redeliveryCount?: number;\n pending?: number;\n timestampNanos?: bigint;\n };\n}\n\n/**\n * NATS JetStream adapter\n *\n * Captures NATS-specific attributes following NATS observability conventions.\n *\n * @example Producer\n * ```typescript\n * const publishOrder = traceProducer({\n * system: 'nats',\n * destination: 'orders.created',\n * ...natsAdapter.producer,\n * })(ctx => async (subject, payload, opts) => {\n * const headers = ctx.getTraceHeaders();\n * await nc.publish(subject, payload, { headers });\n * });\n * ```\n *\n * @example Consumer\n * ```typescript\n * const processOrder = traceConsumer({\n * system: 'nats',\n * destination: 'orders.created',\n * consumerGroup: 'order-processor',\n * ...natsAdapter.consumer,\n * })(ctx => async (msg: JsMsg) => {\n * await handleOrder(msg.data);\n * msg.ack();\n * });\n * ```\n */\nexport const natsAdapter: MessagingAdapter = {\n producer: {\n customAttributes: (_ctx, args) => {\n const msg = args[0] as\n | { subject?: string; replyTo?: string; stream?: string }\n | undefined;\n const attrs: Record<string, AttributeValue> = {};\n\n if (msg?.subject) attrs['nats.subject'] = msg.subject;\n if (msg?.replyTo) attrs['nats.reply_to'] = msg.replyTo;\n if (msg?.stream) attrs['nats.stream'] = msg.stream;\n\n return attrs;\n },\n },\n consumer: {\n headersFrom: (msg) => {\n const natsMsg = msg as NatsJetStreamMsg;\n const headers = natsMsg.headers;\n\n if (!headers) return;\n\n // Try toJSON() first (some NATS implementations)\n if (typeof headers.toJSON === 'function') {\n const json = headers.toJSON();\n if (json && typeof json === 'object') {\n return json as Record<string, string>;\n }\n }\n\n // Fallback: use .get() for common trace headers\n // This handles Headers-like objects that only expose .get()\n if (typeof headers.get === 'function') {\n const result: Record<string, string> = {};\n const traceHeaders = [\n 'traceparent',\n 'tracestate',\n 'baggage',\n 'x-b3-traceid',\n 'x-b3-spanid',\n 'x-b3-sampled',\n 'b3',\n ];\n for (const key of traceHeaders) {\n const value = headers.get(key);\n if (value) {\n result[key] = value;\n }\n }\n if (Object.keys(result).length > 0) {\n return result;\n }\n }\n\n // Fallback: try to iterate if it's iterable (e.g., entries())\n if (typeof headers.entries === 'function') {\n const result: Record<string, string> = {};\n for (const [key, value] of headers.entries()) {\n if (typeof key === 'string' && typeof value === 'string') {\n result[key] = value;\n }\n }\n if (Object.keys(result).length > 0) {\n return result;\n }\n }\n\n return;\n },\n customAttributes: (_ctx, msg) => {\n const natsMsg = msg as NatsJetStreamMsg;\n const attrs: Record<string, AttributeValue> = {};\n\n if (natsMsg.subject) attrs['nats.subject'] = natsMsg.subject;\n if (natsMsg.reply) attrs['nats.reply_to'] = natsMsg.reply;\n if (natsMsg.info?.stream) attrs['nats.stream'] = natsMsg.info.stream;\n if (natsMsg.info?.consumer)\n attrs['nats.consumer'] = natsMsg.info.consumer;\n if (natsMsg.info?.redeliveryCount !== undefined) {\n attrs['nats.delivered_count'] = natsMsg.info.redeliveryCount;\n }\n if (natsMsg.info?.pending !== undefined) {\n attrs['nats.pending'] = natsMsg.info.pending;\n }\n\n return attrs;\n },\n },\n};\n\n// ============================================================================\n// Temporal Adapter\n// ============================================================================\n\n/**\n * Temporal activity/workflow info type (for reference)\n *\n * @internal Not exported - users bring their own Temporal types\n */\ninterface TemporalActivityInfo {\n workflowId?: string;\n runId?: string;\n activityId?: string;\n taskQueue?: string;\n attempt?: number;\n workflowType?: string;\n activityType?: string;\n startToCloseTimeout?: string;\n scheduleToCloseTimeout?: string;\n}\n\n/**\n * Temporal adapter\n *\n * Captures Temporal-specific attributes for workflow activities.\n * Use this when instrumenting Temporal activity handlers.\n *\n * @example Activity handler\n * ```typescript\n * const processOrder = traceConsumer({\n * system: 'temporal',\n * destination: 'order-activities',\n * ...temporalAdapter.consumer,\n * })(ctx => async (info: ActivityInfo, input: OrderInput) => {\n * // Temporal attributes are captured automatically\n * return processOrderLogic(input);\n * });\n * ```\n *\n * @example Workflow signal/query\n * ```typescript\n * const sendSignal = traceProducer({\n * system: 'temporal',\n * destination: 'order-signals',\n * ...temporalAdapter.producer,\n * })(ctx => async (workflowId, signalName, payload) => {\n * await client.workflow.signal(workflowId, signalName, payload);\n * });\n * ```\n */\nexport const temporalAdapter: MessagingAdapter = {\n producer: {\n customAttributes: (_ctx, args) => {\n const info = args[0] as TemporalActivityInfo | undefined;\n const attrs: Record<string, AttributeValue> = {};\n\n if (info?.workflowId) attrs['temporal.workflow_id'] = info.workflowId;\n if (info?.runId) attrs['temporal.run_id'] = info.runId;\n if (info?.taskQueue) attrs['temporal.task_queue'] = info.taskQueue;\n if (info?.workflowType)\n attrs['temporal.workflow_type'] = info.workflowType;\n\n return attrs;\n },\n },\n consumer: {\n customAttributes: (_ctx, msg) => {\n const info = msg as TemporalActivityInfo;\n const attrs: Record<string, AttributeValue> = {};\n\n if (info.workflowId) attrs['temporal.workflow_id'] = info.workflowId;\n if (info.runId) attrs['temporal.run_id'] = info.runId;\n if (info.activityId) attrs['temporal.activity_id'] = info.activityId;\n if (info.taskQueue) attrs['temporal.task_queue'] = info.taskQueue;\n if (info.attempt !== undefined) attrs['temporal.attempt'] = info.attempt;\n if (info.activityType)\n attrs['temporal.activity_type'] = info.activityType;\n\n return attrs;\n },\n },\n};\n\n// ============================================================================\n// Cloudflare Queues Adapter\n// ============================================================================\n\n/**\n * Cloudflare Queue message type (for reference)\n *\n * @internal Not exported - users bring their own Cloudflare types\n */\ninterface CloudflareQueueMessage {\n id: string;\n timestamp: Date;\n body: unknown;\n attempts: number;\n}\n\n/**\n * Cloudflare Queues adapter\n *\n * Captures Cloudflare Queue-specific attributes.\n *\n * @example Queue consumer\n * ```typescript\n * export default {\n * async queue(batch: MessageBatch, env: Env) {\n * for (const msg of batch.messages) {\n * await processMessage(msg);\n * }\n * },\n * };\n *\n * const processMessage = traceConsumer({\n * system: 'cloudflare_queues',\n * destination: 'my-queue',\n * ...cloudflareQueuesAdapter.consumer,\n * })(ctx => async (msg: Message) => {\n * await handleMessage(msg.body);\n * msg.ack();\n * });\n * ```\n */\nexport const cloudflareQueuesAdapter: MessagingAdapter = {\n consumer: {\n customAttributes: (_ctx, msg) => {\n const cfMsg = msg as CloudflareQueueMessage;\n const attrs: Record<string, AttributeValue> = {};\n\n if (cfMsg.id) attrs['cloudflare.queue.message_id'] = cfMsg.id;\n if (cfMsg.timestamp) {\n attrs['cloudflare.queue.timestamp_ms'] = cfMsg.timestamp.getTime();\n }\n if (cfMsg.attempts !== undefined) {\n attrs['cloudflare.queue.attempts'] = cfMsg.attempts;\n }\n\n return attrs;\n },\n },\n};\n\n// ============================================================================\n// Context Extractors for Non-W3C Formats\n// ============================================================================\n\n/**\n * Datadog trace context extractor\n *\n * Extracts parent span context from Datadog-format trace headers.\n * Converts Datadog's decimal IDs to OpenTelemetry's hex format.\n *\n * Note: Datadog sends trace/span IDs as decimal strings, not hex.\n * This extractor converts decimal -> hex before formatting for OTel.\n *\n * @example\n * ```typescript\n * const processMessage = traceConsumer({\n * system: 'kafka',\n * destination: 'events',\n * customContextExtractor: datadogContextExtractor,\n * })(ctx => async (msg) => {\n * // Links to parent Datadog span automatically\n * });\n * ```\n */\nexport function datadogContextExtractor(\n headers: Record<string, string>,\n): SpanContext | null {\n const traceIdDecimal = headers['x-datadog-trace-id'];\n const spanIdDecimal = headers['x-datadog-parent-id'];\n const samplingPriority = headers['x-datadog-sampling-priority'];\n\n if (!traceIdDecimal || !spanIdDecimal) return null;\n\n // Datadog sends IDs as decimal strings - convert to hex\n // Use BigInt for 64-bit values that exceed Number.MAX_SAFE_INTEGER\n let otelTraceId: string;\n let otelSpanId: string;\n\n try {\n // Convert decimal to hex and pad to OTel format\n // OTel trace IDs are 32 hex chars (128-bit), Datadog uses 64-bit\n otelTraceId = BigInt(traceIdDecimal).toString(16).padStart(32, '0');\n // OTel span IDs are 16 hex chars (64-bit)\n otelSpanId = BigInt(spanIdDecimal).toString(16).padStart(16, '0');\n } catch {\n // Invalid decimal string\n return null;\n }\n\n // Sampling priority > 0 means sampled\n const sampled = samplingPriority\n ? Number.parseInt(samplingPriority, 10) > 0\n : true;\n\n return {\n traceId: otelTraceId,\n spanId: otelSpanId,\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n}\n\n/**\n * B3 (Zipkin) trace context extractor\n *\n * Extracts parent span context from B3 format headers.\n * Supports both single-header (b3) and multi-header formats.\n *\n * @see https://github.com/openzipkin/b3-propagation\n *\n * @example Single-header format\n * ```typescript\n * // Header: b3: 80f198ee56343ba864fe8b2a57d3eff7-e457b5a2e4d86bd1-1\n * const processMessage = traceConsumer({\n * system: 'rabbitmq',\n * destination: 'events',\n * customContextExtractor: b3ContextExtractor,\n * })(ctx => async (msg) => {\n * // Links to parent Zipkin span\n * });\n * ```\n *\n * @example Multi-header format\n * ```typescript\n * // Headers: X-B3-TraceId, X-B3-SpanId, X-B3-Sampled\n * ```\n */\nexport function b3ContextExtractor(\n headers: Record<string, string>,\n): SpanContext | null {\n // Try single-header format first: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}\n const b3Single = headers['b3'] || headers['B3'];\n if (b3Single) {\n // Handle \"0\" (not sampled, no trace) case\n if (b3Single === '0') return null;\n\n const parts = b3Single.split('-');\n const traceId = parts[0];\n const spanId = parts[1];\n const sampledFlag = parts[2];\n\n if (traceId && spanId) {\n const sampled = sampledFlag !== '0' && sampledFlag !== 'd';\n\n return {\n traceId: traceId.padStart(32, '0'),\n spanId: spanId.padStart(16, '0'),\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n }\n }\n\n // Fall back to multi-header format\n const traceId =\n headers['x-b3-traceid'] ||\n headers['X-B3-TraceId'] ||\n headers['X-B3-Traceid'];\n const spanId =\n headers['x-b3-spanid'] || headers['X-B3-SpanId'] || headers['X-B3-Spanid'];\n const sampledHeader =\n headers['x-b3-sampled'] ||\n headers['X-B3-Sampled'] ||\n headers['x-b3-flags'] ||\n headers['X-B3-Flags'];\n\n if (!traceId || !spanId) return null;\n\n // x-b3-sampled: \"1\" or \"true\" = sampled, \"0\" or \"false\" = not sampled\n // x-b3-flags: \"1\" = debug (implies sampled)\n const sampled =\n sampledHeader === '1' ||\n sampledHeader === 'true' ||\n sampledHeader === undefined; // Default to sampled if not specified\n\n return {\n traceId: traceId.padStart(32, '0'),\n spanId: spanId.padStart(16, '0'),\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n}\n\n/**\n * AWS X-Ray trace context extractor\n *\n * Extracts parent span context from AWS X-Ray trace header.\n * Format: Root=1-{timestamp}-{random};Parent={parent-id};Sampled={0|1}\n *\n * @example\n * ```typescript\n * const processMessage = traceConsumer({\n * system: 'sqs',\n * destination: 'my-queue',\n * customContextExtractor: xrayContextExtractor,\n * })(ctx => async (msg) => {\n * // Links to parent X-Ray trace\n * });\n * ```\n */\nexport function xrayContextExtractor(\n headers: Record<string, string>,\n): SpanContext | null {\n const xrayHeader = headers['x-amzn-trace-id'] || headers['X-Amzn-Trace-Id'];\n\n if (!xrayHeader) return null;\n\n // Parse: Root=1-{8-char-timestamp}-{24-char-random};Parent={16-char-parent};Sampled=1\n const rootMatch = xrayHeader.match(/Root=1-([a-f0-9]{8})-([a-f0-9]{24})/i);\n const parentMatch = xrayHeader.match(/Parent=([a-f0-9]{16})/i);\n const sampledMatch = xrayHeader.match(/Sampled=([01])/);\n\n if (!rootMatch || !parentMatch) return null;\n\n // X-Ray trace ID format: 1-{timestamp}-{random} -> OTel: {timestamp}{random}\n const timestamp = rootMatch[1];\n const random = rootMatch[2];\n const parentId = parentMatch[1];\n\n if (!timestamp || !random || !parentId) return null;\n\n const traceId = `${timestamp}${random}`;\n const spanId = parentId;\n const sampled = sampledMatch ? sampledMatch[1] === '1' : true;\n\n return {\n traceId,\n spanId,\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n}\n"]}
1
+ {"version":3,"file":"messaging-adapters.cjs","names":["natsMsg","TraceFlags"],"sources":["../src/messaging-adapters.ts"],"sourcesContent":["/**\n * Pre-built adapter configurations for common messaging systems.\n *\n * These adapters provide ready-to-use hook configurations for systems\n * not explicitly supported by the core messaging module. Use them with\n * traceProducer/traceConsumer to get system-specific attributes.\n *\n * @example NATS consumer\n * ```typescript\n * import { traceConsumer } from 'autotel/messaging';\n * import { natsAdapter } from 'autotel/messaging/adapters';\n *\n * const processMessage = traceConsumer({\n * system: 'nats',\n * destination: 'orders',\n * ...natsAdapter.consumer,\n * })(ctx => async (msg) => {\n * // msg.subject, msg.info.stream are now captured as span attributes\n * await handleOrder(msg.data);\n * });\n * ```\n *\n * @example Datadog context propagation\n * ```typescript\n * import { traceConsumer } from 'autotel/messaging';\n * import { datadogContextExtractor } from 'autotel/messaging/adapters';\n *\n * const processMessage = traceConsumer({\n * system: 'kafka',\n * destination: 'events',\n * customContextExtractor: datadogContextExtractor,\n * })(ctx => async (msg) => {\n * // Parent span from Datadog trace headers is linked\n * });\n * ```\n *\n * @module\n */\n\nimport type { AttributeValue, SpanContext } from '@opentelemetry/api';\nimport { TraceFlags } from '@opentelemetry/api';\nimport type { ProducerContext, ConsumerContext } from './messaging';\n\n// ============================================================================\n// Adapter Types\n// ============================================================================\n\n/**\n * Producer adapter configuration\n */\nexport interface ProducerAdapter {\n /**\n * Hook to add system-specific attributes to producer spans\n */\n customAttributes?: (\n ctx: ProducerContext,\n args: unknown[],\n ) => Record<string, AttributeValue>;\n\n /**\n * Hook to inject custom headers beyond W3C traceparent\n */\n customHeaders?: (ctx: ProducerContext) => Record<string, string>;\n}\n\n/**\n * Consumer adapter configuration\n */\nexport interface ConsumerAdapter {\n /**\n * Extract headers from the message for trace context propagation\n */\n headersFrom?: (msg: unknown) => Record<string, string> | undefined;\n\n /**\n * Hook to add system-specific attributes to consumer spans\n */\n customAttributes?: (\n ctx: ConsumerContext,\n msg: unknown,\n ) => Record<string, AttributeValue>;\n\n /**\n * Hook to extract parent span context from non-W3C header formats\n */\n customContextExtractor?: (\n headers: Record<string, string>,\n ) => SpanContext | null;\n}\n\n/**\n * Combined producer and consumer adapter\n */\nexport interface MessagingAdapter {\n producer?: ProducerAdapter;\n consumer?: ConsumerAdapter;\n}\n\n// ============================================================================\n// NATS JetStream Adapter\n// ============================================================================\n\n/**\n * NATS JetStream message type (for reference)\n *\n * @internal Not exported - users bring their own NATS types\n */\ninterface NatsJetStreamMsg {\n subject: string;\n reply?: string;\n data: Uint8Array;\n headers?: {\n /** Convert headers to plain object (some NATS implementations) */\n toJSON?: () => Record<string, string> | unknown;\n /** Get a header value by key (Headers-like interface) */\n get?: (key: string) => string | undefined;\n /** Iterate over header entries */\n entries?: () => Iterable<[string, string]>;\n };\n info?: {\n stream: string;\n consumer: string;\n redeliveryCount?: number;\n pending?: number;\n timestampNanos?: bigint;\n };\n}\n\n/**\n * NATS JetStream adapter\n *\n * Captures NATS-specific attributes following NATS observability conventions.\n *\n * @example Producer\n * ```typescript\n * const publishOrder = traceProducer({\n * system: 'nats',\n * destination: 'orders.created',\n * ...natsAdapter.producer,\n * })(ctx => async (subject, payload, opts) => {\n * const headers = ctx.getTraceHeaders();\n * await nc.publish(subject, payload, { headers });\n * });\n * ```\n *\n * @example Consumer\n * ```typescript\n * const processOrder = traceConsumer({\n * system: 'nats',\n * destination: 'orders.created',\n * consumerGroup: 'order-processor',\n * ...natsAdapter.consumer,\n * })(ctx => async (msg: JsMsg) => {\n * await handleOrder(msg.data);\n * msg.ack();\n * });\n * ```\n */\nexport const natsAdapter: MessagingAdapter = {\n producer: {\n customAttributes: (_ctx, args) => {\n const msg = args[0] as\n | { subject?: string; replyTo?: string; stream?: string }\n | undefined;\n const attrs: Record<string, AttributeValue> = {};\n\n if (msg?.subject) attrs['nats.subject'] = msg.subject;\n if (msg?.replyTo) attrs['nats.reply_to'] = msg.replyTo;\n if (msg?.stream) attrs['nats.stream'] = msg.stream;\n\n return attrs;\n },\n },\n consumer: {\n headersFrom: (msg) => {\n const natsMsg = msg as NatsJetStreamMsg;\n const headers = natsMsg.headers;\n\n if (!headers) return;\n\n // Try toJSON() first (some NATS implementations)\n if (typeof headers.toJSON === 'function') {\n const json = headers.toJSON();\n if (json && typeof json === 'object') {\n return json as Record<string, string>;\n }\n }\n\n // Fallback: use .get() for common trace headers\n // This handles Headers-like objects that only expose .get()\n if (typeof headers.get === 'function') {\n const result: Record<string, string> = {};\n const traceHeaders = [\n 'traceparent',\n 'tracestate',\n 'baggage',\n 'x-b3-traceid',\n 'x-b3-spanid',\n 'x-b3-sampled',\n 'b3',\n ];\n for (const key of traceHeaders) {\n const value = headers.get(key);\n if (value) {\n result[key] = value;\n }\n }\n if (Object.keys(result).length > 0) {\n return result;\n }\n }\n\n // Fallback: try to iterate if it's iterable (e.g., entries())\n if (typeof headers.entries === 'function') {\n const result: Record<string, string> = {};\n for (const [key, value] of headers.entries()) {\n if (typeof key === 'string' && typeof value === 'string') {\n result[key] = value;\n }\n }\n if (Object.keys(result).length > 0) {\n return result;\n }\n }\n\n return;\n },\n customAttributes: (_ctx, msg) => {\n const natsMsg = msg as NatsJetStreamMsg;\n const attrs: Record<string, AttributeValue> = {};\n\n if (natsMsg.subject) attrs['nats.subject'] = natsMsg.subject;\n if (natsMsg.reply) attrs['nats.reply_to'] = natsMsg.reply;\n if (natsMsg.info?.stream) attrs['nats.stream'] = natsMsg.info.stream;\n if (natsMsg.info?.consumer)\n attrs['nats.consumer'] = natsMsg.info.consumer;\n if (natsMsg.info?.redeliveryCount !== undefined) {\n attrs['nats.delivered_count'] = natsMsg.info.redeliveryCount;\n }\n if (natsMsg.info?.pending !== undefined) {\n attrs['nats.pending'] = natsMsg.info.pending;\n }\n\n return attrs;\n },\n },\n};\n\n// ============================================================================\n// Temporal Adapter\n// ============================================================================\n\n/**\n * Temporal activity/workflow info type (for reference)\n *\n * @internal Not exported - users bring their own Temporal types\n */\ninterface TemporalActivityInfo {\n workflowId?: string;\n runId?: string;\n activityId?: string;\n taskQueue?: string;\n attempt?: number;\n workflowType?: string;\n activityType?: string;\n startToCloseTimeout?: string;\n scheduleToCloseTimeout?: string;\n}\n\n/**\n * Temporal adapter\n *\n * Captures Temporal-specific attributes for workflow activities.\n * Use this when instrumenting Temporal activity handlers.\n *\n * @example Activity handler\n * ```typescript\n * const processOrder = traceConsumer({\n * system: 'temporal',\n * destination: 'order-activities',\n * ...temporalAdapter.consumer,\n * })(ctx => async (info: ActivityInfo, input: OrderInput) => {\n * // Temporal attributes are captured automatically\n * return processOrderLogic(input);\n * });\n * ```\n *\n * @example Workflow signal/query\n * ```typescript\n * const sendSignal = traceProducer({\n * system: 'temporal',\n * destination: 'order-signals',\n * ...temporalAdapter.producer,\n * })(ctx => async (workflowId, signalName, payload) => {\n * await client.workflow.signal(workflowId, signalName, payload);\n * });\n * ```\n */\nexport const temporalAdapter: MessagingAdapter = {\n producer: {\n customAttributes: (_ctx, args) => {\n const info = args[0] as TemporalActivityInfo | undefined;\n const attrs: Record<string, AttributeValue> = {};\n\n if (info?.workflowId) attrs['temporal.workflow_id'] = info.workflowId;\n if (info?.runId) attrs['temporal.run_id'] = info.runId;\n if (info?.taskQueue) attrs['temporal.task_queue'] = info.taskQueue;\n if (info?.workflowType)\n attrs['temporal.workflow_type'] = info.workflowType;\n\n return attrs;\n },\n },\n consumer: {\n customAttributes: (_ctx, msg) => {\n const info = msg as TemporalActivityInfo;\n const attrs: Record<string, AttributeValue> = {};\n\n if (info.workflowId) attrs['temporal.workflow_id'] = info.workflowId;\n if (info.runId) attrs['temporal.run_id'] = info.runId;\n if (info.activityId) attrs['temporal.activity_id'] = info.activityId;\n if (info.taskQueue) attrs['temporal.task_queue'] = info.taskQueue;\n if (info.attempt !== undefined) attrs['temporal.attempt'] = info.attempt;\n if (info.activityType)\n attrs['temporal.activity_type'] = info.activityType;\n\n return attrs;\n },\n },\n};\n\n// ============================================================================\n// Cloudflare Queues Adapter\n// ============================================================================\n\n/**\n * Cloudflare Queue message type (for reference)\n *\n * @internal Not exported - users bring their own Cloudflare types\n */\ninterface CloudflareQueueMessage {\n id: string;\n timestamp: Date;\n body: unknown;\n attempts: number;\n}\n\n/**\n * Cloudflare Queues adapter\n *\n * Captures Cloudflare Queue-specific attributes.\n *\n * @example Queue consumer\n * ```typescript\n * export default {\n * async queue(batch: MessageBatch, env: Env) {\n * for (const msg of batch.messages) {\n * await processMessage(msg);\n * }\n * },\n * };\n *\n * const processMessage = traceConsumer({\n * system: 'cloudflare_queues',\n * destination: 'my-queue',\n * ...cloudflareQueuesAdapter.consumer,\n * })(ctx => async (msg: Message) => {\n * await handleMessage(msg.body);\n * msg.ack();\n * });\n * ```\n */\nexport const cloudflareQueuesAdapter: MessagingAdapter = {\n consumer: {\n customAttributes: (_ctx, msg) => {\n const cfMsg = msg as CloudflareQueueMessage;\n const attrs: Record<string, AttributeValue> = {};\n\n if (cfMsg.id) attrs['cloudflare.queue.message_id'] = cfMsg.id;\n if (cfMsg.timestamp) {\n attrs['cloudflare.queue.timestamp_ms'] = cfMsg.timestamp.getTime();\n }\n if (cfMsg.attempts !== undefined) {\n attrs['cloudflare.queue.attempts'] = cfMsg.attempts;\n }\n\n return attrs;\n },\n },\n};\n\n// ============================================================================\n// Context Extractors for Non-W3C Formats\n// ============================================================================\n\n/**\n * Datadog trace context extractor\n *\n * Extracts parent span context from Datadog-format trace headers.\n * Converts Datadog's decimal IDs to OpenTelemetry's hex format.\n *\n * Note: Datadog sends trace/span IDs as decimal strings, not hex.\n * This extractor converts decimal -> hex before formatting for OTel.\n *\n * @example\n * ```typescript\n * const processMessage = traceConsumer({\n * system: 'kafka',\n * destination: 'events',\n * customContextExtractor: datadogContextExtractor,\n * })(ctx => async (msg) => {\n * // Links to parent Datadog span automatically\n * });\n * ```\n */\nexport function datadogContextExtractor(\n headers: Record<string, string>,\n): SpanContext | null {\n const traceIdDecimal = headers['x-datadog-trace-id'];\n const spanIdDecimal = headers['x-datadog-parent-id'];\n const samplingPriority = headers['x-datadog-sampling-priority'];\n\n if (!traceIdDecimal || !spanIdDecimal) return null;\n\n // Datadog sends IDs as decimal strings - convert to hex\n // Use BigInt for 64-bit values that exceed Number.MAX_SAFE_INTEGER\n let otelTraceId: string;\n let otelSpanId: string;\n\n try {\n // Convert decimal to hex and pad to OTel format\n // OTel trace IDs are 32 hex chars (128-bit), Datadog uses 64-bit\n otelTraceId = BigInt(traceIdDecimal).toString(16).padStart(32, '0');\n // OTel span IDs are 16 hex chars (64-bit)\n otelSpanId = BigInt(spanIdDecimal).toString(16).padStart(16, '0');\n } catch {\n // Invalid decimal string\n return null;\n }\n\n // Sampling priority > 0 means sampled\n const sampled = samplingPriority\n ? Number.parseInt(samplingPriority, 10) > 0\n : true;\n\n return {\n traceId: otelTraceId,\n spanId: otelSpanId,\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n}\n\n/**\n * B3 (Zipkin) trace context extractor\n *\n * Extracts parent span context from B3 format headers.\n * Supports both single-header (b3) and multi-header formats.\n *\n * @see https://github.com/openzipkin/b3-propagation\n *\n * @example Single-header format\n * ```typescript\n * // Header: b3: 80f198ee56343ba864fe8b2a57d3eff7-e457b5a2e4d86bd1-1\n * const processMessage = traceConsumer({\n * system: 'rabbitmq',\n * destination: 'events',\n * customContextExtractor: b3ContextExtractor,\n * })(ctx => async (msg) => {\n * // Links to parent Zipkin span\n * });\n * ```\n *\n * @example Multi-header format\n * ```typescript\n * // Headers: X-B3-TraceId, X-B3-SpanId, X-B3-Sampled\n * ```\n */\nexport function b3ContextExtractor(\n headers: Record<string, string>,\n): SpanContext | null {\n // Try single-header format first: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}\n const b3Single = headers['b3'] || headers['B3'];\n if (b3Single) {\n // Handle \"0\" (not sampled, no trace) case\n if (b3Single === '0') return null;\n\n const parts = b3Single.split('-');\n const traceId = parts[0];\n const spanId = parts[1];\n const sampledFlag = parts[2];\n\n if (traceId && spanId) {\n const sampled = sampledFlag !== '0' && sampledFlag !== 'd';\n\n return {\n traceId: traceId.padStart(32, '0'),\n spanId: spanId.padStart(16, '0'),\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n }\n }\n\n // Fall back to multi-header format\n const traceId =\n headers['x-b3-traceid'] ||\n headers['X-B3-TraceId'] ||\n headers['X-B3-Traceid'];\n const spanId =\n headers['x-b3-spanid'] || headers['X-B3-SpanId'] || headers['X-B3-Spanid'];\n const sampledHeader =\n headers['x-b3-sampled'] ||\n headers['X-B3-Sampled'] ||\n headers['x-b3-flags'] ||\n headers['X-B3-Flags'];\n\n if (!traceId || !spanId) return null;\n\n // x-b3-sampled: \"1\" or \"true\" = sampled, \"0\" or \"false\" = not sampled\n // x-b3-flags: \"1\" = debug (implies sampled)\n const sampled =\n sampledHeader === '1' ||\n sampledHeader === 'true' ||\n sampledHeader === undefined; // Default to sampled if not specified\n\n return {\n traceId: traceId.padStart(32, '0'),\n spanId: spanId.padStart(16, '0'),\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n}\n\n/**\n * AWS X-Ray trace context extractor\n *\n * Extracts parent span context from AWS X-Ray trace header.\n * Format: Root=1-{timestamp}-{random};Parent={parent-id};Sampled={0|1}\n *\n * @example\n * ```typescript\n * const processMessage = traceConsumer({\n * system: 'sqs',\n * destination: 'my-queue',\n * customContextExtractor: xrayContextExtractor,\n * })(ctx => async (msg) => {\n * // Links to parent X-Ray trace\n * });\n * ```\n */\nexport function xrayContextExtractor(\n headers: Record<string, string>,\n): SpanContext | null {\n const xrayHeader = headers['x-amzn-trace-id'] || headers['X-Amzn-Trace-Id'];\n\n if (!xrayHeader) return null;\n\n // Parse: Root=1-{8-char-timestamp}-{24-char-random};Parent={16-char-parent};Sampled=1\n const rootMatch = xrayHeader.match(/Root=1-([a-f0-9]{8})-([a-f0-9]{24})/i);\n const parentMatch = xrayHeader.match(/Parent=([a-f0-9]{16})/i);\n const sampledMatch = xrayHeader.match(/Sampled=([01])/);\n\n if (!rootMatch || !parentMatch) return null;\n\n // X-Ray trace ID format: 1-{timestamp}-{random} -> OTel: {timestamp}{random}\n const timestamp = rootMatch[1];\n const random = rootMatch[2];\n const parentId = parentMatch[1];\n\n if (!timestamp || !random || !parentId) return null;\n\n const traceId = `${timestamp}${random}`;\n const spanId = parentId;\n const sampled = sampledMatch ? sampledMatch[1] === '1' : true;\n\n return {\n traceId,\n spanId,\n traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n isRemote: true,\n };\n}\n"],"mappings":"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"}