autotel 3.6.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 (602) 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 -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-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 +1049 -1172
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +401 -551
  164. package/dist/index.d.cts.map +1 -0
  165. package/dist/index.d.ts +401 -551
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +912 -714
  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-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 -39
  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 -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/src/index.ts +3 -0
  432. package/src/request-logger.test.ts +53 -1
  433. package/src/request-logger.ts +58 -0
  434. package/src/validate.test.ts +3 -1
  435. package/src/validate.ts +9 -3
  436. package/dist/attributes.cjs.map +0 -1
  437. package/dist/attributes.js.map +0 -1
  438. package/dist/chunk-2ZKEORFN.cjs +0 -14
  439. package/dist/chunk-2ZKEORFN.cjs.map +0 -1
  440. package/dist/chunk-3QXBFGKP.js +0 -344
  441. package/dist/chunk-3QXBFGKP.js.map +0 -1
  442. package/dist/chunk-454CH4OV.js +0 -744
  443. package/dist/chunk-454CH4OV.js.map +0 -1
  444. package/dist/chunk-4A53YIAX.js +0 -180
  445. package/dist/chunk-4A53YIAX.js.map +0 -1
  446. package/dist/chunk-4IFSYQVX.js +0 -337
  447. package/dist/chunk-4IFSYQVX.js.map +0 -1
  448. package/dist/chunk-4P6ZOARG.cjs +0 -33
  449. package/dist/chunk-4P6ZOARG.cjs.map +0 -1
  450. package/dist/chunk-55ER2KD5.js +0 -228
  451. package/dist/chunk-55ER2KD5.js.map +0 -1
  452. package/dist/chunk-5ZN622AO.js +0 -73
  453. package/dist/chunk-5ZN622AO.js.map +0 -1
  454. package/dist/chunk-66YJ66GG.js +0 -1021
  455. package/dist/chunk-66YJ66GG.js.map +0 -1
  456. package/dist/chunk-6S5RUKU3.cjs +0 -347
  457. package/dist/chunk-6S5RUKU3.cjs.map +0 -1
  458. package/dist/chunk-6UQRVUN3.js +0 -222
  459. package/dist/chunk-6UQRVUN3.js.map +0 -1
  460. package/dist/chunk-7552UTQW.js +0 -11
  461. package/dist/chunk-7552UTQW.js.map +0 -1
  462. package/dist/chunk-7EQ4G4SI.cjs +0 -146
  463. package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
  464. package/dist/chunk-7SAWIN74.js +0 -285
  465. package/dist/chunk-7SAWIN74.js.map +0 -1
  466. package/dist/chunk-A4E5AQFK.js +0 -30
  467. package/dist/chunk-A4E5AQFK.js.map +0 -1
  468. package/dist/chunk-ALPYR2GC.js +0 -1061
  469. package/dist/chunk-ALPYR2GC.js.map +0 -1
  470. package/dist/chunk-B7SWBE4P.cjs +0 -799
  471. package/dist/chunk-B7SWBE4P.cjs.map +0 -1
  472. package/dist/chunk-BZHG5IZ4.js +0 -73
  473. package/dist/chunk-BZHG5IZ4.js.map +0 -1
  474. package/dist/chunk-CEAQK2QY.cjs +0 -32
  475. package/dist/chunk-CEAQK2QY.cjs.map +0 -1
  476. package/dist/chunk-CMHVQR6P.js +0 -170
  477. package/dist/chunk-CMHVQR6P.js.map +0 -1
  478. package/dist/chunk-CU6IDACR.cjs +0 -224
  479. package/dist/chunk-CU6IDACR.cjs.map +0 -1
  480. package/dist/chunk-D4TM63S3.js +0 -795
  481. package/dist/chunk-D4TM63S3.js.map +0 -1
  482. package/dist/chunk-DCEDJQGG.js +0 -28
  483. package/dist/chunk-DCEDJQGG.js.map +0 -1
  484. package/dist/chunk-DPSA4QLA.js +0 -344
  485. package/dist/chunk-DPSA4QLA.js.map +0 -1
  486. package/dist/chunk-E6TERL5O.cjs +0 -23
  487. package/dist/chunk-E6TERL5O.cjs.map +0 -1
  488. package/dist/chunk-EE6CPXKH.cjs +0 -164
  489. package/dist/chunk-EE6CPXKH.cjs.map +0 -1
  490. package/dist/chunk-EOFB7XCL.cjs +0 -837
  491. package/dist/chunk-EOFB7XCL.cjs.map +0 -1
  492. package/dist/chunk-ESLWRGAG.cjs +0 -92
  493. package/dist/chunk-ESLWRGAG.cjs.map +0 -1
  494. package/dist/chunk-ESMHTKLJ.cjs +0 -206
  495. package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
  496. package/dist/chunk-FMTHVSYY.cjs +0 -1039
  497. package/dist/chunk-FMTHVSYY.cjs.map +0 -1
  498. package/dist/chunk-FU6R566Y.cjs +0 -236
  499. package/dist/chunk-FU6R566Y.cjs.map +0 -1
  500. package/dist/chunk-GYR5K654.js +0 -91
  501. package/dist/chunk-GYR5K654.js.map +0 -1
  502. package/dist/chunk-HA2WBOGQ.js +0 -57
  503. package/dist/chunk-HA2WBOGQ.js.map +0 -1
  504. package/dist/chunk-HT5JQKN2.js +0 -118
  505. package/dist/chunk-HT5JQKN2.js.map +0 -1
  506. package/dist/chunk-INJD3G4K.cjs +0 -340
  507. package/dist/chunk-INJD3G4K.cjs.map +0 -1
  508. package/dist/chunk-IOYFAFHJ.cjs +0 -95
  509. package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
  510. package/dist/chunk-J5QENANM.js +0 -87
  511. package/dist/chunk-J5QENANM.js.map +0 -1
  512. package/dist/chunk-J7VGRIAJ.js +0 -64
  513. package/dist/chunk-J7VGRIAJ.js.map +0 -1
  514. package/dist/chunk-KFOHQK7X.js +0 -144
  515. package/dist/chunk-KFOHQK7X.js.map +0 -1
  516. package/dist/chunk-KIL5CUN6.js +0 -31
  517. package/dist/chunk-KIL5CUN6.js.map +0 -1
  518. package/dist/chunk-KYXZS3EA.cjs +0 -100
  519. package/dist/chunk-KYXZS3EA.cjs.map +0 -1
  520. package/dist/chunk-LITNXTTT.js +0 -3
  521. package/dist/chunk-LITNXTTT.js.map +0 -1
  522. package/dist/chunk-LVIPBYFE.js +0 -157
  523. package/dist/chunk-LVIPBYFE.js.map +0 -1
  524. package/dist/chunk-M3LFHHTN.cjs +0 -764
  525. package/dist/chunk-M3LFHHTN.cjs.map +0 -1
  526. package/dist/chunk-N25JDZSC.js +0 -95
  527. package/dist/chunk-N25JDZSC.js.map +0 -1
  528. package/dist/chunk-NEIB3TLD.cjs +0 -360
  529. package/dist/chunk-NEIB3TLD.cjs.map +0 -1
  530. package/dist/chunk-NENU7E6V.cjs +0 -344
  531. package/dist/chunk-NENU7E6V.cjs.map +0 -1
  532. package/dist/chunk-NVAI5CCN.cjs +0 -39
  533. package/dist/chunk-NVAI5CCN.cjs.map +0 -1
  534. package/dist/chunk-NZ72VDNY.cjs +0 -4
  535. package/dist/chunk-NZ72VDNY.cjs.map +0 -1
  536. package/dist/chunk-OPPXYVEZ.cjs +0 -131
  537. package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
  538. package/dist/chunk-Q4EULJQY.js +0 -35
  539. package/dist/chunk-Q4EULJQY.js.map +0 -1
  540. package/dist/chunk-QF7ARNUM.js +0 -339
  541. package/dist/chunk-QF7ARNUM.js.map +0 -1
  542. package/dist/chunk-QWW3E3JM.cjs +0 -178
  543. package/dist/chunk-QWW3E3JM.cjs.map +0 -1
  544. package/dist/chunk-R7QYGZUP.cjs +0 -1075
  545. package/dist/chunk-R7QYGZUP.cjs.map +0 -1
  546. package/dist/chunk-RUPKBKUF.js +0 -352
  547. package/dist/chunk-RUPKBKUF.js.map +0 -1
  548. package/dist/chunk-SEO6NAQT.js +0 -14
  549. package/dist/chunk-SEO6NAQT.js.map +0 -1
  550. package/dist/chunk-T4B5LB6E.cjs +0 -66
  551. package/dist/chunk-T4B5LB6E.cjs.map +0 -1
  552. package/dist/chunk-T5WRA76K.cjs +0 -32
  553. package/dist/chunk-T5WRA76K.cjs.map +0 -1
  554. package/dist/chunk-T7JO2TCP.js +0 -1233
  555. package/dist/chunk-T7JO2TCP.js.map +0 -1
  556. package/dist/chunk-TC5ZPWM4.cjs +0 -289
  557. package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
  558. package/dist/chunk-TQ5UWA7S.js +0 -26
  559. package/dist/chunk-TQ5UWA7S.js.map +0 -1
  560. package/dist/chunk-UIKYE2QZ.js +0 -833
  561. package/dist/chunk-UIKYE2QZ.js.map +0 -1
  562. package/dist/chunk-UNPLAVE7.js +0 -21
  563. package/dist/chunk-UNPLAVE7.js.map +0 -1
  564. package/dist/chunk-UY3UYPBZ.cjs +0 -77
  565. package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
  566. package/dist/chunk-V7UBMJAB.cjs +0 -1242
  567. package/dist/chunk-V7UBMJAB.cjs.map +0 -1
  568. package/dist/chunk-VH77IPJN.cjs +0 -358
  569. package/dist/chunk-VH77IPJN.cjs.map +0 -1
  570. package/dist/chunk-VQTCQKHQ.cjs +0 -17
  571. package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
  572. package/dist/chunk-WGWSHJ2N.js +0 -38
  573. package/dist/chunk-WGWSHJ2N.js.map +0 -1
  574. package/dist/chunk-WJH6IYU2.cjs +0 -32
  575. package/dist/chunk-WJH6IYU2.cjs.map +0 -1
  576. package/dist/chunk-YREV3LGG.cjs +0 -61
  577. package/dist/chunk-YREV3LGG.cjs.map +0 -1
  578. package/dist/chunk-YTXEZ4SD.cjs +0 -77
  579. package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
  580. package/dist/chunk-ZNMBW67B.cjs +0 -40
  581. package/dist/chunk-ZNMBW67B.cjs.map +0 -1
  582. package/dist/correlation-id.cjs.map +0 -1
  583. package/dist/correlation-id.js.map +0 -1
  584. package/dist/define-event-BL6Li7CM.d.ts +0 -23
  585. package/dist/define-event-ClP3T1Jx.d.cts +0 -23
  586. package/dist/event-subscriber.cjs.map +0 -1
  587. package/dist/event-subscriber.js.map +0 -1
  588. package/dist/event.cjs.map +0 -1
  589. package/dist/event.js.map +0 -1
  590. package/dist/exporters.cjs.map +0 -1
  591. package/dist/exporters.js.map +0 -1
  592. package/dist/functional.cjs.map +0 -1
  593. package/dist/functional.js.map +0 -1
  594. package/dist/init-DIowiiCh.d.ts +0 -1167
  595. package/dist/init-j-A1zI16.d.cts +0 -1167
  596. package/dist/processors.cjs.map +0 -1
  597. package/dist/processors.js.map +0 -1
  598. package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
  599. package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
  600. package/dist/utils-BahBCFtJ.d.cts +0 -712
  601. package/dist/utils-CLKwaUlG.d.ts +0 -712
  602. package/dist/yaml-config.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/messaging.ts"],"names":[],"mappings":"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","file":"chunk-D4TM63S3.js","sourcesContent":["/**\n * Messaging helpers for event-driven architectures\n *\n * Provides specialized tracing for message producers and consumers\n * with automatic context propagation, link extraction, and OTel\n * semantic convention compliance.\n *\n * @example Producer\n * ```typescript\n * import { traceProducer } from 'autotel/messaging';\n *\n * export const publishEvent = traceProducer({\n * system: 'kafka',\n * destination: 'user-events',\n * })(ctx => async (event: UserEvent) => {\n * const headers = ctx.getTraceHeaders();\n * await producer.send({\n * topic: 'user-events',\n * messages: [{ value: JSON.stringify(event), headers }]\n * });\n * });\n * ```\n *\n * @example Consumer\n * ```typescript\n * import { traceConsumer } from 'autotel/messaging';\n *\n * export const processEvents = traceConsumer({\n * system: 'kafka',\n * destination: 'user-events',\n * consumerGroup: 'event-processor',\n * batchMode: true,\n * })(ctx => async (messages: KafkaMessage[]) => {\n * // Links to producer spans are automatically extracted\n * for (const msg of messages) {\n * await processMessage(msg);\n * }\n * });\n * ```\n *\n * @module\n */\n\nimport { SpanKind, context, propagation } from '@opentelemetry/api';\nimport type {\n Attributes,\n AttributeValue,\n Link,\n SpanContext,\n} from '@opentelemetry/api';\nimport { trace } from './functional';\nimport type { TraceContext } from './trace-context';\nimport { emitCorrelatedEvent } from './correlated-events';\nimport { createLinkFromHeaders, extractLinksFromBatch } from './sampling';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Supported messaging systems\n */\nexport type MessagingSystem =\n | 'kafka'\n | 'rabbitmq'\n | 'sqs'\n | 'sns'\n | 'pubsub'\n | 'activemq'\n | 'azure_servicebus'\n | 'eventhubs'\n | (string & {});\n\n/**\n * Messaging operation types\n */\nexport type MessagingOperation = 'publish' | 'receive' | 'process' | 'settle';\n\n/**\n * Configuration for producer tracing\n */\nexport interface ProducerConfig {\n /** Messaging system (kafka, rabbitmq, sqs, etc.) */\n system: MessagingSystem;\n\n /** Destination name (topic/queue) */\n destination: string;\n\n /** Extract message ID from arguments */\n messageIdFrom?: string | ((args: unknown[]) => string | undefined);\n\n /** Extract partition from arguments (Kafka-specific) */\n partitionFrom?: string | ((args: unknown[]) => number | undefined);\n\n /** Extract message key from arguments (Kafka-specific) */\n keyFrom?: string | ((args: unknown[]) => string | undefined);\n\n /** Additional attributes to set on span */\n attributes?: Attributes;\n\n /** Propagate baggage in message headers */\n propagateBaggage?: boolean;\n\n /** Callback before sending (for custom attributes) */\n beforeSend?: (ctx: ProducerContext, args: unknown[]) => void;\n\n /** Callback on error */\n onError?: (error: Error, ctx: ProducerContext) => void;\n\n // ---- Extensible Hooks (\"Bring Your Own\" System Support) ----\n\n /**\n * Hook to add system-specific attributes\n *\n * Use this to add attributes for messaging systems not explicitly supported\n * (e.g., NATS, Temporal, Cloudflare Queues, Redis Streams).\n *\n * @example NATS attributes\n * ```typescript\n * customAttributes: (ctx, args) => ({\n * 'nats.subject': args[0].subject,\n * 'nats.reply_to': args[0].replyTo,\n * 'nats.stream': 'orders',\n * })\n * ```\n *\n * @example Temporal attributes\n * ```typescript\n * customAttributes: (ctx, args) => ({\n * 'temporal.workflow_id': args[0].workflowId,\n * 'temporal.run_id': args[0].runId,\n * 'temporal.task_queue': 'orders-queue',\n * })\n * ```\n */\n customAttributes?: (\n ctx: ProducerContext,\n args: unknown[],\n ) => Record<string, AttributeValue>;\n\n /**\n * Hook for custom header injection (beyond W3C traceparent)\n *\n * Use this to inject headers for systems that use non-standard\n * context propagation formats.\n *\n * @example Datadog headers\n * ```typescript\n * customHeaders: (ctx) => ({\n * 'x-datadog-trace-id': ctx.getTraceId(),\n * 'x-datadog-parent-id': ctx.getSpanId(),\n * })\n * ```\n *\n * @example Custom correlation headers\n * ```typescript\n * customHeaders: (ctx) => ({\n * 'x-correlation-id': correlationId,\n * 'x-request-id': requestId,\n * })\n * ```\n */\n customHeaders?: (ctx: ProducerContext) => Record<string, string>;\n}\n\n/**\n * Configuration for consumer tracing\n */\nexport interface ConsumerConfig {\n /** Messaging system (kafka, rabbitmq, sqs, etc.) */\n system: MessagingSystem;\n\n /** Destination name (topic/queue) */\n destination: string;\n\n /** Consumer group name */\n consumerGroup?: string;\n\n /** Extract headers from message for link creation */\n headersFrom?: string | ((msg: unknown) => Record<string, string> | undefined);\n\n /** Enable batch mode - extract links from all messages */\n batchMode?: boolean;\n\n /** Extract baggage from message headers */\n extractBaggage?: boolean;\n\n /** Additional attributes to set on span */\n attributes?: Attributes;\n\n /** Consumer lag metrics extraction */\n lagMetrics?: LagMetricsConfig;\n\n /** Callback when message goes to DLQ */\n onDLQ?: (ctx: ConsumerContext, reason: string) => void;\n\n /** Callback on error */\n onError?: (error: Error, ctx: ConsumerContext) => void;\n\n // ---- Message Ordering Support ----\n\n /**\n * Message ordering configuration\n *\n * Enable sequence tracking, out-of-order detection, and deduplication.\n *\n * @example Kafka ordering\n * ```typescript\n * ordering: {\n * sequenceFrom: (msg) => msg.offset,\n * partitionKeyFrom: (msg) => msg.key,\n * detectOutOfOrder: true,\n * onOutOfOrder: (ctx, info) => {\n * console.warn(`Out of order: expected ${info.expectedSequence}, got ${info.currentSequence}`);\n * },\n * }\n * ```\n */\n ordering?: OrderingConfig;\n\n // ---- Consumer Group Tracking ----\n\n /**\n * Consumer group tracking configuration\n *\n * Enables observability of consumer group state, including membership,\n * partition assignments, and rebalancing events.\n *\n * @example Kafka consumer group tracking\n * ```typescript\n * consumerGroupTracking: {\n * memberId: () => consumer.memberId,\n * groupInstanceId: process.env.KAFKA_GROUP_INSTANCE_ID,\n * onRebalance: (ctx, event) => {\n * if (event.type === 'revoked') {\n * logger.warn('Partitions revoked', event.partitions);\n * }\n * },\n * trackPartitionLag: true,\n * }\n * ```\n */\n consumerGroupTracking?: ConsumerGroupTrackingConfig;\n\n // ---- Extensible Hooks (\"Bring Your Own\" System Support) ----\n\n /**\n * Hook to add system-specific attributes\n *\n * Use this to add attributes for messaging systems not explicitly supported\n * (e.g., NATS, Temporal, Cloudflare Queues, Redis Streams).\n *\n * @example NATS consumer attributes\n * ```typescript\n * customAttributes: (ctx, msg) => ({\n * 'nats.subject': msg.subject,\n * 'nats.stream': msg.info?.stream,\n * 'nats.consumer': msg.info?.consumer,\n * 'nats.delivered_count': msg.info?.redeliveryCount,\n * })\n * ```\n *\n * @example Cloudflare Queue attributes\n * ```typescript\n * customAttributes: (ctx, msg) => ({\n * 'cloudflare.queue_id': msg.id,\n * 'cloudflare.timestamp_ms': msg.timestamp.getTime(),\n * 'cloudflare.attempts': msg.attempts,\n * })\n * ```\n */\n customAttributes?: (\n ctx: ConsumerContext,\n msg: unknown,\n ) => Record<string, AttributeValue>;\n\n /**\n * Hook for custom context extraction (beyond W3C traceparent)\n *\n * Use this to extract parent span context from systems that use\n * non-standard header formats.\n *\n * @example Datadog context extraction\n * ```typescript\n * customContextExtractor: (headers) => {\n * const traceId = headers['x-datadog-trace-id'];\n * const spanId = headers['x-datadog-parent-id'];\n * if (!traceId || !spanId) return null;\n * return {\n * traceId: traceIdToOtel(traceId),\n * spanId: spanIdToOtel(spanId),\n * traceFlags: TraceFlags.SAMPLED,\n * };\n * }\n * ```\n *\n * @example B3 format extraction\n * ```typescript\n * customContextExtractor: (headers) => {\n * const traceId = headers['x-b3-traceid'];\n * const spanId = headers['x-b3-spanid'];\n * const sampled = headers['x-b3-sampled'] === '1';\n * if (!traceId || !spanId) return null;\n * return {\n * traceId,\n * spanId,\n * traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n * };\n * }\n * ```\n */\n customContextExtractor?: (\n headers: Record<string, string>,\n ) => SpanContext | null;\n}\n\n/**\n * Configuration for consumer lag metrics\n */\nexport interface LagMetricsConfig {\n /** Get current message offset */\n getCurrentOffset?: (msg: unknown) => number | undefined;\n\n /** Get end offset (high watermark) - can be async */\n getEndOffset?: () => number | Promise<number>;\n\n /** Get committed offset - can be async */\n getCommittedOffset?: () => number | Promise<number>;\n\n /** Get partition from message */\n getPartition?: (msg: unknown) => number | undefined;\n}\n\n/**\n * Configuration for message ordering tracking\n */\nexport interface OrderingConfig {\n /**\n * Extract sequence number from message\n *\n * Sequence numbers enable out-of-order detection and gap analysis.\n *\n * @example Kafka offset\n * ```typescript\n * sequenceFrom: (msg) => msg.offset\n * ```\n */\n sequenceFrom?: (msg: unknown) => number | undefined;\n\n /**\n * Extract partition key from message\n *\n * Partition keys determine message ordering in Kafka.\n *\n * @example Message key\n * ```typescript\n * partitionKeyFrom: (msg) => msg.key\n * ```\n */\n partitionKeyFrom?: (msg: unknown) => string | undefined;\n\n /**\n * Extract message ID for deduplication\n *\n * Used to detect duplicate messages.\n *\n * @example Idempotency key\n * ```typescript\n * messageIdFrom: (msg) => msg.headers['idempotency-key']\n * ```\n */\n messageIdFrom?: (msg: unknown) => string | undefined;\n\n /**\n * Enable out-of-order detection\n *\n * Tracks sequence numbers per partition and detects when messages\n * arrive out of order.\n *\n * @default false\n */\n detectOutOfOrder?: boolean;\n\n /**\n * Enable deduplication detection\n *\n * Tracks message IDs and detects duplicates within the window.\n *\n * @default false\n */\n detectDuplicates?: boolean;\n\n /**\n * Deduplication window size (number of message IDs to track)\n *\n * @default 1000\n */\n deduplicationWindowSize?: number;\n\n /**\n * Callback when out-of-order message detected\n */\n onOutOfOrder?: (ctx: ConsumerContext, info: OutOfOrderInfo) => void;\n\n /**\n * Callback when duplicate message detected\n */\n onDuplicate?: (ctx: ConsumerContext, messageId: string) => void;\n}\n\n/**\n * Information about out-of-order message\n */\nexport interface OutOfOrderInfo {\n /** Current sequence number */\n currentSequence: number;\n\n /** Expected sequence number */\n expectedSequence: number;\n\n /** Partition key (if available) */\n partitionKey?: string;\n\n /** Gap size (positive = gap, negative = out of order) */\n gap: number;\n}\n\n// ============================================================================\n// Consumer Group Tracking Types\n// ============================================================================\n\n/**\n * Configuration for consumer group tracking\n *\n * Enables observability of consumer group state, including membership,\n * partition assignments, and rebalancing events.\n *\n * @example Kafka consumer group tracking\n * ```typescript\n * consumerGroupTracking: {\n * memberId: consumer.memberId,\n * groupInstanceId: process.env.CONSUMER_ID,\n * onRebalance: (ctx, event) => {\n * if (event.type === 'assigned') {\n * console.log(`Assigned partitions: ${event.partitions}`);\n * }\n * },\n * }\n * ```\n */\nexport interface ConsumerGroupTrackingConfig {\n /**\n * Consumer member ID\n *\n * Unique identifier assigned by the broker to this consumer.\n */\n memberId?: string | (() => string | undefined);\n\n /**\n * Static group instance ID (for static membership)\n *\n * If set, enables static group membership which prevents\n * rebalances when consumers restart.\n */\n groupInstanceId?: string | (() => string | undefined);\n\n /**\n * Callback when rebalance occurs\n */\n onRebalance?: (ctx: ConsumerContext, event: RebalanceEvent) => void;\n\n /**\n * Callback when partitions are assigned\n */\n onPartitionsAssigned?: (\n ctx: ConsumerContext,\n partitions: PartitionAssignment[],\n ) => void;\n\n /**\n * Callback when partitions are revoked\n */\n onPartitionsRevoked?: (\n ctx: ConsumerContext,\n partitions: PartitionAssignment[],\n ) => void;\n\n /**\n * Track consumer lag per partition\n *\n * @default true\n */\n trackPartitionLag?: boolean;\n\n /**\n * Track consumer heartbeat health\n *\n * @default false\n */\n trackHeartbeat?: boolean;\n\n /**\n * Heartbeat interval in milliseconds (for health tracking)\n */\n heartbeatIntervalMs?: number;\n}\n\n/**\n * Rebalance event types\n */\nexport type RebalanceType = 'assigned' | 'revoked' | 'lost';\n\n/**\n * Rebalance event information\n */\nexport interface RebalanceEvent {\n /** Type of rebalance event */\n type: RebalanceType;\n\n /** Partitions affected by the rebalance */\n partitions: PartitionAssignment[];\n\n /** Timestamp of the rebalance event */\n timestamp: number;\n\n /** Generation ID (increments on each rebalance) */\n generation?: number;\n\n /** Consumer member ID */\n memberId?: string;\n\n /** Reason for the rebalance (if available) */\n reason?: string;\n}\n\n/**\n * Partition assignment information\n */\nexport interface PartitionAssignment {\n /** Topic name */\n topic: string;\n\n /** Partition number */\n partition: number;\n\n /** Initial offset (if available) */\n offset?: number;\n\n /** Metadata (if available) */\n metadata?: string;\n}\n\n/**\n * Consumer group state snapshot\n */\nexport interface ConsumerGroupState {\n /** Consumer group name */\n groupId: string;\n\n /** Consumer member ID */\n memberId?: string;\n\n /** Static instance ID (if using static membership) */\n groupInstanceId?: string;\n\n /** Currently assigned partitions */\n assignedPartitions: PartitionAssignment[];\n\n /** Group generation ID */\n generation?: number;\n\n /** Whether the consumer is currently active */\n isActive: boolean;\n\n /** Last heartbeat timestamp */\n lastHeartbeat?: number;\n\n /** Consumer state (stable, preparing_rebalance, completing_rebalance, dead) */\n state?:\n | 'stable'\n | 'preparing_rebalance'\n | 'completing_rebalance'\n | 'dead'\n | 'empty';\n}\n\n/**\n * Partition lag information\n */\nexport interface PartitionLag {\n /** Topic name */\n topic: string;\n\n /** Partition number */\n partition: number;\n\n /** Current consumer offset */\n currentOffset: number;\n\n /** End offset (high watermark) */\n endOffset: number;\n\n /** Calculated lag */\n lag: number;\n\n /** Timestamp of measurement */\n timestamp: number;\n}\n\n/**\n * DLQ failure category types\n */\nexport type DLQReasonCategory =\n | 'validation'\n | 'processing'\n | 'timeout'\n | 'poison'\n | 'unknown';\n\n/**\n * Options for enhanced DLQ recording\n */\nexport interface DLQOptions {\n /**\n * Automatically link to the producer span context\n *\n * When true, creates a span link from the DLQ event back to\n * the original producer span for correlation.\n *\n * @default true\n */\n linkToProducer?: boolean;\n\n /**\n * Category of the failure that caused DLQ routing\n *\n * - validation: Message failed schema/format validation\n * - processing: Business logic error during processing\n * - timeout: Processing exceeded allowed time\n * - poison: Message causes repeated failures (poison pill)\n * - unknown: Uncategorized failure\n */\n reasonCategory?: DLQReasonCategory;\n\n /**\n * Number of processing attempts before DLQ routing\n */\n attemptCount?: number;\n\n /**\n * The original error that caused DLQ routing\n *\n * Error details are recorded as span attributes for debugging.\n */\n originalError?: Error;\n\n /**\n * Additional metadata to record with the DLQ event\n */\n metadata?: Record<string, string | number | boolean>;\n}\n\n/**\n * Options for recording DLQ replay\n */\nexport interface DLQReplayOptions {\n /**\n * Original span context from DLQ message\n *\n * If provided, creates a span link to correlate with the original failure.\n */\n originalDLQSpanContext?: SpanContext;\n\n /**\n * Time spent in DLQ before replay (milliseconds)\n */\n dlqDwellTimeMs?: number;\n\n /**\n * Retry attempt number for this replay\n */\n replayAttempt?: number;\n}\n\n/**\n * Extended trace context for producers with header injection\n */\nexport interface ProducerContext extends TraceContext {\n /**\n * Get W3C trace context headers to inject into message\n *\n * @returns Headers object with traceparent and optionally tracestate\n *\n * @example\n * ```typescript\n * const headers = ctx.getTraceHeaders();\n * await producer.send({\n * topic: 'events',\n * messages: [{ value: data, headers }]\n * });\n * ```\n */\n getTraceHeaders(): { traceparent: string; tracestate?: string };\n\n /**\n * Get all propagation headers including baggage if enabled\n *\n * @returns Headers object with all W3C trace context headers\n */\n getAllPropagationHeaders(): Record<string, string>;\n\n /**\n * Get all headers including custom headers from customHeaders hook\n *\n * This combines W3C trace context headers, baggage (if enabled),\n * and any custom headers defined via the customHeaders hook.\n *\n * @returns Combined headers object\n *\n * @example\n * ```typescript\n * const headers = ctx.getFullHeaders();\n * // Contains: traceparent, tracestate, baggage (if enabled), and custom headers\n * await producer.send({ topic, messages: [{ value, headers }] });\n * ```\n */\n getFullHeaders(): Record<string, string>;\n}\n\n/**\n * Extended trace context for consumers\n */\nexport interface ConsumerContext extends TraceContext {\n /**\n * Record that a message is being sent to DLQ\n *\n * Enhanced with auto-linking to producer span, failure categorization,\n * and detailed error recording for comprehensive DLQ observability.\n *\n * @param reason - Human-readable reason for DLQ routing\n * @param dlqNameOrOptions - DLQ name (string) or enhanced options object\n * @param options - Enhanced DLQ options (when second param is dlqName)\n *\n * @example Basic usage (backwards compatible)\n * ```typescript\n * ctx.recordDLQ('Schema validation failed', 'orders-dlq');\n * ```\n *\n * @example Enhanced usage with options\n * ```typescript\n * ctx.recordDLQ('Invalid order total', 'orders-dlq', {\n * reasonCategory: 'validation',\n * attemptCount: 3,\n * originalError: error,\n * linkToProducer: true, // Auto-links to producer span\n * });\n * ```\n *\n * @example Using options object as second param\n * ```typescript\n * ctx.recordDLQ('Processing timeout', {\n * reasonCategory: 'timeout',\n * attemptCount: 5,\n * metadata: { processingTimeMs: 30000 },\n * });\n * ```\n */\n recordDLQ(reason: string, dlqName?: string, options?: DLQOptions): void;\n recordDLQ(reason: string, options?: DLQOptions): void;\n\n /**\n * Record replay of a message from DLQ\n *\n * Use this when processing a message that was replayed from the DLQ\n * to create links for correlation and track replay metrics.\n *\n * @param options - Replay tracking options\n *\n * @example\n * ```typescript\n * export const processReplay = traceConsumer({\n * system: 'kafka',\n * destination: 'orders-dlq-replay',\n * })(ctx => async (message) => {\n * ctx.recordReplay({\n * originalDLQSpanContext: extractSpanContext(message.headers),\n * dlqDwellTimeMs: Date.now() - message.timestamp,\n * replayAttempt: message.replayCount,\n * });\n * await processOrder(message);\n * });\n * ```\n */\n recordReplay(options?: DLQReplayOptions): void;\n\n /**\n * Record retry attempt\n *\n * @param attemptNumber - Current retry attempt (1-based)\n * @param maxAttempts - Maximum retry attempts\n */\n recordRetry(attemptNumber: number, maxAttempts?: number): void;\n\n /**\n * Get the producer span context links extracted from message headers\n *\n * Useful for accessing the producer span context when implementing\n * custom DLQ or retry logic.\n *\n * @returns Array of span links extracted from the message, or empty array\n */\n getProducerLinks(): Link[];\n\n // ---- Message Ordering Methods ----\n\n /**\n * Check if the current message is a duplicate\n *\n * @returns True if the message has been seen before\n */\n isDuplicate(): boolean;\n\n /**\n * Check if the current message arrived out of order\n *\n * @returns Out of order info, or null if in order\n */\n getOutOfOrderInfo(): OutOfOrderInfo | null;\n\n /**\n * Get current sequence number\n *\n * @returns The sequence number, or null if not configured\n */\n getSequenceNumber(): number | null;\n\n /**\n * Get partition key\n *\n * @returns The partition key, or null if not configured\n */\n getPartitionKey(): string | null;\n\n // ---- Consumer Group Methods ----\n\n /**\n * Record a rebalance event\n *\n * Call this when the consumer group undergoes a rebalance to capture\n * the event as a span event with partition assignment details.\n *\n * @param event - The rebalance event details\n *\n * @example\n * ```typescript\n * consumer.on('rebalance', (event) => {\n * ctx.recordRebalance({\n * type: event.type,\n * partitions: event.assignment,\n * generation: event.generationId,\n * timestamp: Date.now(),\n * });\n * });\n * ```\n */\n recordRebalance(event: RebalanceEvent): void;\n\n /**\n * Record a heartbeat event\n *\n * Call this on each heartbeat to track consumer health.\n *\n * @param healthy - Whether the heartbeat was successful\n * @param latencyMs - Optional latency of the heartbeat in milliseconds\n */\n recordHeartbeat(healthy: boolean, latencyMs?: number): void;\n\n /**\n * Record partition lag for a specific partition\n *\n * @param lag - The partition lag information\n */\n recordPartitionLag(lag: PartitionLag): void;\n\n /**\n * Get the current consumer group state\n *\n * @returns The current consumer group state, or null if not configured\n */\n getConsumerGroupState(): ConsumerGroupState | null;\n\n /**\n * Get the consumer member ID\n *\n * @returns The member ID, or null if not available\n */\n getMemberId(): string | null;\n\n /**\n * Get the current partition assignments\n *\n * @returns Array of assigned partitions, or empty array if none\n */\n getAssignedPartitions(): PartitionAssignment[];\n}\n\n// ============================================================================\n// Producer Helper\n// ============================================================================\n\n/**\n * Create a traced message producer function\n *\n * Sets SpanKind.PRODUCER, OTel messaging semantic attributes,\n * and provides context injection helpers.\n *\n * @param config - Producer configuration\n * @returns Factory function that wraps your producer logic\n *\n * @example Kafka producer\n * ```typescript\n * export const publishUserEvent = traceProducer({\n * system: 'kafka',\n * destination: 'user-events',\n * messageIdFrom: (args) => args[0]?.eventId,\n * })(ctx => async (event: UserEvent) => {\n * const headers = ctx.getTraceHeaders();\n * await producer.send({\n * topic: 'user-events',\n * messages: [{\n * key: event.userId,\n * value: JSON.stringify(event),\n * headers,\n * }]\n * });\n * });\n * ```\n *\n * @example SQS producer\n * ```typescript\n * export const sendToSQS = traceProducer({\n * system: 'sqs',\n * destination: 'orders-queue',\n * })(ctx => async (order: Order) => {\n * const headers = ctx.getAllPropagationHeaders();\n * await sqs.sendMessage({\n * QueueUrl: QUEUE_URL,\n * MessageBody: JSON.stringify(order),\n * MessageAttributes: headersToSQSAttributes(headers),\n * });\n * });\n * ```\n */\nexport function traceProducer<TArgs extends unknown[], TReturn>(\n config: ProducerConfig,\n) {\n const spanName = `${config.system}.publish ${config.destination}`;\n\n return (\n fnFactory: (ctx: ProducerContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>(\n { name: spanName, spanKind: SpanKind.PRODUCER },\n (baseCtx) => {\n // Extend context with producer-specific methods\n const ctx = extendContextForProducer(baseCtx, config);\n\n // Set semantic convention attributes\n setProducerAttributes(ctx, config);\n\n // Call beforeSend callback if provided\n return (...args: TArgs) => {\n // Extract dynamic attributes from args\n setDynamicProducerAttributes(ctx, config, args);\n\n // Apply custom attributes hook if provided\n if (config.customAttributes) {\n const customAttrs = config.customAttributes(ctx, args);\n for (const [key, value] of Object.entries(customAttrs)) {\n if (value !== undefined && value !== null) {\n ctx.setAttribute(key, value as string | number | boolean);\n }\n }\n }\n\n if (config.beforeSend) {\n config.beforeSend(ctx, args);\n }\n\n // Execute user's function\n const userFn = fnFactory(ctx);\n return userFn(...args).catch((error) => {\n if (config.onError) {\n config.onError(error as Error, ctx);\n }\n throw error;\n });\n };\n },\n );\n };\n}\n\n// ============================================================================\n// Consumer Helper\n// ============================================================================\n\n/**\n * Create a traced message consumer function\n *\n * Sets SpanKind.CONSUMER, OTel messaging semantic attributes,\n * automatically extracts links from producer trace headers,\n * and provides DLQ/retry recording helpers.\n *\n * @param config - Consumer configuration\n * @returns Factory function that wraps your consumer logic\n *\n * @example Kafka consumer (single message)\n * ```typescript\n * export const processUserEvent = traceConsumer({\n * system: 'kafka',\n * destination: 'user-events',\n * consumerGroup: 'event-processor',\n * headersFrom: (msg) => msg.headers,\n * })(ctx => async (message: KafkaMessage) => {\n * // Link to producer span is automatically created\n * const event = JSON.parse(message.value.toString());\n * await processEvent(event);\n * });\n * ```\n *\n * @example Kafka consumer (batch mode)\n * ```typescript\n * export const processUserEventBatch = traceConsumer({\n * system: 'kafka',\n * destination: 'user-events',\n * consumerGroup: 'event-processor',\n * batchMode: true,\n * headersFrom: (msg) => msg.headers,\n * lagMetrics: {\n * getCurrentOffset: (msg) => msg.offset,\n * getEndOffset: () => consumer.getHighWatermark(),\n * getPartition: (msg) => msg.partition,\n * },\n * })(ctx => async (messages: KafkaMessage[]) => {\n * // Links to all producer spans are automatically created\n * for (const msg of messages) {\n * await processEvent(JSON.parse(msg.value.toString()));\n * }\n * });\n * ```\n *\n * @example SQS consumer with DLQ handling\n * ```typescript\n * export const processSQSMessage = traceConsumer({\n * system: 'sqs',\n * destination: 'orders-queue',\n * headersFrom: (msg) => sqsAttributesToHeaders(msg.MessageAttributes),\n * onDLQ: (ctx, reason) => {\n * ctx.recordDLQ(reason, 'orders-dlq');\n * },\n * })(ctx => async (message: SQSMessage) => {\n * try {\n * await processOrder(JSON.parse(message.Body));\n * } catch (error) {\n * if (message.ApproximateReceiveCount > 3) {\n * ctx.recordDLQ(error.message);\n * throw error;\n * }\n * ctx.recordRetry(message.ApproximateReceiveCount, 3);\n * throw error;\n * }\n * });\n * ```\n */\nexport function traceConsumer<TArgs extends unknown[], TReturn>(\n config: ConsumerConfig,\n) {\n const operation = config.batchMode ? 'receive' : 'process';\n const spanName = `${config.system}.${operation} ${config.destination}`;\n\n return (\n fnFactory: (ctx: ConsumerContext) => (...args: TArgs) => Promise<TReturn>,\n ): ((...args: TArgs) => Promise<TReturn>) => {\n return trace<TArgs, TReturn>(\n { name: spanName, spanKind: SpanKind.CONSUMER },\n (baseCtx) => {\n // Create mutable storage for producer links (populated during extractAndAddLinks)\n const linkStorage: ProducerLinkStorage = { links: [] };\n\n // Create mutable ordering state (populated during extractOrdering)\n const orderingState: OrderingState = {\n sequenceNumber: null,\n partitionKey: null,\n messageId: null,\n isDuplicate: false,\n outOfOrderInfo: null,\n };\n\n // Create consumer group state\n const groupTracking = config.consumerGroupTracking;\n const groupState: ConsumerGroupStateInternal = {\n memberId:\n typeof groupTracking?.memberId === 'function'\n ? (groupTracking.memberId() ?? null)\n : (groupTracking?.memberId ?? null),\n groupInstanceId:\n typeof groupTracking?.groupInstanceId === 'function'\n ? (groupTracking.groupInstanceId() ?? null)\n : (groupTracking?.groupInstanceId ?? null),\n assignedPartitions: [],\n generation: null,\n isActive: true,\n lastHeartbeat: null,\n state: null,\n };\n\n // Extend context with consumer-specific methods\n const ctx = extendContextForConsumer(\n baseCtx,\n config,\n linkStorage,\n orderingState,\n groupState,\n );\n\n // Set semantic convention attributes\n setConsumerAttributes(ctx, config);\n\n return async (...args: TArgs) => {\n // Extract links from message headers (includes customContextExtractor if provided)\n // This also populates linkStorage.links for getProducerLinks() and DLQ auto-linking\n await extractAndAddLinks(ctx, config, args, linkStorage);\n\n // Extract and process ordering information\n if (config.ordering) {\n extractAndProcessOrdering(ctx, config, args, orderingState);\n }\n\n // Extract lag metrics if configured\n if (config.lagMetrics) {\n await extractLagMetrics(ctx, config.lagMetrics, args);\n }\n\n // Apply custom attributes hook if provided\n if (config.customAttributes) {\n // For batch mode, extract first message; for single mode, use args[0] directly\n const batch = args[0];\n const msg =\n config.batchMode && Array.isArray(batch) && batch.length > 0\n ? batch[0]\n : batch;\n // Only call hook if we have a message\n if (msg !== undefined) {\n const customAttrs = config.customAttributes(ctx, msg);\n for (const [key, value] of Object.entries(customAttrs)) {\n if (value !== undefined && value !== null) {\n ctx.setAttribute(key, value as string | number | boolean);\n }\n }\n }\n }\n\n // Execute user's function\n const userFn = fnFactory(ctx);\n return userFn(...args).catch((error) => {\n if (config.onError) {\n config.onError(error as Error, ctx);\n }\n throw error;\n });\n };\n },\n );\n };\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Extend base context with producer-specific methods\n */\nfunction extendContextForProducer(\n baseCtx: TraceContext,\n config: ProducerConfig,\n): ProducerContext {\n // Create a reference for `this` binding in getFullHeaders\n const producerCtx: ProducerContext = {\n ...baseCtx,\n\n getTraceHeaders(): { traceparent: string; tracestate?: string } {\n const headers: Record<string, string> = {};\n propagation.inject(context.active(), headers);\n\n const result: { traceparent: string; tracestate?: string } = {\n traceparent: headers['traceparent'] || '',\n };\n\n if (headers['tracestate']) {\n result.tracestate = headers['tracestate'];\n }\n\n return result;\n },\n\n getAllPropagationHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n propagation.inject(context.active(), headers);\n\n // Include baggage if configured\n if (config.propagateBaggage) {\n const baggage = propagation.getBaggage(context.active());\n if (baggage) {\n const entries: string[] = [];\n for (const [key, value] of baggage.getAllEntries()) {\n entries.push(\n `${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`,\n );\n }\n if (entries.length > 0) {\n headers['baggage'] = entries.join(',');\n }\n }\n }\n\n return headers;\n },\n\n getFullHeaders(): Record<string, string> {\n // Start with all propagation headers (W3C + baggage)\n const headers = producerCtx.getAllPropagationHeaders();\n\n // Add custom headers from hook if configured\n if (config.customHeaders) {\n const customHeaders = config.customHeaders(producerCtx);\n Object.assign(headers, customHeaders);\n }\n\n return headers;\n },\n };\n\n return producerCtx;\n}\n\n/**\n * Mutable storage for producer links (populated during extractAndAddLinks)\n */\ninterface ProducerLinkStorage {\n links: Link[];\n}\n\n/**\n * Ordering state for a single message\n */\ninterface OrderingState {\n sequenceNumber: number | null;\n partitionKey: string | null;\n messageId: string | null;\n isDuplicate: boolean;\n outOfOrderInfo: OutOfOrderInfo | null;\n}\n\n/**\n * Global sequence tracker for out-of-order detection (per partition)\n */\nconst sequenceTrackers = new Map<string, number>();\n\n/**\n * Global deduplication window (LRU-style using Map insertion order)\n */\nconst deduplicationWindow = new Map<string, number>();\nconst DEFAULT_DEDUP_WINDOW_SIZE = 1000;\n\n/**\n * Clean up old entries from deduplication window\n */\nfunction trimDeduplicationWindow(maxSize: number): void {\n if (deduplicationWindow.size > maxSize) {\n const excess = deduplicationWindow.size - maxSize;\n const iterator = deduplicationWindow.keys();\n for (let i = 0; i < excess; i++) {\n const key = iterator.next().value;\n if (key) deduplicationWindow.delete(key);\n }\n }\n}\n\n/**\n * Consumer group state tracking for a single consumer\n */\ninterface ConsumerGroupStateInternal {\n memberId: string | null;\n groupInstanceId: string | null;\n assignedPartitions: PartitionAssignment[];\n generation: number | null;\n isActive: boolean;\n lastHeartbeat: number | null;\n state: ConsumerGroupState['state'] | null;\n}\n\n/**\n * Extend base context with consumer-specific methods\n */\nfunction extendContextForConsumer(\n baseCtx: TraceContext,\n config: ConsumerConfig,\n linkStorage: ProducerLinkStorage,\n orderingState: OrderingState,\n groupState: ConsumerGroupStateInternal,\n): ConsumerContext {\n const consumerCtx: ConsumerContext = {\n ...baseCtx,\n\n recordDLQ(\n reason: string,\n dlqNameOrOptions?: string | DLQOptions,\n optionsParam?: DLQOptions,\n ): void {\n // Parse overloaded arguments\n let dlqName: string | undefined;\n let options: DLQOptions | undefined;\n\n if (typeof dlqNameOrOptions === 'string') {\n dlqName = dlqNameOrOptions;\n options = optionsParam;\n } else if (typeof dlqNameOrOptions === 'object') {\n options = dlqNameOrOptions;\n }\n\n // Default linkToProducer to true\n const linkToProducer = options?.linkToProducer ?? true;\n\n // Set basic DLQ attributes\n baseCtx.setAttribute('messaging.dlq.reason', reason);\n if (dlqName) {\n baseCtx.setAttribute('messaging.dlq.name', dlqName);\n }\n\n // Set enhanced DLQ attributes\n if (options?.reasonCategory) {\n baseCtx.setAttribute(\n 'messaging.dlq.reason_category',\n options.reasonCategory,\n );\n }\n if (options?.attemptCount !== undefined) {\n baseCtx.setAttribute(\n 'messaging.dlq.attempt_count',\n options.attemptCount,\n );\n }\n if (options?.originalError) {\n baseCtx.setAttribute(\n 'messaging.dlq.error.type',\n options.originalError.name,\n );\n baseCtx.setAttribute(\n 'messaging.dlq.error.message',\n options.originalError.message,\n );\n }\n\n // Set custom metadata\n if (options?.metadata) {\n for (const [key, value] of Object.entries(options.metadata)) {\n baseCtx.setAttribute(`messaging.dlq.metadata.${key}`, value);\n }\n }\n\n // Auto-link to producer span if available and enabled\n const producerLink = linkStorage.links[0];\n if (linkToProducer && producerLink) {\n baseCtx.setAttribute(\n 'messaging.dlq.producer_trace_id',\n producerLink.context.traceId,\n );\n baseCtx.setAttribute(\n 'messaging.dlq.producer_span_id',\n producerLink.context.spanId,\n );\n }\n\n // Record event with all attributes\n const eventAttrs: Record<string, string | number | boolean> = {\n 'messaging.dlq.reason': reason,\n ...(dlqName && { 'messaging.dlq.name': dlqName }),\n ...(options?.reasonCategory && {\n 'messaging.dlq.reason_category': options.reasonCategory,\n }),\n ...(options?.attemptCount !== undefined && {\n 'messaging.dlq.attempt_count': options.attemptCount,\n }),\n ...(options?.originalError && {\n 'messaging.dlq.error.type': options.originalError.name,\n 'messaging.dlq.error.message': options.originalError.message,\n }),\n };\n\n // Add producer link info to event if available\n if (linkToProducer && producerLink) {\n eventAttrs['messaging.dlq.producer_trace_id'] =\n producerLink.context.traceId;\n eventAttrs['messaging.dlq.producer_span_id'] =\n producerLink.context.spanId;\n }\n\n emitCorrelatedEvent(baseCtx, 'dlq_routed', eventAttrs);\n\n // Call user's onDLQ callback if provided\n if (config.onDLQ) {\n config.onDLQ(consumerCtx, reason);\n }\n },\n\n recordReplay(options?: DLQReplayOptions): void {\n baseCtx.setAttribute('messaging.replay', true);\n\n if (options?.replayAttempt !== undefined) {\n baseCtx.setAttribute('messaging.replay.attempt', options.replayAttempt);\n }\n if (options?.dlqDwellTimeMs !== undefined) {\n baseCtx.setAttribute(\n 'messaging.replay.dwell_time_ms',\n options.dlqDwellTimeMs,\n );\n }\n\n // Create span link to original DLQ span if provided\n if (options?.originalDLQSpanContext) {\n baseCtx.addLinks([\n {\n context: options.originalDLQSpanContext,\n attributes: { 'messaging.link.source': 'dlq_replay' },\n },\n ]);\n }\n\n const eventAttrs: Record<string, string | number | boolean> = {\n 'messaging.replay': true,\n ...(options?.replayAttempt !== undefined && {\n 'messaging.replay.attempt': options.replayAttempt,\n }),\n ...(options?.dlqDwellTimeMs !== undefined && {\n 'messaging.replay.dwell_time_ms': options.dlqDwellTimeMs,\n }),\n };\n\n emitCorrelatedEvent(baseCtx, 'dlq_replay', eventAttrs);\n },\n\n recordRetry(attemptNumber: number, maxAttempts?: number): void {\n baseCtx.setAttribute('messaging.retry.count', attemptNumber);\n if (maxAttempts !== undefined) {\n baseCtx.setAttribute('messaging.retry.max_attempts', maxAttempts);\n }\n emitCorrelatedEvent(baseCtx, 'retry_attempt', {\n 'messaging.retry.count': attemptNumber,\n ...(maxAttempts !== undefined && {\n 'messaging.retry.max_attempts': maxAttempts,\n }),\n });\n },\n\n getProducerLinks(): Link[] {\n return [...linkStorage.links];\n },\n\n // ---- Ordering Methods ----\n\n isDuplicate(): boolean {\n return orderingState.isDuplicate;\n },\n\n getOutOfOrderInfo(): OutOfOrderInfo | null {\n return orderingState.outOfOrderInfo;\n },\n\n getSequenceNumber(): number | null {\n return orderingState.sequenceNumber;\n },\n\n getPartitionKey(): string | null {\n return orderingState.partitionKey;\n },\n\n // ---- Consumer Group Methods ----\n\n recordRebalance(event: RebalanceEvent): void {\n // Update internal state including consumer group state\n if (event.type === 'assigned') {\n groupState.assignedPartitions = event.partitions;\n groupState.isActive = true;\n // After assignment completes, group is stable\n groupState.state = 'stable';\n } else if (event.type === 'revoked' || event.type === 'lost') {\n // Remove revoked partitions from assignments\n const revokedSet = new Set(\n event.partitions.map((p) => `${p.topic}:${p.partition}`),\n );\n groupState.assignedPartitions = groupState.assignedPartitions.filter(\n (p) => !revokedSet.has(`${p.topic}:${p.partition}`),\n );\n if (event.type === 'lost') {\n groupState.isActive = false;\n // Consumer lost connection, mark as dead\n groupState.state = 'dead';\n } else {\n // Revoked means rebalance is starting\n // If no partitions remain, consumer is empty; otherwise preparing for rebalance\n groupState.state =\n groupState.assignedPartitions.length === 0\n ? 'empty'\n : 'preparing_rebalance';\n }\n }\n\n if (event.generation !== undefined) {\n groupState.generation = event.generation;\n }\n if (event.memberId) {\n groupState.memberId = event.memberId;\n }\n\n // Set span attributes\n baseCtx.setAttribute(\n 'messaging.consumer_group.rebalance.type',\n event.type,\n );\n baseCtx.setAttribute(\n 'messaging.consumer_group.rebalance.partition_count',\n event.partitions.length,\n );\n if (event.generation !== undefined) {\n baseCtx.setAttribute(\n 'messaging.consumer_group.generation',\n event.generation,\n );\n }\n if (event.memberId) {\n baseCtx.setAttribute(\n 'messaging.consumer_group.member_id',\n event.memberId,\n );\n }\n if (event.reason) {\n baseCtx.setAttribute(\n 'messaging.consumer_group.rebalance.reason',\n event.reason,\n );\n }\n\n // Set the new state on the span\n if (groupState.state) {\n baseCtx.setAttribute(\n 'messaging.consumer_group.state',\n groupState.state,\n );\n }\n\n // Record event\n const eventAttrs: Record<string, string | number | boolean> = {\n 'messaging.consumer_group.rebalance.type': event.type,\n 'messaging.consumer_group.rebalance.partition_count':\n event.partitions.length,\n 'messaging.consumer_group.rebalance.timestamp': event.timestamp,\n ...(event.generation !== undefined && {\n 'messaging.consumer_group.generation': event.generation,\n }),\n ...(event.memberId && {\n 'messaging.consumer_group.member_id': event.memberId,\n }),\n ...(event.reason && {\n 'messaging.consumer_group.rebalance.reason': event.reason,\n }),\n ...(groupState.state && {\n 'messaging.consumer_group.state': groupState.state,\n }),\n };\n\n // Add partition details if not too many\n if (event.partitions.length <= 10) {\n eventAttrs['messaging.consumer_group.rebalance.partitions'] =\n event.partitions.map((p) => `${p.topic}:${p.partition}`).join(',');\n }\n\n emitCorrelatedEvent(baseCtx, `consumer_group_${event.type}`, eventAttrs);\n\n // Call user's onRebalance callback if provided\n if (config.consumerGroupTracking?.onRebalance) {\n config.consumerGroupTracking.onRebalance(consumerCtx, event);\n }\n\n // Call specific callbacks\n if (\n event.type === 'assigned' &&\n config.consumerGroupTracking?.onPartitionsAssigned\n ) {\n config.consumerGroupTracking.onPartitionsAssigned(\n consumerCtx,\n event.partitions,\n );\n }\n if (\n event.type === 'revoked' &&\n config.consumerGroupTracking?.onPartitionsRevoked\n ) {\n config.consumerGroupTracking.onPartitionsRevoked(\n consumerCtx,\n event.partitions,\n );\n }\n },\n\n recordHeartbeat(healthy: boolean, latencyMs?: number): void {\n groupState.lastHeartbeat = Date.now();\n\n baseCtx.setAttribute(\n 'messaging.consumer_group.heartbeat.healthy',\n healthy,\n );\n if (latencyMs !== undefined) {\n baseCtx.setAttribute(\n 'messaging.consumer_group.heartbeat.latency_ms',\n latencyMs,\n );\n }\n\n emitCorrelatedEvent(baseCtx, 'consumer_group_heartbeat', {\n 'messaging.consumer_group.heartbeat.healthy': healthy,\n 'messaging.consumer_group.heartbeat.timestamp':\n groupState.lastHeartbeat,\n ...(latencyMs !== undefined && {\n 'messaging.consumer_group.heartbeat.latency_ms': latencyMs,\n }),\n });\n },\n\n recordPartitionLag(lag: PartitionLag): void {\n const prefix = `messaging.consumer_group.lag.${lag.topic}.${lag.partition}`;\n\n baseCtx.setAttribute(`${prefix}.current_offset`, lag.currentOffset);\n baseCtx.setAttribute(`${prefix}.end_offset`, lag.endOffset);\n baseCtx.setAttribute(`${prefix}.lag`, lag.lag);\n\n emitCorrelatedEvent(baseCtx, 'partition_lag_recorded', {\n 'messaging.consumer_group.lag.topic': lag.topic,\n 'messaging.consumer_group.lag.partition': lag.partition,\n 'messaging.consumer_group.lag.current_offset': lag.currentOffset,\n 'messaging.consumer_group.lag.end_offset': lag.endOffset,\n 'messaging.consumer_group.lag.lag': lag.lag,\n 'messaging.consumer_group.lag.timestamp': lag.timestamp,\n });\n },\n\n getConsumerGroupState(): ConsumerGroupState | null {\n if (!config.consumerGroup) {\n return null;\n }\n\n return {\n groupId: config.consumerGroup,\n memberId: groupState.memberId ?? undefined,\n groupInstanceId: groupState.groupInstanceId ?? undefined,\n assignedPartitions: [...groupState.assignedPartitions],\n generation: groupState.generation ?? undefined,\n isActive: groupState.isActive,\n lastHeartbeat: groupState.lastHeartbeat ?? undefined,\n state: groupState.state ?? undefined,\n };\n },\n\n getMemberId(): string | null {\n return groupState.memberId;\n },\n\n getAssignedPartitions(): PartitionAssignment[] {\n return [...groupState.assignedPartitions];\n },\n };\n\n return consumerCtx;\n}\n\n/**\n * Set OTel semantic convention attributes for producer\n */\nfunction setProducerAttributes(\n ctx: TraceContext,\n config: ProducerConfig,\n): void {\n ctx.setAttribute('messaging.system', config.system);\n ctx.setAttribute('messaging.operation', 'publish');\n ctx.setAttribute('messaging.destination.name', config.destination);\n\n // Set system-specific destination attribute\n if (config.system === 'kafka') {\n ctx.setAttribute('messaging.kafka.destination.topic', config.destination);\n }\n\n // Set custom attributes\n if (config.attributes) {\n setCustomAttributes(ctx, config.attributes);\n }\n}\n\n/**\n * Set dynamic producer attributes from arguments\n */\nfunction setDynamicProducerAttributes(\n ctx: TraceContext,\n config: ProducerConfig,\n args: unknown[],\n): void {\n // Message ID\n if (config.messageIdFrom) {\n const messageId = extractValue(config.messageIdFrom, args);\n if (messageId !== undefined) {\n ctx.setAttribute('messaging.message.id', String(messageId));\n }\n }\n\n // Partition (Kafka-specific)\n if (config.partitionFrom) {\n const partition = extractValue(config.partitionFrom, args);\n if (partition !== undefined) {\n ctx.setAttribute(\n 'messaging.kafka.destination.partition',\n Number(partition),\n );\n }\n }\n\n // Key (Kafka-specific)\n if (config.keyFrom) {\n const key = extractValue(config.keyFrom, args);\n if (key !== undefined) {\n ctx.setAttribute('messaging.kafka.message.key', String(key));\n }\n }\n}\n\n/**\n * Set OTel semantic convention attributes for consumer\n */\nfunction setConsumerAttributes(\n ctx: TraceContext,\n config: ConsumerConfig,\n): void {\n ctx.setAttribute('messaging.system', config.system);\n ctx.setAttribute(\n 'messaging.operation',\n config.batchMode ? 'receive' : 'process',\n );\n ctx.setAttribute('messaging.destination.name', config.destination);\n\n // Consumer group\n if (config.consumerGroup) {\n ctx.setAttribute('messaging.consumer.group', config.consumerGroup);\n\n // System-specific consumer group attribute\n if (config.system === 'kafka') {\n ctx.setAttribute('messaging.kafka.consumer.group', config.consumerGroup);\n }\n }\n\n // Set system-specific destination attribute\n if (config.system === 'kafka') {\n ctx.setAttribute('messaging.kafka.destination.topic', config.destination);\n }\n\n // Set custom attributes\n if (config.attributes) {\n setCustomAttributes(ctx, config.attributes);\n }\n}\n\n/**\n * Extract links from message headers and add to span\n *\n * Uses W3C trace context by default, falls back to customContextExtractor if provided.\n * Also populates linkStorage for getProducerLinks() and DLQ auto-linking.\n */\nasync function extractAndAddLinks(\n ctx: ConsumerContext,\n config: ConsumerConfig,\n args: unknown[],\n linkStorage: ProducerLinkStorage,\n): Promise<void> {\n if (!config.headersFrom && !config.customContextExtractor) {\n return;\n }\n\n const links: Link[] = [];\n\n if (config.batchMode && Array.isArray(args[0])) {\n // Batch mode - extract links from all messages\n const messages = args[0] as unknown[];\n\n if (config.headersFrom) {\n const batchLinks = extractLinksFromBatch(\n messages.map((msg) => {\n const headers = extractHeaders(config.headersFrom!, msg);\n return { headers };\n }),\n 'headers',\n );\n links.push(...batchLinks);\n }\n\n // Try custom context extractor for messages without W3C links\n if (config.customContextExtractor && config.headersFrom) {\n for (const msg of messages) {\n const headers = extractHeaders(config.headersFrom, msg);\n if (headers) {\n // Only use custom extractor if W3C headers weren't present\n const w3cLink = createLinkFromHeaders(headers);\n if (!w3cLink) {\n const customContext = config.customContextExtractor(headers);\n if (customContext) {\n links.push({\n context: customContext,\n attributes: { 'messaging.link.source': 'custom_extractor' },\n });\n }\n }\n }\n }\n }\n\n // Set batch count\n ctx.setAttribute('messaging.batch.message_count', messages.length);\n } else {\n // Single message mode\n const msg = args[0];\n const headers = config.headersFrom\n ? extractHeaders(config.headersFrom, msg)\n : undefined;\n\n if (headers) {\n // Try W3C format first\n const w3cLink = createLinkFromHeaders(headers);\n if (w3cLink) {\n links.push(w3cLink);\n } else if (config.customContextExtractor) {\n // Fall back to custom extractor\n const customContext = config.customContextExtractor(headers);\n if (customContext) {\n links.push({\n context: customContext,\n attributes: { 'messaging.link.source': 'custom_extractor' },\n });\n }\n }\n }\n }\n\n // Add all extracted links and store for getProducerLinks() / DLQ auto-linking\n if (links.length > 0) {\n ctx.addLinks(links);\n linkStorage.links.push(...links);\n }\n}\n\n/**\n * Extract lag metrics and set as span attributes\n */\nasync function extractLagMetrics(\n ctx: ConsumerContext,\n lagConfig: LagMetricsConfig,\n args: unknown[],\n): Promise<void> {\n const msg = Array.isArray(args[0]) ? args[0][0] : args[0];\n\n // Current offset\n let currentOffset: number | undefined;\n if (lagConfig.getCurrentOffset && msg) {\n currentOffset = lagConfig.getCurrentOffset(msg);\n if (currentOffset !== undefined) {\n ctx.setAttribute('messaging.kafka.message.offset', currentOffset);\n }\n }\n\n // Partition\n if (lagConfig.getPartition && msg) {\n const partition = lagConfig.getPartition(msg);\n if (partition !== undefined) {\n ctx.setAttribute('messaging.kafka.partition', partition);\n }\n }\n\n // End offset (high watermark) and lag calculation\n if (lagConfig.getEndOffset) {\n try {\n const endOffset = await Promise.resolve(lagConfig.getEndOffset());\n if (endOffset !== undefined && currentOffset !== undefined) {\n const lag = endOffset - currentOffset;\n ctx.setAttribute('messaging.kafka.consumer_lag', lag);\n\n // Add lag event\n emitCorrelatedEvent(ctx, 'consumer_lag_measured', {\n 'messaging.kafka.consumer_lag': lag,\n 'messaging.kafka.message.offset': currentOffset,\n 'messaging.kafka.high_watermark': endOffset,\n });\n }\n } catch {\n // Ignore lag calculation errors\n }\n }\n\n // Committed offset\n if (lagConfig.getCommittedOffset) {\n try {\n const committedOffset = await Promise.resolve(\n lagConfig.getCommittedOffset(),\n );\n if (committedOffset !== undefined) {\n ctx.setAttribute('messaging.kafka.committed_offset', committedOffset);\n }\n } catch {\n // Ignore committed offset errors\n }\n }\n\n // Batch-specific metrics\n if (Array.isArray(args[0]) && args[0].length > 0) {\n const messages = args[0] as unknown[];\n if (lagConfig.getCurrentOffset) {\n const firstOffset = lagConfig.getCurrentOffset(messages[0]);\n const lastMessage = messages.at(-1);\n const lastOffset =\n lastMessage === undefined\n ? undefined\n : lagConfig.getCurrentOffset(lastMessage);\n\n if (firstOffset !== undefined) {\n ctx.setAttribute('messaging.batch.first_offset', firstOffset);\n }\n if (lastOffset !== undefined) {\n ctx.setAttribute('messaging.batch.last_offset', lastOffset);\n }\n }\n }\n}\n\n/**\n * Extract headers from message using config\n */\nfunction extractHeaders(\n headersFrom: string | ((msg: unknown) => Record<string, string> | undefined),\n msg: unknown,\n): Record<string, string> | undefined {\n if (typeof headersFrom === 'function') {\n return headersFrom(msg);\n }\n\n // String path - extract from message property\n if (typeof msg === 'object' && msg !== null) {\n const value = (msg as Record<string, unknown>)[headersFrom];\n if (typeof value === 'object' && value !== null) {\n return value as Record<string, string>;\n }\n }\n\n return undefined;\n}\n\n/**\n * Extract value from arguments using config\n */\nfunction extractValue(\n extractor: string | ((args: unknown[]) => unknown),\n args: unknown[],\n): unknown {\n if (typeof extractor === 'function') {\n return extractor(args);\n }\n\n // String path - extract from first argument\n const firstArg = args[0];\n if (typeof firstArg === 'object' && firstArg !== null) {\n return (firstArg as Record<string, unknown>)[extractor];\n }\n\n return undefined;\n}\n\n/**\n * Set custom attributes on context, handling non-primitive values\n */\nfunction setCustomAttributes(ctx: TraceContext, attributes: Attributes): void {\n for (const [key, value] of Object.entries(attributes)) {\n if (value !== undefined && value !== null) {\n // setAttribute accepts primitives and arrays of primitives\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n ctx.setAttribute(key, value);\n } else if (Array.isArray(value)) {\n // Filter out null/undefined from arrays and ensure proper typing\n const cleanArray = value.filter(\n (v): v is string | number | boolean =>\n v !== null &&\n v !== undefined &&\n (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean'),\n );\n if (cleanArray.length > 0) {\n ctx.setAttribute(key, cleanArray as string[] | number[] | boolean[]);\n }\n } else {\n ctx.setAttribute(key, JSON.stringify(value));\n }\n }\n }\n}\n\n/**\n * Extract and process ordering information from message\n *\n * Handles:\n * - Sequence number extraction and tracking\n * - Out-of-order detection\n * - Duplicate detection\n * - Span attribute setting\n * - Callback invocation\n */\nfunction extractAndProcessOrdering(\n ctx: ConsumerContext,\n config: ConsumerConfig,\n args: unknown[],\n orderingState: OrderingState,\n): void {\n const ordering = config.ordering;\n if (!ordering) return;\n\n // Get messages to process - all messages in batch mode, single message otherwise\n const messages: unknown[] =\n config.batchMode && Array.isArray(args[0]) ? args[0] : [args[0]];\n\n if (messages.length === 0) return;\n\n // Track aggregate stats for batch reporting\n let outOfOrderCount = 0;\n let duplicateCount = 0;\n let lastSequence: number | null = null;\n let lastPartitionKey: string | null = null;\n let lastMessageId: string | null = null;\n\n for (const [i, msg] of messages.entries()) {\n if (!msg) continue;\n\n // Per-message state for this iteration\n let msgSequence: number | null = null;\n let msgPartitionKey: string | null = null;\n let msgId: string | null = null;\n\n // Extract sequence number\n if (ordering.sequenceFrom) {\n const seq = ordering.sequenceFrom(msg);\n if (seq !== undefined) {\n msgSequence = seq;\n lastSequence = seq;\n }\n }\n\n // Extract partition key\n if (ordering.partitionKeyFrom) {\n const key = ordering.partitionKeyFrom(msg);\n if (key !== undefined) {\n msgPartitionKey = key;\n lastPartitionKey = key;\n }\n }\n\n // Extract message ID for deduplication\n if (ordering.messageIdFrom) {\n const id = ordering.messageIdFrom(msg);\n if (id !== undefined) {\n msgId = id;\n lastMessageId = id;\n }\n }\n\n // Out-of-order detection for this message\n if (ordering.detectOutOfOrder && msgSequence !== null) {\n // Build tracker key using per-message partition key\n const msgOrderingState: OrderingState = {\n sequenceNumber: msgSequence,\n partitionKey: msgPartitionKey,\n messageId: msgId,\n isDuplicate: false,\n outOfOrderInfo: null,\n };\n const trackerKey = buildTrackerKey(config, msgOrderingState);\n const prevSequence = sequenceTrackers.get(trackerKey);\n\n if (prevSequence !== undefined) {\n const expectedSequence = prevSequence + 1;\n\n if (msgSequence !== expectedSequence) {\n outOfOrderCount++;\n const gap = msgSequence - expectedSequence;\n const outOfOrderInfo: OutOfOrderInfo = {\n currentSequence: msgSequence,\n expectedSequence,\n partitionKey: msgPartitionKey ?? undefined,\n gap,\n };\n\n // Store the first out-of-order info for backward compatibility\n if (!orderingState.outOfOrderInfo) {\n orderingState.outOfOrderInfo = outOfOrderInfo;\n }\n\n // Add event for each out-of-order message\n emitCorrelatedEvent(ctx, 'message_out_of_order', {\n 'messaging.ordering.batch_index': i,\n 'messaging.ordering.current_sequence': msgSequence,\n 'messaging.ordering.expected_sequence': expectedSequence,\n 'messaging.ordering.gap': gap,\n ...(msgPartitionKey && {\n 'messaging.ordering.partition_key': msgPartitionKey,\n }),\n });\n\n // Call user callback if provided\n if (ordering.onOutOfOrder) {\n ordering.onOutOfOrder(ctx, outOfOrderInfo);\n }\n }\n }\n\n // Update tracker with this message's sequence\n sequenceTrackers.set(trackerKey, msgSequence);\n }\n\n // Duplicate detection for this message\n if (ordering.detectDuplicates && msgId !== null) {\n const msgOrderingState: OrderingState = {\n sequenceNumber: msgSequence,\n partitionKey: msgPartitionKey,\n messageId: msgId,\n isDuplicate: false,\n outOfOrderInfo: null,\n };\n const dedupKey = buildDedupKey(config, msgOrderingState);\n\n if (deduplicationWindow.has(dedupKey)) {\n duplicateCount++;\n\n // Add event for each duplicate\n emitCorrelatedEvent(ctx, 'message_duplicate', {\n 'messaging.ordering.batch_index': i,\n 'messaging.message.id': msgId,\n });\n\n // Call user callback if provided\n if (ordering.onDuplicate) {\n ordering.onDuplicate(ctx, msgId);\n }\n } else {\n // Add to deduplication window\n deduplicationWindow.set(dedupKey, Date.now());\n\n // Trim window if needed\n const windowSize =\n ordering.deduplicationWindowSize ?? DEFAULT_DEDUP_WINDOW_SIZE;\n trimDeduplicationWindow(windowSize);\n }\n }\n }\n\n // Update orderingState with final values from the batch\n orderingState.sequenceNumber = lastSequence;\n orderingState.partitionKey = lastPartitionKey;\n orderingState.messageId = lastMessageId;\n orderingState.isDuplicate = duplicateCount > 0;\n\n // Set aggregate span attributes\n if (lastSequence !== null) {\n ctx.setAttribute('messaging.message.sequence_number', lastSequence);\n }\n if (lastPartitionKey !== null) {\n ctx.setAttribute('messaging.message.partition_key', lastPartitionKey);\n }\n if (lastMessageId !== null) {\n ctx.setAttribute('messaging.message.id', lastMessageId);\n }\n\n // Report batch-level ordering statistics\n if (outOfOrderCount > 0) {\n ctx.setAttribute('messaging.ordering.out_of_order', true);\n ctx.setAttribute('messaging.ordering.out_of_order_count', outOfOrderCount);\n }\n if (duplicateCount > 0) {\n ctx.setAttribute('messaging.ordering.duplicate', true);\n ctx.setAttribute('messaging.ordering.duplicate_count', duplicateCount);\n }\n}\n\n/**\n * Build a unique key for sequence tracking based on system, destination, and partition\n */\nfunction buildTrackerKey(\n config: ConsumerConfig,\n orderingState: OrderingState,\n): string {\n const parts = [config.system, config.destination];\n if (orderingState.partitionKey) {\n parts.push(orderingState.partitionKey);\n }\n if (config.consumerGroup) {\n parts.push(config.consumerGroup);\n }\n return parts.join(':');\n}\n\n/**\n * Build a unique key for deduplication based on system, destination, and message ID\n */\nfunction buildDedupKey(\n config: ConsumerConfig,\n orderingState: OrderingState,\n): string {\n const parts = [config.system, config.destination];\n if (orderingState.messageId) {\n parts.push(orderingState.messageId);\n }\n return parts.join(':');\n}\n\n/**\n * Clear sequence tracking state (useful for testing)\n */\nexport function clearOrderingState(): void {\n sequenceTrackers.clear();\n deduplicationWindow.clear();\n}\n"]}
@@ -1,28 +0,0 @@
1
- // src/validation-attributes.ts
2
- var VALIDATION_ATTR = {
3
- /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */
4
- name: "validation.name",
5
- /** Where validation ran: `http` | `event` | `message` | a custom label. */
6
- boundary: "validation.boundary",
7
- /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */
8
- mode: "validation.mode",
9
- /** Stable hash of the declared shape, when a JSON-schema projection is given. */
10
- hash: "validation.hash",
11
- /** `info` | `warning` | `error`. */
12
- severity: "validation.severity",
13
- /** Number of failing fields. */
14
- issueCount: "validation.issue.count",
15
- /** Comma-separated failing field paths (capped). Never contains values. */
16
- issuePaths: "validation.issue.paths",
17
- /** Comma-separated distinct issue codes (capped). Never contains values. */
18
- issueCodes: "validation.issue.codes"
19
- };
20
- var VALIDATION_METRICS = {
21
- /** Counter, labelled `{ boundary, validation, mode }`. */
22
- mismatches: "autotel.validation.mismatches"
23
- };
24
- var VALIDATION_ISSUE_CAP = 20;
25
-
26
- export { VALIDATION_ATTR, VALIDATION_ISSUE_CAP, VALIDATION_METRICS };
27
- //# sourceMappingURL=chunk-DCEDJQGG.js.map
28
- //# sourceMappingURL=chunk-DCEDJQGG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/validation-attributes.ts"],"names":[],"mappings":";AAcO,IAAM,eAAA,GAAkB;AAAA;AAAA,EAE7B,IAAA,EAAM,iBAAA;AAAA;AAAA,EAEN,QAAA,EAAU,qBAAA;AAAA;AAAA,EAEV,IAAA,EAAM,iBAAA;AAAA;AAAA,EAEN,IAAA,EAAM,iBAAA;AAAA;AAAA,EAEN,QAAA,EAAU,qBAAA;AAAA;AAAA,EAEV,UAAA,EAAY,wBAAA;AAAA;AAAA,EAEZ,UAAA,EAAY,wBAAA;AAAA;AAAA,EAEZ,UAAA,EAAY;AACd;AAKO,IAAM,kBAAA,GAAqB;AAAA;AAAA,EAEhC,UAAA,EAAY;AACd;AAGO,IAAM,oBAAA,GAAuB","file":"chunk-DCEDJQGG.js","sourcesContent":["/**\n * Validation telemetry wire constants — the single source of truth for the\n * `validation.*` span attributes and the `autotel.validation.mismatches` metric\n * emitted when an input payload (HTTP body, event, message) fails to match its\n * declared shape.\n *\n * Dependency-free and side-effect-free by design (mirrors `security-schema.ts`):\n * safe to import from anything that only needs the constant strings — a\n * dashboard, a CLI, an alert rule — without pulling in the OpenTelemetry SDK.\n *\n * These keys are a public API for the agents that query your telemetry. Treat a\n * rename here the way you'd treat a breaking change to any other contract.\n */\n\nexport const VALIDATION_ATTR = {\n /** Contract id of the validated boundary, e.g. `POST /orders`, `order.placed`. */\n name: 'validation.name',\n /** Where validation ran: `http` | `event` | `message` | a custom label. */\n boundary: 'validation.boundary',\n /** `observe` (recorded, request continues) or `reject` (recorded, then failed). */\n mode: 'validation.mode',\n /** Stable hash of the declared shape, when a JSON-schema projection is given. */\n hash: 'validation.hash',\n /** `info` | `warning` | `error`. */\n severity: 'validation.severity',\n /** Number of failing fields. */\n issueCount: 'validation.issue.count',\n /** Comma-separated failing field paths (capped). Never contains values. */\n issuePaths: 'validation.issue.paths',\n /** Comma-separated distinct issue codes (capped). Never contains values. */\n issueCodes: 'validation.issue.codes',\n} as const;\n\nexport type ValidationAttributeKey =\n (typeof VALIDATION_ATTR)[keyof typeof VALIDATION_ATTR];\n\nexport const VALIDATION_METRICS = {\n /** Counter, labelled `{ boundary, validation, mode }`. */\n mismatches: 'autotel.validation.mismatches',\n} as const;\n\n/** Max field paths / codes stamped onto a span, to bound attribute size. */\nexport const VALIDATION_ISSUE_CAP = 20;\n"]}
@@ -1,344 +0,0 @@
1
- import { TraceFlags } from '@opentelemetry/api';
2
-
3
- // src/sampling.ts
4
- var AUTOTEL_SAMPLING_TAIL_KEEP = "autotel.sampling.tail.keep";
5
- var AUTOTEL_SAMPLING_TAIL_EVALUATED = "autotel.sampling.tail.evaluated";
6
- var RandomSampler = class {
7
- constructor(sampleRate) {
8
- this.sampleRate = sampleRate;
9
- if (sampleRate < 0 || sampleRate > 1) {
10
- throw new Error("Sample rate must be between 0 and 1");
11
- }
12
- }
13
- sampleRate;
14
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
15
- shouldSample(_context) {
16
- return Math.random() < this.sampleRate;
17
- }
18
- };
19
- var AlwaysSampler = class {
20
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
- shouldSample(_context) {
22
- return true;
23
- }
24
- };
25
- var NeverSampler = class {
26
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
- shouldSample(_context) {
28
- return false;
29
- }
30
- };
31
- var AdaptiveSampler = class {
32
- baselineSampleRate;
33
- slowThresholdMs;
34
- alwaysSampleErrors;
35
- alwaysSampleSlow;
36
- linksBased;
37
- linksRate;
38
- logger;
39
- // Track whether we should sample this request
40
- samplingDecisions = /* @__PURE__ */ new WeakMap();
41
- // Track operation results to enable post-execution decision
42
- operationResults = /* @__PURE__ */ new WeakMap();
43
- constructor(options = {}) {
44
- this.baselineSampleRate = options.baselineSampleRate ?? 0.1;
45
- this.slowThresholdMs = options.slowThresholdMs ?? 1e3;
46
- this.alwaysSampleErrors = options.alwaysSampleErrors ?? true;
47
- this.alwaysSampleSlow = options.alwaysSampleSlow ?? true;
48
- this.linksBased = options.linksBased ?? false;
49
- this.linksRate = options.linksRate ?? 1;
50
- this.logger = options.logger;
51
- if (this.baselineSampleRate < 0 || this.baselineSampleRate > 1) {
52
- throw new Error("Baseline sample rate must be between 0 and 1");
53
- }
54
- if (this.linksRate < 0 || this.linksRate > 1) {
55
- throw new Error("Links rate must be between 0 and 1");
56
- }
57
- }
58
- needsTailSampling() {
59
- return true;
60
- }
61
- shouldSample(context) {
62
- const baselineDecision = Math.random() < this.baselineSampleRate;
63
- this.samplingDecisions.set(context.args, baselineDecision);
64
- return true;
65
- }
66
- /**
67
- * Check if any links point to sampled spans.
68
- *
69
- * A span is considered linked to a sampled span if any of its links
70
- * have trace_flags with the sampled bit set (0x01).
71
- *
72
- * @param links - Array of span links to check
73
- * @returns true if any linked span is sampled, false otherwise
74
- */
75
- hasSampledLink(links) {
76
- if (!links || links.length === 0) {
77
- return false;
78
- }
79
- return links.some(
80
- (link) => link.context && (link.context.traceFlags & TraceFlags.SAMPLED) !== 0
81
- );
82
- }
83
- /**
84
- * Re-evaluate sampling decision after operation completes
85
- *
86
- * This allows us to always capture errors and slow requests,
87
- * even if they weren't initially sampled.
88
- *
89
- * @param context - Sampling context
90
- * @param result - Operation result
91
- * @returns true if this operation should be kept (not discarded)
92
- */
93
- shouldKeepTrace(context, result) {
94
- const baselineDecision = this.samplingDecisions.get(context.args) ?? false;
95
- if (this.alwaysSampleErrors && !result.success) {
96
- if (!baselineDecision) {
97
- this.logger?.debug(
98
- {
99
- operation: context.operationName,
100
- error: result.error?.message
101
- },
102
- "Adaptive sampling: Keeping error trace"
103
- );
104
- }
105
- return true;
106
- }
107
- if (this.alwaysSampleSlow && result.duration >= this.slowThresholdMs) {
108
- if (!baselineDecision) {
109
- this.logger?.debug(
110
- {
111
- operation: context.operationName,
112
- duration: result.duration
113
- },
114
- "Adaptive sampling: Keeping slow trace"
115
- );
116
- }
117
- return true;
118
- }
119
- if (this.linksBased && context.links && this.hasSampledLink(context.links)) {
120
- const keepLinked = Math.random() < this.linksRate;
121
- if (keepLinked && !baselineDecision) {
122
- this.logger?.debug(
123
- {
124
- operation: context.operationName,
125
- linkCount: context.links.length
126
- },
127
- "Adaptive sampling: Keeping trace due to sampled link"
128
- );
129
- }
130
- return keepLinked;
131
- }
132
- return baselineDecision;
133
- }
134
- };
135
- var UserIdSampler = class {
136
- baselineSampleRate;
137
- alwaysSampleUsers;
138
- extractUserId;
139
- logger;
140
- constructor(options) {
141
- this.baselineSampleRate = options.baselineSampleRate ?? 0.1;
142
- this.alwaysSampleUsers = new Set(options.alwaysSampleUsers || []);
143
- this.extractUserId = options.extractUserId;
144
- this.logger = options.logger;
145
- }
146
- shouldSample(context) {
147
- const userId = this.extractUserId(context.args);
148
- if (userId && this.alwaysSampleUsers.has(userId)) {
149
- this.logger?.debug(
150
- {
151
- operation: context.operationName,
152
- userId
153
- },
154
- "Sampling user request"
155
- );
156
- return true;
157
- }
158
- if (userId) {
159
- const hash = this.hashString(userId);
160
- return hash < this.baselineSampleRate;
161
- }
162
- return Math.random() < this.baselineSampleRate;
163
- }
164
- /**
165
- * Add user IDs to always-sample list
166
- */
167
- addAlwaysSampleUsers(...userIds) {
168
- for (const userId of userIds) {
169
- this.alwaysSampleUsers.add(userId);
170
- }
171
- }
172
- /**
173
- * Remove user IDs from always-sample list
174
- */
175
- removeAlwaysSampleUsers(...userIds) {
176
- for (const userId of userIds) {
177
- this.alwaysSampleUsers.delete(userId);
178
- }
179
- }
180
- /**
181
- * Simple hash function for consistent user sampling
182
- */
183
- hashString(str) {
184
- let hash = 0;
185
- for (let i = 0; i < str.length; i++) {
186
- const char = str.codePointAt(i) ?? 0;
187
- hash = (hash << 5) - hash + char;
188
- hash = hash & hash;
189
- }
190
- return Math.abs(hash) / 2147483647;
191
- }
192
- };
193
- var CompositeSampler = class {
194
- constructor(samplers) {
195
- this.samplers = samplers;
196
- if (samplers.length === 0) {
197
- throw new Error("CompositeSampler requires at least one child sampler");
198
- }
199
- }
200
- samplers;
201
- shouldSample(context) {
202
- return this.samplers.some((sampler) => sampler.shouldSample(context));
203
- }
204
- };
205
- var FeatureFlagSampler = class {
206
- baselineSampleRate;
207
- alwaysSampleFlags;
208
- extractFlags;
209
- logger;
210
- constructor(options) {
211
- this.baselineSampleRate = options.baselineSampleRate ?? 0.1;
212
- this.alwaysSampleFlags = new Set(options.alwaysSampleFlags || []);
213
- this.extractFlags = options.extractFlags;
214
- this.logger = options.logger;
215
- }
216
- shouldSample(context) {
217
- const flags = this.extractFlags(context.args, context.metadata);
218
- if (flags && flags.some((flag) => this.alwaysSampleFlags.has(flag))) {
219
- this.logger?.debug(
220
- {
221
- operation: context.operationName,
222
- flags
223
- },
224
- "Sampling feature flag request"
225
- );
226
- return true;
227
- }
228
- return Math.random() < this.baselineSampleRate;
229
- }
230
- /**
231
- * Add feature flags to always-sample list
232
- */
233
- addAlwaysSampleFlags(...flags) {
234
- for (const flag of flags) {
235
- this.alwaysSampleFlags.add(flag);
236
- }
237
- }
238
- /**
239
- * Remove feature flags from always-sample list
240
- */
241
- removeAlwaysSampleFlags(...flags) {
242
- for (const flag of flags) {
243
- this.alwaysSampleFlags.delete(flag);
244
- }
245
- }
246
- };
247
- var samplingPresets = {
248
- /** Capture everything — best for local development and debugging */
249
- development: () => new AlwaysSampler(),
250
- /** Only bad outcomes — zero baseline, errors always kept */
251
- errorsOnly: () => new AdaptiveSampler({
252
- baselineSampleRate: 0,
253
- alwaysSampleErrors: true
254
- }),
255
- /**
256
- * Balanced production defaults — 10% baseline + errors + slow traces.
257
- * Pass overrides to tune (uses the same option names as AdaptiveSampler).
258
- */
259
- production: (overrides) => new AdaptiveSampler({
260
- baselineSampleRate: 0.1,
261
- alwaysSampleErrors: true,
262
- alwaysSampleSlow: true,
263
- slowThresholdMs: 1e3,
264
- ...overrides
265
- }),
266
- /** Disable sampling entirely */
267
- off: () => new NeverSampler()
268
- };
269
- function resolveSamplingPreset(preset) {
270
- switch (preset) {
271
- case "development":
272
- return samplingPresets.development();
273
- case "errors-only":
274
- return samplingPresets.errorsOnly();
275
- case "production":
276
- return samplingPresets.production();
277
- case "off":
278
- return samplingPresets.off();
279
- default:
280
- throw new Error(
281
- `Unknown sampling preset: "${preset}". Valid presets: development, errors-only, production, off`
282
- );
283
- }
284
- }
285
- function createLinkFromHeaders(headers, attributes) {
286
- const traceparent = headers.traceparent || headers["traceparent"];
287
- if (!traceparent) {
288
- return null;
289
- }
290
- const spanContext = parseTraceparent(traceparent);
291
- if (!spanContext || !isValidSpanContext(spanContext)) {
292
- return null;
293
- }
294
- return {
295
- context: spanContext,
296
- attributes: attributes ?? {}
297
- };
298
- }
299
- function extractLinksFromBatch(messages, headersKey = "headers") {
300
- const links = [];
301
- for (const msg of messages) {
302
- const msgHeaders = msg[headersKey];
303
- if (msgHeaders && typeof msgHeaders === "object" && msgHeaders !== null) {
304
- const link = createLinkFromHeaders(msgHeaders, {
305
- "messaging.batch.message_index": links.length
306
- });
307
- if (link) {
308
- links.push(link);
309
- }
310
- }
311
- }
312
- return links;
313
- }
314
- function parseTraceparent(traceparent) {
315
- const TRACEPARENT_REGEX = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i;
316
- const match = traceparent.match(TRACEPARENT_REGEX);
317
- if (!match || match.length < 5) {
318
- return null;
319
- }
320
- const version = match[1];
321
- const traceId = match[2];
322
- const spanId = match[3];
323
- const flags = match[4];
324
- if (!version || !traceId || !spanId || !flags) {
325
- return null;
326
- }
327
- if (version === "ff") {
328
- return null;
329
- }
330
- return {
331
- traceId,
332
- spanId,
333
- traceFlags: Number.parseInt(flags, 16),
334
- isRemote: true
335
- };
336
- }
337
- function isValidSpanContext(spanContext) {
338
- if (!spanContext) return false;
339
- return spanContext.traceId !== "00000000000000000000000000000000" && spanContext.spanId !== "0000000000000000";
340
- }
341
-
342
- export { AUTOTEL_SAMPLING_TAIL_EVALUATED, AUTOTEL_SAMPLING_TAIL_KEEP, AdaptiveSampler, AlwaysSampler, CompositeSampler, FeatureFlagSampler, NeverSampler, RandomSampler, UserIdSampler, createLinkFromHeaders, extractLinksFromBatch, resolveSamplingPreset, samplingPresets };
343
- //# sourceMappingURL=chunk-DPSA4QLA.js.map
344
- //# sourceMappingURL=chunk-DPSA4QLA.js.map