autotel 3.5.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/dist/attribute-redacting-processor-DtTS9xxh.d.cts +175 -0
  2. package/dist/attribute-redacting-processor-DtTS9xxh.d.cts.map +1 -0
  3. package/dist/attribute-redacting-processor-DtTS9xxh.d.ts +175 -0
  4. package/dist/attribute-redacting-processor-DtTS9xxh.d.ts.map +1 -0
  5. package/dist/attribute-redacting-processor.cjs +374 -33
  6. package/dist/attribute-redacting-processor.cjs.map +1 -1
  7. package/dist/attribute-redacting-processor.d.cts +2 -207
  8. package/dist/attribute-redacting-processor.d.ts +2 -207
  9. package/dist/attribute-redacting-processor.js +368 -2
  10. package/dist/attribute-redacting-processor.js.map +1 -1
  11. package/dist/attributes-D3etyRVc.cjs +713 -0
  12. package/dist/attributes-D3etyRVc.cjs.map +1 -0
  13. package/dist/attributes-ksn4HVbd.js +600 -0
  14. package/dist/attributes-ksn4HVbd.js.map +1 -0
  15. package/dist/attributes.cjs +21 -85
  16. package/dist/attributes.d.cts +2 -20
  17. package/dist/attributes.d.ts +2 -20
  18. package/dist/attributes.js +3 -5
  19. package/dist/auto.cjs +50 -28
  20. package/dist/auto.cjs.map +1 -1
  21. package/dist/auto.d.cts +1 -2
  22. package/dist/auto.d.ts +1 -2
  23. package/dist/auto.js +49 -23
  24. package/dist/auto.js.map +1 -1
  25. package/dist/business-baggage.cjs +357 -13
  26. package/dist/business-baggage.cjs.map +1 -1
  27. package/dist/business-baggage.d.cts +106 -139
  28. package/dist/business-baggage.d.cts.map +1 -0
  29. package/dist/business-baggage.d.ts +106 -139
  30. package/dist/business-baggage.d.ts.map +1 -0
  31. package/dist/business-baggage.js +357 -2
  32. package/dist/business-baggage.js.map +1 -1
  33. package/dist/canonical-log-line-processor--RlFDHhm.cjs +377 -0
  34. package/dist/canonical-log-line-processor--RlFDHhm.cjs.map +1 -0
  35. package/dist/canonical-log-line-processor-BcRuAdRk.d.ts +147 -0
  36. package/dist/canonical-log-line-processor-BcRuAdRk.d.ts.map +1 -0
  37. package/dist/canonical-log-line-processor-DbBQT5vY.js +366 -0
  38. package/dist/canonical-log-line-processor-DbBQT5vY.js.map +1 -0
  39. package/dist/canonical-log-line-processor-xvjMgtpF.d.cts +147 -0
  40. package/dist/canonical-log-line-processor-xvjMgtpF.d.cts.map +1 -0
  41. package/dist/config.cjs +118 -22
  42. package/dist/config.cjs.map +1 -1
  43. package/dist/config.d.cts +33 -45
  44. package/dist/config.d.cts.map +1 -0
  45. package/dist/config.d.ts +33 -45
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +116 -3
  48. package/dist/config.js.map +1 -1
  49. package/dist/correlated-events-Bzh5y-UB.js +28 -0
  50. package/dist/correlated-events-Bzh5y-UB.js.map +1 -0
  51. package/dist/correlated-events-kSwLo3mi.cjs +34 -0
  52. package/dist/correlated-events-kSwLo3mi.cjs.map +1 -0
  53. package/dist/correlation-id.cjs +11 -53
  54. package/dist/correlation-id.d.cts +6 -5
  55. package/dist/correlation-id.d.cts.map +1 -0
  56. package/dist/correlation-id.d.ts +6 -5
  57. package/dist/correlation-id.d.ts.map +1 -0
  58. package/dist/correlation-id.js +3 -16
  59. package/dist/db.cjs +244 -209
  60. package/dist/db.cjs.map +1 -1
  61. package/dist/db.d.cts +28 -26
  62. package/dist/db.d.cts.map +1 -0
  63. package/dist/db.d.ts +28 -26
  64. package/dist/db.d.ts.map +1 -0
  65. package/dist/db.js +243 -207
  66. package/dist/db.js.map +1 -1
  67. package/dist/decorators.cjs +39 -65
  68. package/dist/decorators.cjs.map +1 -1
  69. package/dist/decorators.d.cts +10 -37
  70. package/dist/decorators.d.cts.map +1 -0
  71. package/dist/decorators.d.ts +10 -37
  72. package/dist/decorators.d.ts.map +1 -0
  73. package/dist/decorators.js +38 -63
  74. package/dist/decorators.js.map +1 -1
  75. package/dist/define-event-CreknLm3.d.ts +25 -0
  76. package/dist/define-event-CreknLm3.d.ts.map +1 -0
  77. package/dist/define-event-HZRizPwz.d.cts +25 -0
  78. package/dist/define-event-HZRizPwz.d.cts.map +1 -0
  79. package/dist/drain-pipeline.cjs +111 -9
  80. package/dist/drain-pipeline.cjs.map +1 -1
  81. package/dist/drain-pipeline.d.cts +27 -32
  82. package/dist/drain-pipeline.d.cts.map +1 -0
  83. package/dist/drain-pipeline.d.ts +27 -32
  84. package/dist/drain-pipeline.d.ts.map +1 -0
  85. package/dist/drain-pipeline.js +111 -2
  86. package/dist/drain-pipeline.js.map +1 -1
  87. package/dist/enrichers.cjs +59 -66
  88. package/dist/enrichers.cjs.map +1 -1
  89. package/dist/enrichers.d.cts +15 -13
  90. package/dist/enrichers.d.cts.map +1 -0
  91. package/dist/enrichers.d.ts +15 -13
  92. package/dist/enrichers.d.ts.map +1 -0
  93. package/dist/enrichers.js +58 -65
  94. package/dist/enrichers.js.map +1 -1
  95. package/dist/event-Dlqr4ZNL.cjs +778 -0
  96. package/dist/event-Dlqr4ZNL.cjs.map +1 -0
  97. package/dist/event-_58ryBjh.js +761 -0
  98. package/dist/event-_58ryBjh.js.map +1 -0
  99. package/dist/event-subscriber-D1XLkPzi.d.cts +223 -0
  100. package/dist/event-subscriber-D1XLkPzi.d.cts.map +1 -0
  101. package/dist/event-subscriber-D1XLkPzi.d.ts +223 -0
  102. package/dist/event-subscriber-D1XLkPzi.d.ts.map +1 -0
  103. package/dist/event-subscriber.cjs +0 -6
  104. package/dist/event-subscriber.d.cts +2 -221
  105. package/dist/event-subscriber.d.ts +2 -221
  106. package/dist/event-subscriber.js +1 -3
  107. package/dist/event-testing-BqRnI0z4.d.cts +106 -0
  108. package/dist/event-testing-BqRnI0z4.d.cts.map +1 -0
  109. package/dist/event-testing-CfFs3to2.d.ts +106 -0
  110. package/dist/event-testing-CfFs3to2.d.ts.map +1 -0
  111. package/dist/event-testing.cjs +93 -17
  112. package/dist/event-testing.cjs.map +1 -1
  113. package/dist/event-testing.d.cts +2 -110
  114. package/dist/event-testing.d.ts +2 -110
  115. package/dist/event-testing.js +91 -2
  116. package/dist/event-testing.js.map +1 -1
  117. package/dist/event.cjs +5 -36
  118. package/dist/event.d.cts +295 -340
  119. package/dist/event.d.cts.map +1 -0
  120. package/dist/event.d.ts +295 -340
  121. package/dist/event.d.ts.map +1 -0
  122. package/dist/event.js +3 -20
  123. package/dist/exporters.cjs +12 -16
  124. package/dist/exporters.d.cts +86 -111
  125. package/dist/exporters.d.cts.map +1 -0
  126. package/dist/exporters.d.ts +86 -111
  127. package/dist/exporters.d.ts.map +1 -0
  128. package/dist/exporters.js +4 -4
  129. package/dist/filtering-span-processor-B8R8B7Uk.d.cts +59 -0
  130. package/dist/filtering-span-processor-B8R8B7Uk.d.cts.map +1 -0
  131. package/dist/filtering-span-processor-B8R8B7Uk.d.ts +59 -0
  132. package/dist/filtering-span-processor-B8R8B7Uk.d.ts.map +1 -0
  133. package/dist/filtering-span-processor.cjs +49 -9
  134. package/dist/filtering-span-processor.cjs.map +1 -1
  135. package/dist/filtering-span-processor.d.cts +2 -80
  136. package/dist/filtering-span-processor.d.ts +2 -80
  137. package/dist/filtering-span-processor.js +49 -2
  138. package/dist/filtering-span-processor.js.map +1 -1
  139. package/dist/functional-BGkT8J-h.js +1265 -0
  140. package/dist/functional-BGkT8J-h.js.map +1 -0
  141. package/dist/functional-C4CzoVrX.cjs +1312 -0
  142. package/dist/functional-C4CzoVrX.cjs.map +1 -0
  143. package/dist/functional.cjs +11 -56
  144. package/dist/functional.d.cts +96 -97
  145. package/dist/functional.d.cts.map +1 -0
  146. package/dist/functional.d.ts +96 -97
  147. package/dist/functional.d.ts.map +1 -0
  148. package/dist/functional.js +3 -19
  149. package/dist/http.cjs +276 -175
  150. package/dist/http.cjs.map +1 -1
  151. package/dist/http.d.cts +17 -37
  152. package/dist/http.d.cts.map +1 -0
  153. package/dist/http.d.ts +17 -37
  154. package/dist/http.d.ts.map +1 -0
  155. package/dist/http.js +275 -173
  156. package/dist/http.js.map +1 -1
  157. package/dist/index-CX0aG1Uh.d.ts +708 -0
  158. package/dist/index-CX0aG1Uh.d.ts.map +1 -0
  159. package/dist/index-DIWZFKUS.d.cts +708 -0
  160. package/dist/index-DIWZFKUS.d.cts.map +1 -0
  161. package/dist/index.cjs +1050 -1184
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +401 -570
  164. package/dist/index.d.cts.map +1 -0
  165. package/dist/index.d.ts +401 -570
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +913 -725
  168. package/dist/index.js.map +1 -1
  169. package/dist/init-CNp-ee80.d.cts +1157 -0
  170. package/dist/init-CNp-ee80.d.cts.map +1 -0
  171. package/dist/init-Ch6t7MNI.js +1015 -0
  172. package/dist/init-Ch6t7MNI.js.map +1 -0
  173. package/dist/init-DJQOdVlN.d.ts +1157 -0
  174. package/dist/init-DJQOdVlN.d.ts.map +1 -0
  175. package/dist/init-DvapOXCc.cjs +1092 -0
  176. package/dist/init-DvapOXCc.cjs.map +1 -0
  177. package/dist/instrumentation.cjs +159 -185
  178. package/dist/instrumentation.cjs.map +1 -1
  179. package/dist/instrumentation.d.cts +42 -40
  180. package/dist/instrumentation.d.cts.map +1 -0
  181. package/dist/instrumentation.d.ts +42 -40
  182. package/dist/instrumentation.d.ts.map +1 -0
  183. package/dist/instrumentation.js +158 -183
  184. package/dist/instrumentation.js.map +1 -1
  185. package/dist/logger-BauSUhUv.d.cts +313 -0
  186. package/dist/logger-BauSUhUv.d.cts.map +1 -0
  187. package/dist/logger-BauSUhUv.d.ts +313 -0
  188. package/dist/logger-BauSUhUv.d.ts.map +1 -0
  189. package/dist/logger.cjs +225 -25
  190. package/dist/logger.cjs.map +1 -1
  191. package/dist/logger.d.cts +2 -348
  192. package/dist/logger.d.ts +2 -348
  193. package/dist/logger.js +204 -4
  194. package/dist/logger.js.map +1 -1
  195. package/dist/messaging-adapters.cjs +292 -187
  196. package/dist/messaging-adapters.cjs.map +1 -1
  197. package/dist/messaging-adapters.d.cts +28 -66
  198. package/dist/messaging-adapters.d.cts.map +1 -0
  199. package/dist/messaging-adapters.d.ts +28 -66
  200. package/dist/messaging-adapters.d.ts.map +1 -0
  201. package/dist/messaging-adapters.js +291 -185
  202. package/dist/messaging-adapters.js.map +1 -1
  203. package/dist/messaging-testing.cjs +306 -372
  204. package/dist/messaging-testing.cjs.map +1 -1
  205. package/dist/messaging-testing.d.cts +194 -223
  206. package/dist/messaging-testing.d.cts.map +1 -0
  207. package/dist/messaging-testing.d.ts +194 -223
  208. package/dist/messaging-testing.d.ts.map +1 -0
  209. package/dist/messaging-testing.js +305 -371
  210. package/dist/messaging-testing.js.map +1 -1
  211. package/dist/messaging.cjs +757 -35
  212. package/dist/messaging.cjs.map +1 -1
  213. package/dist/messaging.d.cts +603 -644
  214. package/dist/messaging.d.cts.map +1 -0
  215. package/dist/messaging.d.ts +603 -644
  216. package/dist/messaging.d.ts.map +1 -0
  217. package/dist/messaging.js +756 -20
  218. package/dist/messaging.js.map +1 -1
  219. package/dist/metric-helpers.cjs +27 -27
  220. package/dist/metric-helpers.cjs.map +1 -1
  221. package/dist/metric-helpers.d.cts +4 -2
  222. package/dist/metric-helpers.d.cts.map +1 -0
  223. package/dist/metric-helpers.d.ts +4 -2
  224. package/dist/metric-helpers.d.ts.map +1 -0
  225. package/dist/metric-helpers.js +24 -4
  226. package/dist/metric-helpers.js.map +1 -1
  227. package/dist/metric-testing-DXdK3-Q3.d.ts +106 -0
  228. package/dist/metric-testing-DXdK3-Q3.d.ts.map +1 -0
  229. package/dist/metric-testing-MxvzChDp.d.cts +106 -0
  230. package/dist/metric-testing-MxvzChDp.d.cts.map +1 -0
  231. package/dist/metric-testing.cjs +93 -17
  232. package/dist/metric-testing.cjs.map +1 -1
  233. package/dist/metric-testing.d.cts +2 -110
  234. package/dist/metric-testing.d.ts +2 -110
  235. package/dist/metric-testing.js +91 -2
  236. package/dist/metric-testing.js.map +1 -1
  237. package/dist/metric.cjs +306 -22
  238. package/dist/metric.cjs.map +1 -1
  239. package/dist/metric.d.cts +170 -198
  240. package/dist/metric.d.cts.map +1 -0
  241. package/dist/metric.d.ts +170 -198
  242. package/dist/metric.d.ts.map +1 -0
  243. package/dist/metric.js +277 -7
  244. package/dist/metric.js.map +1 -1
  245. package/dist/node-require-DF5QBX6z.cjs +99 -0
  246. package/dist/node-require-DF5QBX6z.cjs.map +1 -0
  247. package/dist/node-require-Db1oDpLj.js +88 -0
  248. package/dist/node-require-Db1oDpLj.js.map +1 -0
  249. package/dist/operation-context-C-2hmmtP.js +59 -0
  250. package/dist/operation-context-C-2hmmtP.js.map +1 -0
  251. package/dist/operation-context-n4_obUwq.cjs +70 -0
  252. package/dist/operation-context-n4_obUwq.cjs.map +1 -0
  253. package/dist/parse-error.cjs +55 -9
  254. package/dist/parse-error.cjs.map +1 -1
  255. package/dist/parse-error.d.cts +12 -10
  256. package/dist/parse-error.d.cts.map +1 -0
  257. package/dist/parse-error.d.ts +12 -10
  258. package/dist/parse-error.d.ts.map +1 -0
  259. package/dist/parse-error.js +55 -2
  260. package/dist/parse-error.js.map +1 -1
  261. package/dist/pretty-console-exporter-CMzlrRNg.cjs +232 -0
  262. package/dist/pretty-console-exporter-CMzlrRNg.cjs.map +1 -0
  263. package/dist/pretty-console-exporter-DqKl_q9z.js +227 -0
  264. package/dist/pretty-console-exporter-DqKl_q9z.js.map +1 -0
  265. package/dist/processors.cjs +13 -17
  266. package/dist/processors.d.cts +3 -171
  267. package/dist/processors.d.ts +3 -171
  268. package/dist/processors.js +4 -4
  269. package/dist/register.cjs +35 -6
  270. package/dist/register.cjs.map +1 -1
  271. package/dist/register.d.cts +1 -2
  272. package/dist/register.d.ts +1 -2
  273. package/dist/register.js +36 -3
  274. package/dist/register.js.map +1 -1
  275. package/dist/registry-DfXA3R1L.js +184 -0
  276. package/dist/registry-DfXA3R1L.js.map +1 -0
  277. package/dist/registry-JZg2J3RZ.cjs +334 -0
  278. package/dist/registry-JZg2J3RZ.cjs.map +1 -0
  279. package/dist/sampling-CR0Va1VB.d.ts +351 -0
  280. package/dist/sampling-CR0Va1VB.d.ts.map +1 -0
  281. package/dist/sampling-DfYhDJij.d.cts +351 -0
  282. package/dist/sampling-DfYhDJij.d.cts.map +1 -0
  283. package/dist/sampling.cjs +452 -60
  284. package/dist/sampling.cjs.map +1 -1
  285. package/dist/sampling.d.cts +2 -379
  286. package/dist/sampling.d.ts +2 -379
  287. package/dist/sampling.js +441 -5
  288. package/dist/sampling.js.map +1 -1
  289. package/dist/security-schema.cjs +65 -46
  290. package/dist/security-schema.cjs.map +1 -1
  291. package/dist/security-schema.d.cts +23 -26
  292. package/dist/security-schema.d.cts.map +1 -0
  293. package/dist/security-schema.d.ts +23 -26
  294. package/dist/security-schema.d.ts.map +1 -0
  295. package/dist/security-schema.js +64 -45
  296. package/dist/security-schema.js.map +1 -1
  297. package/dist/semantic-conventions-FhSxv-bK.d.cts +32 -0
  298. package/dist/semantic-conventions-FhSxv-bK.d.cts.map +1 -0
  299. package/dist/semantic-conventions-FhSxv-bK.d.ts +32 -0
  300. package/dist/semantic-conventions-FhSxv-bK.d.ts.map +1 -0
  301. package/dist/semantic-conventions.cjs +15 -26
  302. package/dist/semantic-conventions.cjs.map +1 -1
  303. package/dist/semantic-conventions.d.cts +2 -29
  304. package/dist/semantic-conventions.d.ts +2 -29
  305. package/dist/semantic-conventions.js +12 -3
  306. package/dist/semantic-conventions.js.map +1 -1
  307. package/dist/semantic-helpers.cjs +440 -38
  308. package/dist/semantic-helpers.cjs.map +1 -1
  309. package/dist/semantic-helpers.d.cts +38 -45
  310. package/dist/semantic-helpers.d.cts.map +1 -0
  311. package/dist/semantic-helpers.d.ts +38 -45
  312. package/dist/semantic-helpers.d.ts.map +1 -0
  313. package/dist/semantic-helpers.js +438 -19
  314. package/dist/semantic-helpers.js.map +1 -1
  315. package/dist/span-name-normalizer-8ZOGJuwv.d.cts +70 -0
  316. package/dist/span-name-normalizer-8ZOGJuwv.d.cts.map +1 -0
  317. package/dist/span-name-normalizer-8ZOGJuwv.d.ts +70 -0
  318. package/dist/span-name-normalizer-8ZOGJuwv.d.ts.map +1 -0
  319. package/dist/span-name-normalizer.cjs +95 -17
  320. package/dist/span-name-normalizer.cjs.map +1 -1
  321. package/dist/span-name-normalizer.d.cts +2 -94
  322. package/dist/span-name-normalizer.d.ts +2 -94
  323. package/dist/span-name-normalizer.js +93 -2
  324. package/dist/span-name-normalizer.js.map +1 -1
  325. package/dist/stable-hash-BNTMrmdB.cjs +28 -0
  326. package/dist/stable-hash-BNTMrmdB.cjs.map +1 -0
  327. package/dist/stable-hash-Cg5cT34Q.js +23 -0
  328. package/dist/stable-hash-Cg5cT34Q.js.map +1 -0
  329. package/dist/structured-error-9--cxBay.js +143 -0
  330. package/dist/structured-error-9--cxBay.js.map +1 -0
  331. package/dist/structured-error-CHg7DoIQ.cjs +178 -0
  332. package/dist/structured-error-CHg7DoIQ.cjs.map +1 -0
  333. package/dist/tail-sampling-processor.cjs +26 -13
  334. package/dist/tail-sampling-processor.cjs.map +1 -1
  335. package/dist/tail-sampling-processor.d.cts +11 -23
  336. package/dist/tail-sampling-processor.d.cts.map +1 -0
  337. package/dist/tail-sampling-processor.d.ts +11 -23
  338. package/dist/tail-sampling-processor.d.ts.map +1 -0
  339. package/dist/tail-sampling-processor.js +27 -6
  340. package/dist/tail-sampling-processor.js.map +1 -1
  341. package/dist/test-span-collector.cjs +70 -72
  342. package/dist/test-span-collector.cjs.map +1 -1
  343. package/dist/test-span-collector.d.cts +25 -43
  344. package/dist/test-span-collector.d.cts.map +1 -0
  345. package/dist/test-span-collector.d.ts +25 -43
  346. package/dist/test-span-collector.d.ts.map +1 -0
  347. package/dist/test-span-collector.js +69 -70
  348. package/dist/test-span-collector.js.map +1 -1
  349. package/dist/testing.cjs +389 -278
  350. package/dist/testing.cjs.map +1 -1
  351. package/dist/testing.d.cts +39 -62
  352. package/dist/testing.d.cts.map +1 -0
  353. package/dist/testing.d.ts +39 -62
  354. package/dist/testing.d.ts.map +1 -0
  355. package/dist/testing.js +386 -265
  356. package/dist/testing.js.map +1 -1
  357. package/dist/trace-context-Cijqoi6e.d.cts +212 -0
  358. package/dist/trace-context-Cijqoi6e.d.cts.map +1 -0
  359. package/dist/trace-context-Cijqoi6e.d.ts +212 -0
  360. package/dist/trace-context-Cijqoi6e.d.ts.map +1 -0
  361. package/dist/trace-helpers.cjs +634 -54
  362. package/dist/trace-helpers.cjs.map +1 -1
  363. package/dist/trace-helpers.d.cts +17 -49
  364. package/dist/trace-helpers.d.cts.map +1 -0
  365. package/dist/trace-helpers.d.ts +17 -49
  366. package/dist/trace-helpers.d.ts.map +1 -0
  367. package/dist/trace-helpers.js +624 -3
  368. package/dist/trace-helpers.js.map +1 -1
  369. package/dist/tracer-provider.cjs +227 -16
  370. package/dist/tracer-provider.cjs.map +1 -1
  371. package/dist/tracer-provider.d.cts +5 -4
  372. package/dist/tracer-provider.d.cts.map +1 -0
  373. package/dist/tracer-provider.d.ts +5 -4
  374. package/dist/tracer-provider.d.ts.map +1 -0
  375. package/dist/tracer-provider.js +227 -2
  376. package/dist/tracer-provider.js.map +1 -1
  377. package/dist/track-3HY4NGV-.cjs +1212 -0
  378. package/dist/track-3HY4NGV-.cjs.map +1 -0
  379. package/dist/track-nsKVy-pj.js +1111 -0
  380. package/dist/track-nsKVy-pj.js.map +1 -0
  381. package/dist/validate.cjs +201 -0
  382. package/dist/validate.cjs.map +1 -0
  383. package/dist/validate.d.cts +105 -0
  384. package/dist/validate.d.cts.map +1 -0
  385. package/dist/validate.d.ts +105 -0
  386. package/dist/validate.d.ts.map +1 -0
  387. package/dist/validate.js +197 -0
  388. package/dist/validate.js.map +1 -0
  389. package/dist/validation-attributes.cjs +45 -0
  390. package/dist/validation-attributes.cjs.map +1 -0
  391. package/dist/validation-attributes.d.cts +33 -0
  392. package/dist/validation-attributes.d.cts.map +1 -0
  393. package/dist/validation-attributes.d.ts +33 -0
  394. package/dist/validation-attributes.d.ts.map +1 -0
  395. package/dist/validation-attributes.js +41 -0
  396. package/dist/validation-attributes.js.map +1 -0
  397. package/dist/webhook.cjs +286 -255
  398. package/dist/webhook.cjs.map +1 -1
  399. package/dist/webhook.d.cts +157 -192
  400. package/dist/webhook.d.cts.map +1 -0
  401. package/dist/webhook.d.ts +157 -192
  402. package/dist/webhook.d.ts.map +1 -0
  403. package/dist/webhook.js +285 -253
  404. package/dist/webhook.js.map +1 -1
  405. package/dist/workflow-distributed.cjs +498 -411
  406. package/dist/workflow-distributed.cjs.map +1 -1
  407. package/dist/workflow-distributed.d.cts +163 -173
  408. package/dist/workflow-distributed.d.cts.map +1 -0
  409. package/dist/workflow-distributed.d.ts +163 -173
  410. package/dist/workflow-distributed.d.ts.map +1 -0
  411. package/dist/workflow-distributed.js +497 -409
  412. package/dist/workflow-distributed.js.map +1 -1
  413. package/dist/workflow.cjs +405 -39
  414. package/dist/workflow.cjs.map +1 -1
  415. package/dist/workflow.d.cts +78 -131
  416. package/dist/workflow.d.cts.map +1 -0
  417. package/dist/workflow.d.ts +78 -131
  418. package/dist/workflow.d.ts.map +1 -0
  419. package/dist/workflow.js +403 -20
  420. package/dist/workflow.js.map +1 -1
  421. package/dist/yaml-config-B3dQ82GR.cjs +272 -0
  422. package/dist/yaml-config-B3dQ82GR.cjs.map +1 -0
  423. package/dist/yaml-config.cjs +5 -24
  424. package/dist/yaml-config.d.cts +30 -64
  425. package/dist/yaml-config.d.cts.map +1 -0
  426. package/dist/yaml-config.d.ts +30 -64
  427. package/dist/yaml-config.d.ts.map +1 -0
  428. package/dist/yaml-config.js +226 -7
  429. package/dist/yaml-config.js.map +1 -1
  430. package/package.json +14 -4
  431. package/src/define-event.ts +2 -21
  432. package/src/index.ts +3 -0
  433. package/src/request-logger.test.ts +53 -1
  434. package/src/request-logger.ts +58 -0
  435. package/src/stable-hash.ts +27 -0
  436. package/src/validate.test.ts +287 -0
  437. package/src/validate.ts +307 -0
  438. package/src/validation-attributes.ts +43 -0
  439. package/dist/attributes.cjs.map +0 -1
  440. package/dist/attributes.js.map +0 -1
  441. package/dist/chunk-2ZKEORFN.cjs +0 -14
  442. package/dist/chunk-2ZKEORFN.cjs.map +0 -1
  443. package/dist/chunk-3QXBFGKP.js +0 -344
  444. package/dist/chunk-3QXBFGKP.js.map +0 -1
  445. package/dist/chunk-454CH4OV.js +0 -744
  446. package/dist/chunk-454CH4OV.js.map +0 -1
  447. package/dist/chunk-4A53YIAX.js +0 -180
  448. package/dist/chunk-4A53YIAX.js.map +0 -1
  449. package/dist/chunk-4IFSYQVX.js +0 -337
  450. package/dist/chunk-4IFSYQVX.js.map +0 -1
  451. package/dist/chunk-4P6ZOARG.cjs +0 -33
  452. package/dist/chunk-4P6ZOARG.cjs.map +0 -1
  453. package/dist/chunk-55ER2KD5.js +0 -228
  454. package/dist/chunk-55ER2KD5.js.map +0 -1
  455. package/dist/chunk-5ZN622AO.js +0 -73
  456. package/dist/chunk-5ZN622AO.js.map +0 -1
  457. package/dist/chunk-6S5RUKU3.cjs +0 -347
  458. package/dist/chunk-6S5RUKU3.cjs.map +0 -1
  459. package/dist/chunk-6UQRVUN3.js +0 -222
  460. package/dist/chunk-6UQRVUN3.js.map +0 -1
  461. package/dist/chunk-7552UTQW.js +0 -11
  462. package/dist/chunk-7552UTQW.js.map +0 -1
  463. package/dist/chunk-7EQ4G4SI.cjs +0 -146
  464. package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
  465. package/dist/chunk-7SAWIN74.js +0 -285
  466. package/dist/chunk-7SAWIN74.js.map +0 -1
  467. package/dist/chunk-A4E5AQFK.js +0 -30
  468. package/dist/chunk-A4E5AQFK.js.map +0 -1
  469. package/dist/chunk-AC5GNZKB.cjs +0 -344
  470. package/dist/chunk-AC5GNZKB.cjs.map +0 -1
  471. package/dist/chunk-ALPYR2GC.js +0 -1061
  472. package/dist/chunk-ALPYR2GC.js.map +0 -1
  473. package/dist/chunk-BZHG5IZ4.js +0 -73
  474. package/dist/chunk-BZHG5IZ4.js.map +0 -1
  475. package/dist/chunk-CEAQK2QY.cjs +0 -32
  476. package/dist/chunk-CEAQK2QY.cjs.map +0 -1
  477. package/dist/chunk-CMHVQR6P.js +0 -170
  478. package/dist/chunk-CMHVQR6P.js.map +0 -1
  479. package/dist/chunk-CU6IDACR.cjs +0 -224
  480. package/dist/chunk-CU6IDACR.cjs.map +0 -1
  481. package/dist/chunk-DPSA4QLA.js +0 -344
  482. package/dist/chunk-DPSA4QLA.js.map +0 -1
  483. package/dist/chunk-DQEHQNQE.js +0 -795
  484. package/dist/chunk-DQEHQNQE.js.map +0 -1
  485. package/dist/chunk-ESLWRGAG.cjs +0 -92
  486. package/dist/chunk-ESLWRGAG.cjs.map +0 -1
  487. package/dist/chunk-ESMHTKLJ.cjs +0 -206
  488. package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
  489. package/dist/chunk-FGNDN2FD.cjs +0 -1242
  490. package/dist/chunk-FGNDN2FD.cjs.map +0 -1
  491. package/dist/chunk-FU6R566Y.cjs +0 -236
  492. package/dist/chunk-FU6R566Y.cjs.map +0 -1
  493. package/dist/chunk-GBFTC7Q7.cjs +0 -837
  494. package/dist/chunk-GBFTC7Q7.cjs.map +0 -1
  495. package/dist/chunk-GYR5K654.js +0 -91
  496. package/dist/chunk-GYR5K654.js.map +0 -1
  497. package/dist/chunk-HA2WBOGQ.js +0 -57
  498. package/dist/chunk-HA2WBOGQ.js.map +0 -1
  499. package/dist/chunk-HT5JQKN2.js +0 -118
  500. package/dist/chunk-HT5JQKN2.js.map +0 -1
  501. package/dist/chunk-INJD3G4K.cjs +0 -340
  502. package/dist/chunk-INJD3G4K.cjs.map +0 -1
  503. package/dist/chunk-IOYFAFHJ.cjs +0 -95
  504. package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
  505. package/dist/chunk-J5QENANM.js +0 -87
  506. package/dist/chunk-J5QENANM.js.map +0 -1
  507. package/dist/chunk-J7VGRIAJ.js +0 -64
  508. package/dist/chunk-J7VGRIAJ.js.map +0 -1
  509. package/dist/chunk-KFOHQK7X.js +0 -144
  510. package/dist/chunk-KFOHQK7X.js.map +0 -1
  511. package/dist/chunk-KIL5CUN6.js +0 -31
  512. package/dist/chunk-KIL5CUN6.js.map +0 -1
  513. package/dist/chunk-LITNXTTT.js +0 -3
  514. package/dist/chunk-LITNXTTT.js.map +0 -1
  515. package/dist/chunk-M3LFHHTN.cjs +0 -764
  516. package/dist/chunk-M3LFHHTN.cjs.map +0 -1
  517. package/dist/chunk-NEIB3TLD.cjs +0 -360
  518. package/dist/chunk-NEIB3TLD.cjs.map +0 -1
  519. package/dist/chunk-NVAI5CCN.cjs +0 -39
  520. package/dist/chunk-NVAI5CCN.cjs.map +0 -1
  521. package/dist/chunk-NVGPMGI4.js +0 -95
  522. package/dist/chunk-NVGPMGI4.js.map +0 -1
  523. package/dist/chunk-NZ72VDNY.cjs +0 -4
  524. package/dist/chunk-NZ72VDNY.cjs.map +0 -1
  525. package/dist/chunk-O4JZUCUE.js +0 -1174
  526. package/dist/chunk-O4JZUCUE.js.map +0 -1
  527. package/dist/chunk-O7JOKRN2.js +0 -833
  528. package/dist/chunk-O7JOKRN2.js.map +0 -1
  529. package/dist/chunk-OPPXYVEZ.cjs +0 -131
  530. package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
  531. package/dist/chunk-Q4EULJQY.js +0 -35
  532. package/dist/chunk-Q4EULJQY.js.map +0 -1
  533. package/dist/chunk-QWW3E3JM.cjs +0 -178
  534. package/dist/chunk-QWW3E3JM.cjs.map +0 -1
  535. package/dist/chunk-R7QYGZUP.cjs +0 -1075
  536. package/dist/chunk-R7QYGZUP.cjs.map +0 -1
  537. package/dist/chunk-RUPKBKUF.js +0 -352
  538. package/dist/chunk-RUPKBKUF.js.map +0 -1
  539. package/dist/chunk-SEO6NAQT.js +0 -14
  540. package/dist/chunk-SEO6NAQT.js.map +0 -1
  541. package/dist/chunk-T4B5LB6E.cjs +0 -66
  542. package/dist/chunk-T4B5LB6E.cjs.map +0 -1
  543. package/dist/chunk-TC5ZPWM4.cjs +0 -289
  544. package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
  545. package/dist/chunk-TQ5UWA7S.js +0 -26
  546. package/dist/chunk-TQ5UWA7S.js.map +0 -1
  547. package/dist/chunk-URHPSJW2.js +0 -339
  548. package/dist/chunk-URHPSJW2.js.map +0 -1
  549. package/dist/chunk-UY3UYPBZ.cjs +0 -77
  550. package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
  551. package/dist/chunk-VG2ABKJX.cjs +0 -100
  552. package/dist/chunk-VG2ABKJX.cjs.map +0 -1
  553. package/dist/chunk-VH77IPJN.cjs +0 -358
  554. package/dist/chunk-VH77IPJN.cjs.map +0 -1
  555. package/dist/chunk-VQTCQKHQ.cjs +0 -17
  556. package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
  557. package/dist/chunk-WGWSHJ2N.js +0 -38
  558. package/dist/chunk-WGWSHJ2N.js.map +0 -1
  559. package/dist/chunk-WJH6IYU2.cjs +0 -32
  560. package/dist/chunk-WJH6IYU2.cjs.map +0 -1
  561. package/dist/chunk-YREV3LGG.cjs +0 -61
  562. package/dist/chunk-YREV3LGG.cjs.map +0 -1
  563. package/dist/chunk-YTXEZ4SD.cjs +0 -77
  564. package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
  565. package/dist/chunk-YWCESU4Y.js +0 -1233
  566. package/dist/chunk-YWCESU4Y.js.map +0 -1
  567. package/dist/chunk-Z6HRSM2Y.cjs +0 -799
  568. package/dist/chunk-Z6HRSM2Y.cjs.map +0 -1
  569. package/dist/chunk-Z7PW3KHL.cjs +0 -1198
  570. package/dist/chunk-Z7PW3KHL.cjs.map +0 -1
  571. package/dist/chunk-ZNMBW67B.cjs +0 -40
  572. package/dist/chunk-ZNMBW67B.cjs.map +0 -1
  573. package/dist/correlation-id.cjs.map +0 -1
  574. package/dist/correlation-id.js.map +0 -1
  575. package/dist/event-subscriber.cjs.map +0 -1
  576. package/dist/event-subscriber.js.map +0 -1
  577. package/dist/event.cjs.map +0 -1
  578. package/dist/event.js.map +0 -1
  579. package/dist/exporters.cjs.map +0 -1
  580. package/dist/exporters.js.map +0 -1
  581. package/dist/functional.cjs.map +0 -1
  582. package/dist/functional.js.map +0 -1
  583. package/dist/init-DIowiiCh.d.ts +0 -1167
  584. package/dist/init-j-A1zI16.d.cts +0 -1167
  585. package/dist/processors.cjs.map +0 -1
  586. package/dist/processors.js.map +0 -1
  587. package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
  588. package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
  589. package/dist/utils-BahBCFtJ.d.cts +0 -712
  590. package/dist/utils-CLKwaUlG.d.ts +0 -712
  591. package/dist/yaml-config.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/messaging-testing.ts"],"names":[],"mappings":";;;AAiTA,SAAS,UAAU,MAAA,EAAwB;AACzC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,MAAM,KAAA,GAAQ,kBAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAA,IAAU,KAAA,CAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,MAAA;AACT;AA6BO,SAAS,0BAAA,GAAmD;AACjE,EAAA,MAAM,gBAAwC,EAAC;AAC/C,EAAA,MAAM,gBAAwC,EAAC;AAC/C,EAAA,MAAM,kBAA4C,EAAC;AAEnD,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IAEA,mBAAmB,IAAA,EAAM;AACvB,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,GAAG,IAAA;AAAA,QACH,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,mBAAmB,IAAA,EAAM;AACvB,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,GAAG,IAAA;AAAA,QACH,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,qBAAqB,KAAA,EAAO;AAC1B,MAAA,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,IAC5B,CAAA;AAAA,IAEA,iBAAA,CACE,OAAA,EACA,OAAA,GAAmC,EAAC,EACpB;AAChB,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,IAAA,CAAK,sBAAA,EAAuB;AAAA,QACxD,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,KAAW,GAAM,CAAA;AAAA,QAC3D,SAAA,EAAW,QAAQ,SAAA,IAAa,CAAA;AAAA,QAChC,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,WAAW,OAAA,CAAQ,SAAA,IAAa,CAAA,IAAA,EAAO,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA;AAAA,QACnD,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,GAAA;AAAI,OAC3C;AAAA,IACF,CAAA;AAAA,IAEA,sBAAA,CACE,SACA,MAAA,EACwB;AACxB,MAAA,MAAM,GAAA,GAAM,OAAA,IAAW,SAAA,CAAU,EAAE,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,MAAA,IAAU,SAAA,CAAU,EAAE,CAAA;AAClC,MAAA,OAAO;AAAA,QACL,WAAA,EAAa,CAAA,GAAA,EAAM,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA;AAAA,OAC/B;AAAA,IACF,CAAA;AAAA,IAEA,oBAAA,CACE,WAAA,EACA,OAAA,GAAoC,EAAC,EACrC;AACA,MAAA,MAAM,QAAQ,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAEvE,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,mDAAmD,WAAW,CAAA,wBAAA;AAAA,SAChE;AAAA,MACF;AAEA,MAAA,IACE,QAAQ,YAAA,KAAiB,MAAA,IACzB,KAAA,CAAM,MAAA,KAAW,QAAQ,YAAA,EACzB;AACA,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,YAAY,OAAA,CAAQ,YAAY,wBAAwB,WAAW,CAAA,OAAA,EAAU,MAAM,MAAM,CAAA;AAAA,SAC3F;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,QAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,SAAS,WAAW,CAAA;AAClE,QAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,iCAAA,EAAoC,WAAW,CAAA,6BAAA,EAAgC,cAAA,CAAe,MAAM,CAAA,QAAA;AAAA,WACtG;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,MAAM,kBAAkB,KAAA,CAAM,MAAA;AAAA,UAC5B,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,OAAA,CAAQ;AAAA,SAC/B;AACA,QAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,4BAAA,EAA+B,WAAW,CAAA,gBAAA,EAAmB,OAAA,CAAQ,OAAO,CAAA,iBAAA;AAAA,WAC9E;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,QAAA,MAAM,WAAW,KAAA,CAAM,MAAA;AAAA,UAAO,CAAC,CAAA,KAC7B,OAAA,CAAQ,cAAA,CAAgB,EAAE,OAAO;AAAA,SACnC;AACA,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,+BAA+B,WAAW,CAAA,wCAAA;AAAA,WAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IAEA,wBAAwB,WAAA,EAAsB;AAC5C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,QAAQ,aAAA,CAAc,MAAA;AAAA,UAC1B,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB;AAAA,SAC3B;AACA,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,wCAAA,EAA2C,WAAW,CAAA,qBAAA,EAAwB,KAAA,CAAM,MAAM,CAAA,MAAA;AAAA,WAC5F;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,gCAAA,EAAmC,cAAc,MAAM,CAAA,gBAAA;AAAA,WACzD;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IAEA,uBAAA,CACE,WAAA,EACA,OAAA,GAAoC,EAAC,EACrC;AACA,MAAA,MAAM,QAAQ,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAEvE,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,0DAA0D,WAAW,CAAA,0BAAA;AAAA,SACvE;AAAA,MACF;AAEA,MAAA,IACE,QAAQ,YAAA,KAAiB,MAAA,IACzB,KAAA,CAAM,MAAA,KAAW,QAAQ,YAAA,EACzB;AACA,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,YAAY,OAAA,CAAQ,YAAY,wBAAwB,WAAW,CAAA,OAAA,EAAU,MAAM,MAAM,CAAA;AAAA,SAC3F;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,QAAA,MAAM,aAAa,KAAA,CAAM,MAAA;AAAA,UACvB,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,OAAA,CAAQ;AAAA,SACrC;AACA,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,yBAAA,EAA4B,OAAA,CAAQ,aAAa,CAAA,OAAA,EAAU,WAAW,CAAA,6BAAA;AAAA,WACxE;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,gBAAA,EAAkB;AAC5B,QAAA,MAAM,YAAA,GAAe,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,aAAA,CAAc,WAAW,CAAC,CAAA;AACrE,QAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,iCAAA,EAAoC,WAAW,CAAA,8BAAA,EAAiC,YAAA,CAAa,MAAM,CAAA,QAAA;AAAA,WACrG;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,CAAQ,kBAAkB,MAAA,EAAW;AACvC,QAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AACpD,QAAA,IAAI,OAAA,CAAQ,aAAA,IAAiB,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AACpD,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,oCAAoC,WAAW,CAAA,yBAAA;AAAA,WACjD;AAAA,QACF;AACA,QAAA,IAAI,CAAC,OAAA,CAAQ,aAAA,IAAiB,UAAA,CAAW,SAAS,CAAA,EAAG;AACnD,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,oCAAA,EAAuC,WAAW,CAAA,OAAA,EAAU,UAAA,CAAW,MAAM,CAAA,cAAA;AAAA,WAC/E;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,CAAQ,kBAAkB,MAAA,EAAW;AACvC,QAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAmB,IAAI,CAAA;AAChE,QAAA,IAAI,OAAA,CAAQ,aAAA,IAAiB,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AACpD,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,uCAAuC,WAAW,CAAA,yBAAA;AAAA,WACpD;AAAA,QACF;AACA,QAAA,IAAI,CAAC,OAAA,CAAQ,aAAA,IAAiB,UAAA,CAAW,SAAS,CAAA,EAAG;AACnD,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,uCAAA,EAA0C,WAAW,CAAA,OAAA,EAAU,UAAA,CAAW,MAAM,CAAA,cAAA;AAAA,WAClF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,QAAA,MAAM,WAAW,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,MAAS,CAAA;AAC9D,QAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC3C,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,6BAA6B,WAAW,CAAA,oBAAA;AAAA,WAC1C;AAAA,QACF;AACA,QAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,IAAU,QAAA,CAAS,SAAS,CAAA,EAAG;AAC1C,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,6BAAA,EAAgC,WAAW,CAAA,OAAA,EAAU,QAAA,CAAS,MAAM,CAAA,SAAA;AAAA,WACtE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IAEA,wBAAwB,WAAA,EAAsB;AAC5C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,QAAQ,aAAA,CAAc,MAAA;AAAA,UAC1B,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB;AAAA,SAC3B;AACA,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,wCAAA,EAA2C,WAAW,CAAA,oBAAA,EAAuB,KAAA,CAAM,MAAM,CAAA,SAAA;AAAA,WAC3F;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,gCAAA,EAAmC,cAAc,MAAM,CAAA,wBAAA;AAAA,WACzD;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IAEA,uBAAA,CACE,WAAA,EACA,IAAA,EACA,cAAA,EACA;AACA,MAAA,MAAM,SAAS,eAAA,CAAgB,MAAA;AAAA,QAC7B,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,WAAA,IAAe,EAAE,IAAA,KAAS;AAAA,OACrD;AAEA,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,oBAAA,EAAuB,IAAI,CAAA,OAAA,EAAU,WAAW,CAAA,oBAAA;AAAA,SAClD;AAAA,MACF;AAEA,MAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,QAAA,MAAM,WAAW,MAAA,CAAO,MAAA;AAAA,UACtB,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,MAAA,KAAW;AAAA,SACjC;AACA,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,oBAAA,EAAuB,IAAI,CAAA,OAAA,EAAU,WAAW,UAAU,cAAc,CAAA,6BAAA;AAAA,WAC1E;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IAEA,iBAAiB,WAAA,EAAsB;AACrC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,OAAO,cAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAAA,MAClE;AACA,MAAA,OAAO,CAAC,GAAG,aAAa,CAAA;AAAA,IAC1B,CAAA;AAAA,IAEA,iBAAiB,WAAA,EAAsB;AACrC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,OAAO,cAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAAA,MAClE;AACA,MAAA,OAAO,CAAC,GAAG,aAAa,CAAA;AAAA,IAC1B,CAAA;AAAA,IAEA,oBAAoB,WAAA,EAAsB;AACxC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA;AAC/C,MAAA,OAAO,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,IACpB,CAAA;AAAA,IAEA,oBAAoB,WAAA,EAAsB;AACxC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA;AAC/C,MAAA,OAAO,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,IACpB,CAAA;AAAA,IAEA,KAAA,GAAQ;AACN,MAAA,aAAA,CAAc,MAAA,GAAS,CAAA;AACvB,MAAA,aAAA,CAAc,MAAA,GAAS,CAAA;AACvB,MAAA,eAAA,CAAgB,MAAA,GAAS,CAAA;AAAA,IAC3B,CAAA;AAAA,IAEA,QAAA,GAAW;AACT,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACb;AAAA,GACF;AACF;AAwEO,SAAS,uBAAA,GAA6C;AAC3D,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA2B;AAE9C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IAEA,OAAA,CAAQ,OAAe,OAAA,EAAsB;AAC3C,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG;AACtB,QAAA,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,MACtB;AACA,MAAA,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAAG,IAAA,CAAK;AAAA,QACtB,GAAG,OAAA;AAAA,QACH,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,GAAA,EAAI;AAAA,QACzC,QAAQ,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAAG;AAAA,OAC9C,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,OAAA,CAAQ,OAAe,KAAA,EAAgB;AACrC,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,EAAC;AACvC,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,MAAM,GAAA,GAAM,CAAC,GAAG,QAAQ,CAAA;AACxB,QAAA,QAAA,CAAS,MAAA,GAAS,CAAA;AAClB,QAAA,OAAO,GAAA;AAAA,MACT;AACA,MAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAA,EAAG,KAAK,CAAA;AAAA,IACjC,CAAA;AAAA,IAEA,IAAA,CAAK,OAAe,KAAA,EAAgB;AAClC,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,EAAC;AACvC,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,OAAO,CAAC,GAAG,QAAQ,CAAA;AAAA,MACrB;AACA,MAAA,OAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,IAChC,CAAA;AAAA,IAEA,gBAAgB,KAAA,EAAe;AAC7B,MAAA,OAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG,MAAA,IAAU,CAAA;AAAA,IACtC,CAAA;AAAA,IAEA,MAAM,KAAA,EAAgB;AACpB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAA,EAAM;AAAA,MACf;AAAA,IACF,CAAA;AAAA,IAEA,YAAY,KAAA,EAAe;AACzB,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG;AACtB,QAAA,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAAA,IAEA,YAAY,KAAA,EAAe;AACzB,MAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,IACrB,CAAA;AAAA,IAEA,UAAA,GAAa;AACX,MAAA,OAAO,CAAC,GAAG,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,IAC1B;AAAA,GACF;AACF;AASO,SAAS,yBAAyB,WAAA,EAAoC;AAC3E,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACnC,EAAA,IAAI,MAAM,MAAA,IAAU,CAAA,IAAK,KAAA,CAAM,CAAC,MAAM,MAAA,EAAW;AAC/C,IAAA,OAAO,MAAM,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,wBAAwB,WAAA,EAAoC;AAC1E,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACnC,EAAA,IAAI,MAAM,MAAA,IAAU,CAAA,IAAK,KAAA,CAAM,CAAC,MAAM,MAAA,EAAW;AAC/C,IAAA,OAAO,MAAM,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,qBAAA,CACd,SACA,MAAA,EACa;AACb,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAA,IAAW,SAAA,CAAU,EAAE,CAAA;AAAA,IAChC,MAAA,EAAQ,MAAA,IAAU,SAAA,CAAU,EAAE,CAAA;AAAA,IAC9B,UAAA,EAAY,CAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACZ;AACF;AAKO,SAAS,sBAAA,CACd,SACA,MAAA,EACM;AACN,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,qBAAA,CAAsB,OAAA,EAAS,MAAM,CAAA;AAAA,IAC9C,UAAA,EAAY;AAAA,MACV,uBAAA,EAAyB;AAAA;AAC3B,GACF;AACF;AASO,SAAS,sBAAA,CACd,QAAA,EACA,OAAA,GAKI,EAAC,EACa;AAClB,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,CAAA;AAC3C,EAAA,MAAM,eAAA,GAAkB,QAAQ,eAAA,IAAmB,IAAA;AACnD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,SAAA,CAAU,EAAE,CAAA;AAE/C,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,MAAW;AAAA,IACvC,OAAA;AAAA,IACA,OAAA,EAAS,eAAA,GACL,EAAE,WAAA,EAAa,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI,SAAA,CAAU,EAAE,CAAC,CAAA,GAAA,CAAA,EAAM,GACnD,MAAA;AAAA,IACJ,QAAQ,WAAA,GAAc,KAAA;AAAA,IACtB,SAAA,EAAW,QAAQ,SAAA,IAAa,CAAA;AAAA,IAChC,SAAA,EAAW,CAAA,IAAA,EAAO,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA;AAAA,IAC9B,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,GAC1B,CAAE,CAAA;AACJ;AAKO,SAAS,uBAAA,CACd,KAAA,EACA,aAAA,EACA,UAAA,EAIA;AACA,EAAA,MAAM,WAAA,GAAqC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAChE,KAAA;AAAA,IACA,SAAA,EAAW,CAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV,CAAE,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,UAAA;AAAA,MACN,UAAA,EAAY,WAAA;AAAA,MACZ,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,UAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb;AAAA,KACF;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,SAAA;AAAA,MACN,UAAA,EAAY,WAAA;AAAA,MACZ,SAAA,EAAW,IAAA,CAAK,GAAA,EAAI,GAAI,GAAA;AAAA,MACxB,UAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb;AAAA;AACF,GACF;AACF;AAKO,SAAS,wBAAA,CACd,UACA,iBAAA,EACkB;AAClB,EAAA,MAAM,WAAW,sBAAA,CAAuB,QAAA,EAAU,EAAE,eAAA,EAAiB,MAAM,CAAA;AAG3E,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,QAAQ,CAAA;AAC7B,EAAA,KAAA,MAAW,SAAS,iBAAA,EAAmB;AACrC,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,QAAA,CAAS,MAAA,EAAQ;AAExC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,GAAQ,CAAC,CAAA;AAC/B,MAAA,MAAM,IAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,MAAA,QAAA,CAAS,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA;AACtB,MAAA,QAAA,CAAS,KAAK,CAAA,GAAI,IAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAKO,SAAS,uBAAA,CACd,UACA,gBAAA,EACkB;AAClB,EAAA,MAAM,WAAW,sBAAA,CAAuB,QAAA,EAAU,EAAE,eAAA,EAAiB,MAAM,CAAA;AAC3E,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,QAAQ,CAAA;AAE3B,EAAA,KAAA,MAAW,SAAS,gBAAA,EAAkB;AACpC,IAAA,MAAM,eAAA,GAAkB,SAAS,KAAK,CAAA;AACtC,IAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,GAAQ,QAAA,CAAS,UAAU,eAAA,EAAiB;AAE5D,MAAA,MAAA,CAAO,OAAO,KAAA,GAAQ,CAAA,EAAG,GAAG,EAAE,GAAG,iBAAiB,CAAA;AAAA,IACpD;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"messaging-testing.cjs","sourcesContent":["/**\n * Testing utilities for messaging instrumentation\n *\n * Provides mock producers, consumers, and assertion helpers\n * for testing event-driven code with Autotel's messaging module.\n *\n * @example Basic test setup\n * ```typescript\n * import { createMessagingTestHarness } from 'autotel/messaging-testing';\n *\n * describe('Order processing', () => {\n * const harness = createMessagingTestHarness();\n *\n * beforeEach(() => harness.reset());\n * afterAll(() => harness.shutdown());\n *\n * it('should process order and publish event', async () => {\n * await processOrder({ id: 'order-123' });\n *\n * harness.assertProducerCalled('orders', {\n * messageCount: 1,\n * hasTraceHeaders: true,\n * });\n * });\n * });\n * ```\n *\n * @module\n */\n\nimport type { Link, SpanContext } from '@opentelemetry/api';\nimport type {\n RebalanceEvent,\n PartitionAssignment,\n OutOfOrderInfo,\n} from './messaging';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Recorded producer call\n */\nexport interface RecordedProducerCall {\n /** Destination (topic/queue) */\n destination: string;\n\n /** System (kafka, sqs, etc.) */\n system: string;\n\n /** Message payload */\n payload: unknown;\n\n /** Headers injected */\n headers: Record<string, string>;\n\n /** Timestamp of call */\n timestamp: number;\n\n /** Trace ID from headers */\n traceId?: string;\n\n /** Span ID from headers */\n spanId?: string;\n}\n\n/**\n * Recorded consumer call\n */\nexport interface RecordedConsumerCall {\n /** Destination (topic/queue) */\n destination: string;\n\n /** System (kafka, sqs, etc.) */\n system: string;\n\n /** Consumer group */\n consumerGroup?: string;\n\n /** Message payload */\n payload: unknown;\n\n /** Headers extracted */\n headers?: Record<string, string>;\n\n /** Timestamp of call */\n timestamp: number;\n\n /** Producer links extracted */\n producerLinks: Link[];\n\n /** Whether message was duplicate */\n isDuplicate: boolean;\n\n /** Out of order info if detected */\n outOfOrderInfo: OutOfOrderInfo | null;\n\n /** DLQ reason if routed to DLQ */\n dlqReason?: string;\n\n /** Retry attempt number */\n retryAttempt?: number;\n}\n\n/**\n * Recorded rebalance event\n */\nexport interface RecordedRebalanceEvent extends RebalanceEvent {\n /** Destination (topic) */\n destination: string;\n\n /** Consumer group */\n consumerGroup: string;\n}\n\n/**\n * Mock message for testing\n */\nexport interface MockMessage<T = unknown> {\n /** Message payload */\n payload: T;\n\n /** Headers */\n headers?: Record<string, string>;\n\n /** Offset/sequence number */\n offset?: number;\n\n /** Partition */\n partition?: number;\n\n /** Key */\n key?: string;\n\n /** Message ID */\n messageId?: string;\n\n /** Timestamp */\n timestamp?: number;\n}\n\n/**\n * Producer assertion options\n */\nexport interface ProducerAssertionOptions {\n /** Expected number of messages */\n messageCount?: number;\n\n /** Whether trace headers should be present */\n hasTraceHeaders?: boolean;\n\n /** Expected destination */\n destination?: string;\n\n /** Custom matcher for payload */\n payloadMatcher?: (payload: unknown) => boolean;\n\n /** Expected trace ID */\n traceId?: string;\n}\n\n/**\n * Consumer assertion options\n */\nexport interface ConsumerAssertionOptions {\n /** Expected number of messages processed */\n messageCount?: number;\n\n /** Whether producer links should be present */\n hasProducerLinks?: boolean;\n\n /** Expected destination */\n destination?: string;\n\n /** Expected consumer group */\n consumerGroup?: string;\n\n /** Whether any messages were duplicates */\n hasDuplicates?: boolean;\n\n /** Whether any messages were out of order */\n hasOutOfOrder?: boolean;\n\n /** Whether any messages went to DLQ */\n hasDLQ?: boolean;\n}\n\n/**\n * Messaging test harness\n */\nexport interface MessagingTestHarness {\n /** All recorded producer calls */\n producerCalls: RecordedProducerCall[];\n\n /** All recorded consumer calls */\n consumerCalls: RecordedConsumerCall[];\n\n /** All recorded rebalance events */\n rebalanceEvents: RecordedRebalanceEvent[];\n\n /**\n * Record a producer call\n */\n recordProducerCall(call: Omit<RecordedProducerCall, 'timestamp'>): void;\n\n /**\n * Record a consumer call\n */\n recordConsumerCall(call: Omit<RecordedConsumerCall, 'timestamp'>): void;\n\n /**\n * Record a rebalance event\n */\n recordRebalanceEvent(event: RecordedRebalanceEvent): void;\n\n /**\n * Create a mock message with trace headers\n */\n createMockMessage<T>(\n payload: T,\n options?: Partial<MockMessage<T>>,\n ): MockMessage<T>;\n\n /**\n * Create mock trace headers\n */\n createMockTraceHeaders(\n traceId?: string,\n spanId?: string,\n ): Record<string, string>;\n\n /**\n * Assert producer was called with expected options\n */\n assertProducerCalled(\n destination: string,\n options?: ProducerAssertionOptions,\n ): void;\n\n /**\n * Assert producer was not called\n */\n assertProducerNotCalled(destination?: string): void;\n\n /**\n * Assert consumer processed messages with expected options\n */\n assertConsumerProcessed(\n destination: string,\n options?: ConsumerAssertionOptions,\n ): void;\n\n /**\n * Assert consumer was not called\n */\n assertConsumerNotCalled(destination?: string): void;\n\n /**\n * Assert rebalance occurred\n */\n assertRebalanceOccurred(\n destination: string,\n type: RebalanceEvent['type'],\n partitionCount?: number,\n ): void;\n\n /**\n * Get producer calls for destination\n */\n getProducerCalls(destination?: string): RecordedProducerCall[];\n\n /**\n * Get consumer calls for destination\n */\n getConsumerCalls(destination?: string): RecordedConsumerCall[];\n\n /**\n * Get the last producer call\n */\n getLastProducerCall(destination?: string): RecordedProducerCall | undefined;\n\n /**\n * Get the last consumer call\n */\n getLastConsumerCall(destination?: string): RecordedConsumerCall | undefined;\n\n /**\n * Reset all recorded calls\n */\n reset(): void;\n\n /**\n * Shutdown the harness\n */\n shutdown(): void;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Generate a random hex string\n */\nfunction randomHex(length: number): string {\n let result = '';\n const chars = '0123456789abcdef';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n}\n\n/**\n * Create a messaging test harness\n *\n * Provides utilities for recording and asserting on producer/consumer calls\n * during testing.\n *\n * @example\n * ```typescript\n * const harness = createMessagingTestHarness();\n *\n * // In your test setup\n * beforeEach(() => harness.reset());\n *\n * // In your tests\n * it('should publish order event', async () => {\n * await orderService.createOrder({ id: '123' });\n *\n * harness.assertProducerCalled('orders', {\n * messageCount: 1,\n * hasTraceHeaders: true,\n * });\n *\n * const lastCall = harness.getLastProducerCall('orders');\n * expect(lastCall?.payload).toMatchObject({ orderId: '123' });\n * });\n * ```\n */\nexport function createMessagingTestHarness(): MessagingTestHarness {\n const producerCalls: RecordedProducerCall[] = [];\n const consumerCalls: RecordedConsumerCall[] = [];\n const rebalanceEvents: RecordedRebalanceEvent[] = [];\n\n return {\n producerCalls,\n consumerCalls,\n rebalanceEvents,\n\n recordProducerCall(call) {\n producerCalls.push({\n ...call,\n timestamp: Date.now(),\n });\n },\n\n recordConsumerCall(call) {\n consumerCalls.push({\n ...call,\n timestamp: Date.now(),\n });\n },\n\n recordRebalanceEvent(event) {\n rebalanceEvents.push(event);\n },\n\n createMockMessage<T>(\n payload: T,\n options: Partial<MockMessage<T>> = {},\n ): MockMessage<T> {\n return {\n payload,\n headers: options.headers ?? this.createMockTraceHeaders(),\n offset: options.offset ?? Math.floor(Math.random() * 10_000),\n partition: options.partition ?? 0,\n key: options.key,\n messageId: options.messageId ?? `msg-${randomHex(8)}`,\n timestamp: options.timestamp ?? Date.now(),\n };\n },\n\n createMockTraceHeaders(\n traceId?: string,\n spanId?: string,\n ): Record<string, string> {\n const tid = traceId ?? randomHex(32);\n const sid = spanId ?? randomHex(16);\n return {\n traceparent: `00-${tid}-${sid}-01`,\n };\n },\n\n assertProducerCalled(\n destination: string,\n options: ProducerAssertionOptions = {},\n ) {\n const calls = producerCalls.filter((c) => c.destination === destination);\n\n if (calls.length === 0) {\n throw new Error(\n `Expected producer to be called for destination '${destination}', but it was not called`,\n );\n }\n\n if (\n options.messageCount !== undefined &&\n calls.length !== options.messageCount\n ) {\n throw new Error(\n `Expected ${options.messageCount} producer calls for '${destination}', got ${calls.length}`,\n );\n }\n\n if (options.hasTraceHeaders) {\n const withoutHeaders = calls.filter((c) => !c.headers?.traceparent);\n if (withoutHeaders.length > 0) {\n throw new Error(\n `Expected all producer calls for '${destination}' to have trace headers, but ${withoutHeaders.length} did not`,\n );\n }\n }\n\n if (options.traceId) {\n const matchingTraceId = calls.filter(\n (c) => c.traceId === options.traceId,\n );\n if (matchingTraceId.length === 0) {\n throw new Error(\n `Expected producer call for '${destination}' with traceId '${options.traceId}', but none found`,\n );\n }\n }\n\n if (options.payloadMatcher) {\n const matching = calls.filter((c) =>\n options.payloadMatcher!(c.payload),\n );\n if (matching.length === 0) {\n throw new Error(\n `Expected producer call for '${destination}' to match payload matcher, but none did`,\n );\n }\n }\n },\n\n assertProducerNotCalled(destination?: string) {\n if (destination) {\n const calls = producerCalls.filter(\n (c) => c.destination === destination,\n );\n if (calls.length > 0) {\n throw new Error(\n `Expected producer not to be called for '${destination}', but it was called ${calls.length} times`,\n );\n }\n } else {\n if (producerCalls.length > 0) {\n throw new Error(\n `Expected no producer calls, but ${producerCalls.length} calls were made`,\n );\n }\n }\n },\n\n assertConsumerProcessed(\n destination: string,\n options: ConsumerAssertionOptions = {},\n ) {\n const calls = consumerCalls.filter((c) => c.destination === destination);\n\n if (calls.length === 0) {\n throw new Error(\n `Expected consumer to process messages for destination '${destination}', but none were processed`,\n );\n }\n\n if (\n options.messageCount !== undefined &&\n calls.length !== options.messageCount\n ) {\n throw new Error(\n `Expected ${options.messageCount} consumer calls for '${destination}', got ${calls.length}`,\n );\n }\n\n if (options.consumerGroup) {\n const wrongGroup = calls.filter(\n (c) => c.consumerGroup !== options.consumerGroup,\n );\n if (wrongGroup.length > 0) {\n throw new Error(\n `Expected consumer group '${options.consumerGroup}' for '${destination}', but found different groups`,\n );\n }\n }\n\n if (options.hasProducerLinks) {\n const withoutLinks = calls.filter((c) => c.producerLinks.length === 0);\n if (withoutLinks.length > 0) {\n throw new Error(\n `Expected all consumer calls for '${destination}' to have producer links, but ${withoutLinks.length} did not`,\n );\n }\n }\n\n if (options.hasDuplicates !== undefined) {\n const duplicates = calls.filter((c) => c.isDuplicate);\n if (options.hasDuplicates && duplicates.length === 0) {\n throw new Error(\n `Expected duplicate messages for '${destination}', but none were detected`,\n );\n }\n if (!options.hasDuplicates && duplicates.length > 0) {\n throw new Error(\n `Expected no duplicate messages for '${destination}', but ${duplicates.length} were detected`,\n );\n }\n }\n\n if (options.hasOutOfOrder !== undefined) {\n const outOfOrder = calls.filter((c) => c.outOfOrderInfo !== null);\n if (options.hasOutOfOrder && outOfOrder.length === 0) {\n throw new Error(\n `Expected out-of-order messages for '${destination}', but none were detected`,\n );\n }\n if (!options.hasOutOfOrder && outOfOrder.length > 0) {\n throw new Error(\n `Expected no out-of-order messages for '${destination}', but ${outOfOrder.length} were detected`,\n );\n }\n }\n\n if (options.hasDLQ !== undefined) {\n const dlqCalls = calls.filter((c) => c.dlqReason !== undefined);\n if (options.hasDLQ && dlqCalls.length === 0) {\n throw new Error(\n `Expected DLQ routing for '${destination}', but none occurred`,\n );\n }\n if (!options.hasDLQ && dlqCalls.length > 0) {\n throw new Error(\n `Expected no DLQ routing for '${destination}', but ${dlqCalls.length} occurred`,\n );\n }\n }\n },\n\n assertConsumerNotCalled(destination?: string) {\n if (destination) {\n const calls = consumerCalls.filter(\n (c) => c.destination === destination,\n );\n if (calls.length > 0) {\n throw new Error(\n `Expected consumer not to be called for '${destination}', but it processed ${calls.length} messages`,\n );\n }\n } else {\n if (consumerCalls.length > 0) {\n throw new Error(\n `Expected no consumer calls, but ${consumerCalls.length} messages were processed`,\n );\n }\n }\n },\n\n assertRebalanceOccurred(\n destination: string,\n type: RebalanceEvent['type'],\n partitionCount?: number,\n ) {\n const events = rebalanceEvents.filter(\n (e) => e.destination === destination && e.type === type,\n );\n\n if (events.length === 0) {\n throw new Error(\n `Expected rebalance '${type}' for '${destination}', but none occurred`,\n );\n }\n\n if (partitionCount !== undefined) {\n const matching = events.filter(\n (e) => e.partitions.length === partitionCount,\n );\n if (matching.length === 0) {\n throw new Error(\n `Expected rebalance '${type}' for '${destination}' with ${partitionCount} partitions, but none matched`,\n );\n }\n }\n },\n\n getProducerCalls(destination?: string) {\n if (destination) {\n return producerCalls.filter((c) => c.destination === destination);\n }\n return [...producerCalls];\n },\n\n getConsumerCalls(destination?: string) {\n if (destination) {\n return consumerCalls.filter((c) => c.destination === destination);\n }\n return [...consumerCalls];\n },\n\n getLastProducerCall(destination?: string) {\n const calls = this.getProducerCalls(destination);\n return calls.at(-1);\n },\n\n getLastConsumerCall(destination?: string) {\n const calls = this.getConsumerCalls(destination);\n return calls.at(-1);\n },\n\n reset() {\n producerCalls.length = 0;\n consumerCalls.length = 0;\n rebalanceEvents.length = 0;\n },\n\n shutdown() {\n this.reset();\n },\n };\n}\n\n// ============================================================================\n// Mock Broker\n// ============================================================================\n\n/**\n * Mock message broker for testing\n */\nexport interface MockMessageBroker {\n /** Topics/queues in the broker */\n topics: Map<string, MockMessage[]>;\n\n /**\n * Publish a message to a topic\n */\n publish(topic: string, message: MockMessage): void;\n\n /**\n * Consume messages from a topic\n */\n consume(topic: string, count?: number): MockMessage[];\n\n /**\n * Peek at messages without consuming\n */\n peek(topic: string, count?: number): MockMessage[];\n\n /**\n * Get message count for topic\n */\n getMessageCount(topic: string): number;\n\n /**\n * Clear all messages\n */\n clear(topic?: string): void;\n\n /**\n * Create a topic\n */\n createTopic(topic: string): void;\n\n /**\n * Delete a topic\n */\n deleteTopic(topic: string): void;\n\n /**\n * List all topics\n */\n listTopics(): string[];\n}\n\n/**\n * Create a mock message broker for testing\n *\n * Simulates a message broker (Kafka, SQS, RabbitMQ, etc.) for unit testing.\n *\n * @example\n * ```typescript\n * const broker = createMockMessageBroker();\n *\n * // Producer publishes\n * broker.publish('orders', { payload: { orderId: '123' }, headers: {} });\n *\n * // Consumer receives\n * const messages = broker.consume('orders');\n * expect(messages).toHaveLength(1);\n * expect(messages[0].payload).toEqual({ orderId: '123' });\n * ```\n */\nexport function createMockMessageBroker(): MockMessageBroker {\n const topics = new Map<string, MockMessage[]>();\n\n return {\n topics,\n\n publish(topic: string, message: MockMessage) {\n if (!topics.has(topic)) {\n topics.set(topic, []);\n }\n topics.get(topic)!.push({\n ...message,\n timestamp: message.timestamp ?? Date.now(),\n offset: message.offset ?? topics.get(topic)!.length,\n });\n },\n\n consume(topic: string, count?: number) {\n const messages = topics.get(topic) ?? [];\n if (count === undefined) {\n const all = [...messages];\n messages.length = 0;\n return all;\n }\n return messages.splice(0, count);\n },\n\n peek(topic: string, count?: number) {\n const messages = topics.get(topic) ?? [];\n if (count === undefined) {\n return [...messages];\n }\n return messages.slice(0, count);\n },\n\n getMessageCount(topic: string) {\n return topics.get(topic)?.length ?? 0;\n },\n\n clear(topic?: string) {\n if (topic) {\n topics.set(topic, []);\n } else {\n topics.clear();\n }\n },\n\n createTopic(topic: string) {\n if (!topics.has(topic)) {\n topics.set(topic, []);\n }\n },\n\n deleteTopic(topic: string) {\n topics.delete(topic);\n },\n\n listTopics() {\n return [...topics.keys()];\n },\n };\n}\n\n// ============================================================================\n// Context Propagation Helpers\n// ============================================================================\n\n/**\n * Extract trace ID from traceparent header\n */\nexport function extractTraceIdFromHeader(traceparent: string): string | null {\n const parts = traceparent.split('-');\n if (parts.length >= 3 && parts[1] !== undefined) {\n return parts[1];\n }\n return null;\n}\n\n/**\n * Extract span ID from traceparent header\n */\nexport function extractSpanIdFromHeader(traceparent: string): string | null {\n const parts = traceparent.split('-');\n if (parts.length >= 4 && parts[2] !== undefined) {\n return parts[2];\n }\n return null;\n}\n\n/**\n * Create a mock span context\n */\nexport function createMockSpanContext(\n traceId?: string,\n spanId?: string,\n): SpanContext {\n return {\n traceId: traceId ?? randomHex(32),\n spanId: spanId ?? randomHex(16),\n traceFlags: 1,\n isRemote: true,\n };\n}\n\n/**\n * Create a mock link to a producer span\n */\nexport function createMockProducerLink(\n traceId?: string,\n spanId?: string,\n): Link {\n return {\n context: createMockSpanContext(traceId, spanId),\n attributes: {\n 'messaging.link.source': 'producer',\n },\n };\n}\n\n// ============================================================================\n// Scenario Builders\n// ============================================================================\n\n/**\n * Create a batch of mock messages\n */\nexport function createMockMessageBatch<T>(\n payloads: T[],\n options: {\n startOffset?: number;\n partition?: number;\n addTraceHeaders?: boolean;\n traceId?: string;\n } = {},\n): MockMessage<T>[] {\n const startOffset = options.startOffset ?? 0;\n const addTraceHeaders = options.addTraceHeaders ?? true;\n const traceId = options.traceId ?? randomHex(32);\n\n return payloads.map((payload, index) => ({\n payload,\n headers: addTraceHeaders\n ? { traceparent: `00-${traceId}-${randomHex(16)}-01` }\n : undefined,\n offset: startOffset + index,\n partition: options.partition ?? 0,\n messageId: `msg-${randomHex(8)}`,\n timestamp: Date.now() + index,\n }));\n}\n\n/**\n * Create a rebalance scenario\n */\nexport function createRebalanceScenario(\n topic: string,\n consumerGroup: string,\n partitions: number[],\n): {\n assignEvent: RecordedRebalanceEvent;\n revokeEvent: RecordedRebalanceEvent;\n} {\n const assignments: PartitionAssignment[] = partitions.map((p) => ({\n topic,\n partition: p,\n offset: 0,\n }));\n\n return {\n assignEvent: {\n type: 'assigned',\n partitions: assignments,\n timestamp: Date.now(),\n generation: 1,\n destination: topic,\n consumerGroup,\n },\n revokeEvent: {\n type: 'revoked',\n partitions: assignments,\n timestamp: Date.now() + 1000,\n generation: 2,\n destination: topic,\n consumerGroup,\n },\n };\n}\n\n/**\n * Create an out-of-order scenario\n */\nexport function createOutOfOrderScenario<T>(\n payloads: T[],\n outOfOrderIndices: number[],\n): MockMessage<T>[] {\n const messages = createMockMessageBatch(payloads, { addTraceHeaders: true });\n\n // Shuffle specified indices to create out-of-order scenario\n const shuffled = [...messages];\n for (const index of outOfOrderIndices) {\n if (index > 0 && index < shuffled.length) {\n // Swap with previous to create out-of-order\n const prev = shuffled[index - 1]!;\n const curr = shuffled[index]!;\n shuffled[index - 1] = curr;\n shuffled[index] = prev;\n }\n }\n\n return shuffled;\n}\n\n/**\n * Create a duplicate message scenario\n */\nexport function createDuplicateScenario<T>(\n payloads: T[],\n duplicateIndices: number[],\n): MockMessage<T>[] {\n const messages = createMockMessageBatch(payloads, { addTraceHeaders: true });\n const result = [...messages];\n\n for (const index of duplicateIndices) {\n const originalMessage = messages[index];\n if (index >= 0 && index < messages.length && originalMessage) {\n // Insert duplicate after the original\n result.splice(index + 1, 0, { ...originalMessage });\n }\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"messaging-testing.cjs","names":[],"sources":["../src/messaging-testing.ts"],"sourcesContent":["/**\n * Testing utilities for messaging instrumentation\n *\n * Provides mock producers, consumers, and assertion helpers\n * for testing event-driven code with Autotel's messaging module.\n *\n * @example Basic test setup\n * ```typescript\n * import { createMessagingTestHarness } from 'autotel/messaging-testing';\n *\n * describe('Order processing', () => {\n * const harness = createMessagingTestHarness();\n *\n * beforeEach(() => harness.reset());\n * afterAll(() => harness.shutdown());\n *\n * it('should process order and publish event', async () => {\n * await processOrder({ id: 'order-123' });\n *\n * harness.assertProducerCalled('orders', {\n * messageCount: 1,\n * hasTraceHeaders: true,\n * });\n * });\n * });\n * ```\n *\n * @module\n */\n\nimport type { Link, SpanContext } from '@opentelemetry/api';\nimport type {\n RebalanceEvent,\n PartitionAssignment,\n OutOfOrderInfo,\n} from './messaging';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Recorded producer call\n */\nexport interface RecordedProducerCall {\n /** Destination (topic/queue) */\n destination: string;\n\n /** System (kafka, sqs, etc.) */\n system: string;\n\n /** Message payload */\n payload: unknown;\n\n /** Headers injected */\n headers: Record<string, string>;\n\n /** Timestamp of call */\n timestamp: number;\n\n /** Trace ID from headers */\n traceId?: string;\n\n /** Span ID from headers */\n spanId?: string;\n}\n\n/**\n * Recorded consumer call\n */\nexport interface RecordedConsumerCall {\n /** Destination (topic/queue) */\n destination: string;\n\n /** System (kafka, sqs, etc.) */\n system: string;\n\n /** Consumer group */\n consumerGroup?: string;\n\n /** Message payload */\n payload: unknown;\n\n /** Headers extracted */\n headers?: Record<string, string>;\n\n /** Timestamp of call */\n timestamp: number;\n\n /** Producer links extracted */\n producerLinks: Link[];\n\n /** Whether message was duplicate */\n isDuplicate: boolean;\n\n /** Out of order info if detected */\n outOfOrderInfo: OutOfOrderInfo | null;\n\n /** DLQ reason if routed to DLQ */\n dlqReason?: string;\n\n /** Retry attempt number */\n retryAttempt?: number;\n}\n\n/**\n * Recorded rebalance event\n */\nexport interface RecordedRebalanceEvent extends RebalanceEvent {\n /** Destination (topic) */\n destination: string;\n\n /** Consumer group */\n consumerGroup: string;\n}\n\n/**\n * Mock message for testing\n */\nexport interface MockMessage<T = unknown> {\n /** Message payload */\n payload: T;\n\n /** Headers */\n headers?: Record<string, string>;\n\n /** Offset/sequence number */\n offset?: number;\n\n /** Partition */\n partition?: number;\n\n /** Key */\n key?: string;\n\n /** Message ID */\n messageId?: string;\n\n /** Timestamp */\n timestamp?: number;\n}\n\n/**\n * Producer assertion options\n */\nexport interface ProducerAssertionOptions {\n /** Expected number of messages */\n messageCount?: number;\n\n /** Whether trace headers should be present */\n hasTraceHeaders?: boolean;\n\n /** Expected destination */\n destination?: string;\n\n /** Custom matcher for payload */\n payloadMatcher?: (payload: unknown) => boolean;\n\n /** Expected trace ID */\n traceId?: string;\n}\n\n/**\n * Consumer assertion options\n */\nexport interface ConsumerAssertionOptions {\n /** Expected number of messages processed */\n messageCount?: number;\n\n /** Whether producer links should be present */\n hasProducerLinks?: boolean;\n\n /** Expected destination */\n destination?: string;\n\n /** Expected consumer group */\n consumerGroup?: string;\n\n /** Whether any messages were duplicates */\n hasDuplicates?: boolean;\n\n /** Whether any messages were out of order */\n hasOutOfOrder?: boolean;\n\n /** Whether any messages went to DLQ */\n hasDLQ?: boolean;\n}\n\n/**\n * Messaging test harness\n */\nexport interface MessagingTestHarness {\n /** All recorded producer calls */\n producerCalls: RecordedProducerCall[];\n\n /** All recorded consumer calls */\n consumerCalls: RecordedConsumerCall[];\n\n /** All recorded rebalance events */\n rebalanceEvents: RecordedRebalanceEvent[];\n\n /**\n * Record a producer call\n */\n recordProducerCall(call: Omit<RecordedProducerCall, 'timestamp'>): void;\n\n /**\n * Record a consumer call\n */\n recordConsumerCall(call: Omit<RecordedConsumerCall, 'timestamp'>): void;\n\n /**\n * Record a rebalance event\n */\n recordRebalanceEvent(event: RecordedRebalanceEvent): void;\n\n /**\n * Create a mock message with trace headers\n */\n createMockMessage<T>(\n payload: T,\n options?: Partial<MockMessage<T>>,\n ): MockMessage<T>;\n\n /**\n * Create mock trace headers\n */\n createMockTraceHeaders(\n traceId?: string,\n spanId?: string,\n ): Record<string, string>;\n\n /**\n * Assert producer was called with expected options\n */\n assertProducerCalled(\n destination: string,\n options?: ProducerAssertionOptions,\n ): void;\n\n /**\n * Assert producer was not called\n */\n assertProducerNotCalled(destination?: string): void;\n\n /**\n * Assert consumer processed messages with expected options\n */\n assertConsumerProcessed(\n destination: string,\n options?: ConsumerAssertionOptions,\n ): void;\n\n /**\n * Assert consumer was not called\n */\n assertConsumerNotCalled(destination?: string): void;\n\n /**\n * Assert rebalance occurred\n */\n assertRebalanceOccurred(\n destination: string,\n type: RebalanceEvent['type'],\n partitionCount?: number,\n ): void;\n\n /**\n * Get producer calls for destination\n */\n getProducerCalls(destination?: string): RecordedProducerCall[];\n\n /**\n * Get consumer calls for destination\n */\n getConsumerCalls(destination?: string): RecordedConsumerCall[];\n\n /**\n * Get the last producer call\n */\n getLastProducerCall(destination?: string): RecordedProducerCall | undefined;\n\n /**\n * Get the last consumer call\n */\n getLastConsumerCall(destination?: string): RecordedConsumerCall | undefined;\n\n /**\n * Reset all recorded calls\n */\n reset(): void;\n\n /**\n * Shutdown the harness\n */\n shutdown(): void;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Generate a random hex string\n */\nfunction randomHex(length: number): string {\n let result = '';\n const chars = '0123456789abcdef';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n}\n\n/**\n * Create a messaging test harness\n *\n * Provides utilities for recording and asserting on producer/consumer calls\n * during testing.\n *\n * @example\n * ```typescript\n * const harness = createMessagingTestHarness();\n *\n * // In your test setup\n * beforeEach(() => harness.reset());\n *\n * // In your tests\n * it('should publish order event', async () => {\n * await orderService.createOrder({ id: '123' });\n *\n * harness.assertProducerCalled('orders', {\n * messageCount: 1,\n * hasTraceHeaders: true,\n * });\n *\n * const lastCall = harness.getLastProducerCall('orders');\n * expect(lastCall?.payload).toMatchObject({ orderId: '123' });\n * });\n * ```\n */\nexport function createMessagingTestHarness(): MessagingTestHarness {\n const producerCalls: RecordedProducerCall[] = [];\n const consumerCalls: RecordedConsumerCall[] = [];\n const rebalanceEvents: RecordedRebalanceEvent[] = [];\n\n return {\n producerCalls,\n consumerCalls,\n rebalanceEvents,\n\n recordProducerCall(call) {\n producerCalls.push({\n ...call,\n timestamp: Date.now(),\n });\n },\n\n recordConsumerCall(call) {\n consumerCalls.push({\n ...call,\n timestamp: Date.now(),\n });\n },\n\n recordRebalanceEvent(event) {\n rebalanceEvents.push(event);\n },\n\n createMockMessage<T>(\n payload: T,\n options: Partial<MockMessage<T>> = {},\n ): MockMessage<T> {\n return {\n payload,\n headers: options.headers ?? this.createMockTraceHeaders(),\n offset: options.offset ?? Math.floor(Math.random() * 10_000),\n partition: options.partition ?? 0,\n key: options.key,\n messageId: options.messageId ?? `msg-${randomHex(8)}`,\n timestamp: options.timestamp ?? Date.now(),\n };\n },\n\n createMockTraceHeaders(\n traceId?: string,\n spanId?: string,\n ): Record<string, string> {\n const tid = traceId ?? randomHex(32);\n const sid = spanId ?? randomHex(16);\n return {\n traceparent: `00-${tid}-${sid}-01`,\n };\n },\n\n assertProducerCalled(\n destination: string,\n options: ProducerAssertionOptions = {},\n ) {\n const calls = producerCalls.filter((c) => c.destination === destination);\n\n if (calls.length === 0) {\n throw new Error(\n `Expected producer to be called for destination '${destination}', but it was not called`,\n );\n }\n\n if (\n options.messageCount !== undefined &&\n calls.length !== options.messageCount\n ) {\n throw new Error(\n `Expected ${options.messageCount} producer calls for '${destination}', got ${calls.length}`,\n );\n }\n\n if (options.hasTraceHeaders) {\n const withoutHeaders = calls.filter((c) => !c.headers?.traceparent);\n if (withoutHeaders.length > 0) {\n throw new Error(\n `Expected all producer calls for '${destination}' to have trace headers, but ${withoutHeaders.length} did not`,\n );\n }\n }\n\n if (options.traceId) {\n const matchingTraceId = calls.filter(\n (c) => c.traceId === options.traceId,\n );\n if (matchingTraceId.length === 0) {\n throw new Error(\n `Expected producer call for '${destination}' with traceId '${options.traceId}', but none found`,\n );\n }\n }\n\n if (options.payloadMatcher) {\n const matching = calls.filter((c) =>\n options.payloadMatcher!(c.payload),\n );\n if (matching.length === 0) {\n throw new Error(\n `Expected producer call for '${destination}' to match payload matcher, but none did`,\n );\n }\n }\n },\n\n assertProducerNotCalled(destination?: string) {\n if (destination) {\n const calls = producerCalls.filter(\n (c) => c.destination === destination,\n );\n if (calls.length > 0) {\n throw new Error(\n `Expected producer not to be called for '${destination}', but it was called ${calls.length} times`,\n );\n }\n } else {\n if (producerCalls.length > 0) {\n throw new Error(\n `Expected no producer calls, but ${producerCalls.length} calls were made`,\n );\n }\n }\n },\n\n assertConsumerProcessed(\n destination: string,\n options: ConsumerAssertionOptions = {},\n ) {\n const calls = consumerCalls.filter((c) => c.destination === destination);\n\n if (calls.length === 0) {\n throw new Error(\n `Expected consumer to process messages for destination '${destination}', but none were processed`,\n );\n }\n\n if (\n options.messageCount !== undefined &&\n calls.length !== options.messageCount\n ) {\n throw new Error(\n `Expected ${options.messageCount} consumer calls for '${destination}', got ${calls.length}`,\n );\n }\n\n if (options.consumerGroup) {\n const wrongGroup = calls.filter(\n (c) => c.consumerGroup !== options.consumerGroup,\n );\n if (wrongGroup.length > 0) {\n throw new Error(\n `Expected consumer group '${options.consumerGroup}' for '${destination}', but found different groups`,\n );\n }\n }\n\n if (options.hasProducerLinks) {\n const withoutLinks = calls.filter((c) => c.producerLinks.length === 0);\n if (withoutLinks.length > 0) {\n throw new Error(\n `Expected all consumer calls for '${destination}' to have producer links, but ${withoutLinks.length} did not`,\n );\n }\n }\n\n if (options.hasDuplicates !== undefined) {\n const duplicates = calls.filter((c) => c.isDuplicate);\n if (options.hasDuplicates && duplicates.length === 0) {\n throw new Error(\n `Expected duplicate messages for '${destination}', but none were detected`,\n );\n }\n if (!options.hasDuplicates && duplicates.length > 0) {\n throw new Error(\n `Expected no duplicate messages for '${destination}', but ${duplicates.length} were detected`,\n );\n }\n }\n\n if (options.hasOutOfOrder !== undefined) {\n const outOfOrder = calls.filter((c) => c.outOfOrderInfo !== null);\n if (options.hasOutOfOrder && outOfOrder.length === 0) {\n throw new Error(\n `Expected out-of-order messages for '${destination}', but none were detected`,\n );\n }\n if (!options.hasOutOfOrder && outOfOrder.length > 0) {\n throw new Error(\n `Expected no out-of-order messages for '${destination}', but ${outOfOrder.length} were detected`,\n );\n }\n }\n\n if (options.hasDLQ !== undefined) {\n const dlqCalls = calls.filter((c) => c.dlqReason !== undefined);\n if (options.hasDLQ && dlqCalls.length === 0) {\n throw new Error(\n `Expected DLQ routing for '${destination}', but none occurred`,\n );\n }\n if (!options.hasDLQ && dlqCalls.length > 0) {\n throw new Error(\n `Expected no DLQ routing for '${destination}', but ${dlqCalls.length} occurred`,\n );\n }\n }\n },\n\n assertConsumerNotCalled(destination?: string) {\n if (destination) {\n const calls = consumerCalls.filter(\n (c) => c.destination === destination,\n );\n if (calls.length > 0) {\n throw new Error(\n `Expected consumer not to be called for '${destination}', but it processed ${calls.length} messages`,\n );\n }\n } else {\n if (consumerCalls.length > 0) {\n throw new Error(\n `Expected no consumer calls, but ${consumerCalls.length} messages were processed`,\n );\n }\n }\n },\n\n assertRebalanceOccurred(\n destination: string,\n type: RebalanceEvent['type'],\n partitionCount?: number,\n ) {\n const events = rebalanceEvents.filter(\n (e) => e.destination === destination && e.type === type,\n );\n\n if (events.length === 0) {\n throw new Error(\n `Expected rebalance '${type}' for '${destination}', but none occurred`,\n );\n }\n\n if (partitionCount !== undefined) {\n const matching = events.filter(\n (e) => e.partitions.length === partitionCount,\n );\n if (matching.length === 0) {\n throw new Error(\n `Expected rebalance '${type}' for '${destination}' with ${partitionCount} partitions, but none matched`,\n );\n }\n }\n },\n\n getProducerCalls(destination?: string) {\n if (destination) {\n return producerCalls.filter((c) => c.destination === destination);\n }\n return [...producerCalls];\n },\n\n getConsumerCalls(destination?: string) {\n if (destination) {\n return consumerCalls.filter((c) => c.destination === destination);\n }\n return [...consumerCalls];\n },\n\n getLastProducerCall(destination?: string) {\n const calls = this.getProducerCalls(destination);\n return calls.at(-1);\n },\n\n getLastConsumerCall(destination?: string) {\n const calls = this.getConsumerCalls(destination);\n return calls.at(-1);\n },\n\n reset() {\n producerCalls.length = 0;\n consumerCalls.length = 0;\n rebalanceEvents.length = 0;\n },\n\n shutdown() {\n this.reset();\n },\n };\n}\n\n// ============================================================================\n// Mock Broker\n// ============================================================================\n\n/**\n * Mock message broker for testing\n */\nexport interface MockMessageBroker {\n /** Topics/queues in the broker */\n topics: Map<string, MockMessage[]>;\n\n /**\n * Publish a message to a topic\n */\n publish(topic: string, message: MockMessage): void;\n\n /**\n * Consume messages from a topic\n */\n consume(topic: string, count?: number): MockMessage[];\n\n /**\n * Peek at messages without consuming\n */\n peek(topic: string, count?: number): MockMessage[];\n\n /**\n * Get message count for topic\n */\n getMessageCount(topic: string): number;\n\n /**\n * Clear all messages\n */\n clear(topic?: string): void;\n\n /**\n * Create a topic\n */\n createTopic(topic: string): void;\n\n /**\n * Delete a topic\n */\n deleteTopic(topic: string): void;\n\n /**\n * List all topics\n */\n listTopics(): string[];\n}\n\n/**\n * Create a mock message broker for testing\n *\n * Simulates a message broker (Kafka, SQS, RabbitMQ, etc.) for unit testing.\n *\n * @example\n * ```typescript\n * const broker = createMockMessageBroker();\n *\n * // Producer publishes\n * broker.publish('orders', { payload: { orderId: '123' }, headers: {} });\n *\n * // Consumer receives\n * const messages = broker.consume('orders');\n * expect(messages).toHaveLength(1);\n * expect(messages[0].payload).toEqual({ orderId: '123' });\n * ```\n */\nexport function createMockMessageBroker(): MockMessageBroker {\n const topics = new Map<string, MockMessage[]>();\n\n return {\n topics,\n\n publish(topic: string, message: MockMessage) {\n if (!topics.has(topic)) {\n topics.set(topic, []);\n }\n topics.get(topic)!.push({\n ...message,\n timestamp: message.timestamp ?? Date.now(),\n offset: message.offset ?? topics.get(topic)!.length,\n });\n },\n\n consume(topic: string, count?: number) {\n const messages = topics.get(topic) ?? [];\n if (count === undefined) {\n const all = [...messages];\n messages.length = 0;\n return all;\n }\n return messages.splice(0, count);\n },\n\n peek(topic: string, count?: number) {\n const messages = topics.get(topic) ?? [];\n if (count === undefined) {\n return [...messages];\n }\n return messages.slice(0, count);\n },\n\n getMessageCount(topic: string) {\n return topics.get(topic)?.length ?? 0;\n },\n\n clear(topic?: string) {\n if (topic) {\n topics.set(topic, []);\n } else {\n topics.clear();\n }\n },\n\n createTopic(topic: string) {\n if (!topics.has(topic)) {\n topics.set(topic, []);\n }\n },\n\n deleteTopic(topic: string) {\n topics.delete(topic);\n },\n\n listTopics() {\n return [...topics.keys()];\n },\n };\n}\n\n// ============================================================================\n// Context Propagation Helpers\n// ============================================================================\n\n/**\n * Extract trace ID from traceparent header\n */\nexport function extractTraceIdFromHeader(traceparent: string): string | null {\n const parts = traceparent.split('-');\n if (parts.length >= 3 && parts[1] !== undefined) {\n return parts[1];\n }\n return null;\n}\n\n/**\n * Extract span ID from traceparent header\n */\nexport function extractSpanIdFromHeader(traceparent: string): string | null {\n const parts = traceparent.split('-');\n if (parts.length >= 4 && parts[2] !== undefined) {\n return parts[2];\n }\n return null;\n}\n\n/**\n * Create a mock span context\n */\nexport function createMockSpanContext(\n traceId?: string,\n spanId?: string,\n): SpanContext {\n return {\n traceId: traceId ?? randomHex(32),\n spanId: spanId ?? randomHex(16),\n traceFlags: 1,\n isRemote: true,\n };\n}\n\n/**\n * Create a mock link to a producer span\n */\nexport function createMockProducerLink(\n traceId?: string,\n spanId?: string,\n): Link {\n return {\n context: createMockSpanContext(traceId, spanId),\n attributes: {\n 'messaging.link.source': 'producer',\n },\n };\n}\n\n// ============================================================================\n// Scenario Builders\n// ============================================================================\n\n/**\n * Create a batch of mock messages\n */\nexport function createMockMessageBatch<T>(\n payloads: T[],\n options: {\n startOffset?: number;\n partition?: number;\n addTraceHeaders?: boolean;\n traceId?: string;\n } = {},\n): MockMessage<T>[] {\n const startOffset = options.startOffset ?? 0;\n const addTraceHeaders = options.addTraceHeaders ?? true;\n const traceId = options.traceId ?? randomHex(32);\n\n return payloads.map((payload, index) => ({\n payload,\n headers: addTraceHeaders\n ? { traceparent: `00-${traceId}-${randomHex(16)}-01` }\n : undefined,\n offset: startOffset + index,\n partition: options.partition ?? 0,\n messageId: `msg-${randomHex(8)}`,\n timestamp: Date.now() + index,\n }));\n}\n\n/**\n * Create a rebalance scenario\n */\nexport function createRebalanceScenario(\n topic: string,\n consumerGroup: string,\n partitions: number[],\n): {\n assignEvent: RecordedRebalanceEvent;\n revokeEvent: RecordedRebalanceEvent;\n} {\n const assignments: PartitionAssignment[] = partitions.map((p) => ({\n topic,\n partition: p,\n offset: 0,\n }));\n\n return {\n assignEvent: {\n type: 'assigned',\n partitions: assignments,\n timestamp: Date.now(),\n generation: 1,\n destination: topic,\n consumerGroup,\n },\n revokeEvent: {\n type: 'revoked',\n partitions: assignments,\n timestamp: Date.now() + 1000,\n generation: 2,\n destination: topic,\n consumerGroup,\n },\n };\n}\n\n/**\n * Create an out-of-order scenario\n */\nexport function createOutOfOrderScenario<T>(\n payloads: T[],\n outOfOrderIndices: number[],\n): MockMessage<T>[] {\n const messages = createMockMessageBatch(payloads, { addTraceHeaders: true });\n\n // Shuffle specified indices to create out-of-order scenario\n const shuffled = [...messages];\n for (const index of outOfOrderIndices) {\n if (index > 0 && index < shuffled.length) {\n // Swap with previous to create out-of-order\n const prev = shuffled[index - 1]!;\n const curr = shuffled[index]!;\n shuffled[index - 1] = curr;\n shuffled[index] = prev;\n }\n }\n\n return shuffled;\n}\n\n/**\n * Create a duplicate message scenario\n */\nexport function createDuplicateScenario<T>(\n payloads: T[],\n duplicateIndices: number[],\n): MockMessage<T>[] {\n const messages = createMockMessageBatch(payloads, { addTraceHeaders: true });\n const result = [...messages];\n\n for (const index of duplicateIndices) {\n const originalMessage = messages[index];\n if (index >= 0 && index < messages.length && originalMessage) {\n // Insert duplicate after the original\n result.splice(index + 1, 0, { ...originalMessage });\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -1,219 +1,189 @@
1
- import { Link, SpanContext } from '@opentelemetry/api';
2
- import { OutOfOrderInfo, RebalanceEvent } from './messaging.cjs';
3
- import './trace-context-DbGKd1Rn.cjs';
4
-
5
- /**
6
- * Testing utilities for messaging instrumentation
7
- *
8
- * Provides mock producers, consumers, and assertion helpers
9
- * for testing event-driven code with Autotel's messaging module.
10
- *
11
- * @example Basic test setup
12
- * ```typescript
13
- * import { createMessagingTestHarness } from 'autotel/messaging-testing';
14
- *
15
- * describe('Order processing', () => {
16
- * const harness = createMessagingTestHarness();
17
- *
18
- * beforeEach(() => harness.reset());
19
- * afterAll(() => harness.shutdown());
20
- *
21
- * it('should process order and publish event', async () => {
22
- * await processOrder({ id: 'order-123' });
23
- *
24
- * harness.assertProducerCalled('orders', {
25
- * messageCount: 1,
26
- * hasTraceHeaders: true,
27
- * });
28
- * });
29
- * });
30
- * ```
31
- *
32
- * @module
33
- */
1
+ import { OutOfOrderInfo, RebalanceEvent } from "./messaging.cjs";
2
+ import { Link, SpanContext } from "@opentelemetry/api";
34
3
 
4
+ //#region src/messaging-testing.d.ts
35
5
  /**
36
6
  * Recorded producer call
37
7
  */
38
8
  interface RecordedProducerCall {
39
- /** Destination (topic/queue) */
40
- destination: string;
41
- /** System (kafka, sqs, etc.) */
42
- system: string;
43
- /** Message payload */
44
- payload: unknown;
45
- /** Headers injected */
46
- headers: Record<string, string>;
47
- /** Timestamp of call */
48
- timestamp: number;
49
- /** Trace ID from headers */
50
- traceId?: string;
51
- /** Span ID from headers */
52
- spanId?: string;
9
+ /** Destination (topic/queue) */
10
+ destination: string;
11
+ /** System (kafka, sqs, etc.) */
12
+ system: string;
13
+ /** Message payload */
14
+ payload: unknown;
15
+ /** Headers injected */
16
+ headers: Record<string, string>;
17
+ /** Timestamp of call */
18
+ timestamp: number;
19
+ /** Trace ID from headers */
20
+ traceId?: string;
21
+ /** Span ID from headers */
22
+ spanId?: string;
53
23
  }
54
24
  /**
55
25
  * Recorded consumer call
56
26
  */
57
27
  interface RecordedConsumerCall {
58
- /** Destination (topic/queue) */
59
- destination: string;
60
- /** System (kafka, sqs, etc.) */
61
- system: string;
62
- /** Consumer group */
63
- consumerGroup?: string;
64
- /** Message payload */
65
- payload: unknown;
66
- /** Headers extracted */
67
- headers?: Record<string, string>;
68
- /** Timestamp of call */
69
- timestamp: number;
70
- /** Producer links extracted */
71
- producerLinks: Link[];
72
- /** Whether message was duplicate */
73
- isDuplicate: boolean;
74
- /** Out of order info if detected */
75
- outOfOrderInfo: OutOfOrderInfo | null;
76
- /** DLQ reason if routed to DLQ */
77
- dlqReason?: string;
78
- /** Retry attempt number */
79
- retryAttempt?: number;
28
+ /** Destination (topic/queue) */
29
+ destination: string;
30
+ /** System (kafka, sqs, etc.) */
31
+ system: string;
32
+ /** Consumer group */
33
+ consumerGroup?: string;
34
+ /** Message payload */
35
+ payload: unknown;
36
+ /** Headers extracted */
37
+ headers?: Record<string, string>;
38
+ /** Timestamp of call */
39
+ timestamp: number;
40
+ /** Producer links extracted */
41
+ producerLinks: Link[];
42
+ /** Whether message was duplicate */
43
+ isDuplicate: boolean;
44
+ /** Out of order info if detected */
45
+ outOfOrderInfo: OutOfOrderInfo | null;
46
+ /** DLQ reason if routed to DLQ */
47
+ dlqReason?: string;
48
+ /** Retry attempt number */
49
+ retryAttempt?: number;
80
50
  }
81
51
  /**
82
52
  * Recorded rebalance event
83
53
  */
84
54
  interface RecordedRebalanceEvent extends RebalanceEvent {
85
- /** Destination (topic) */
86
- destination: string;
87
- /** Consumer group */
88
- consumerGroup: string;
55
+ /** Destination (topic) */
56
+ destination: string;
57
+ /** Consumer group */
58
+ consumerGroup: string;
89
59
  }
90
60
  /**
91
61
  * Mock message for testing
92
62
  */
93
63
  interface MockMessage<T = unknown> {
94
- /** Message payload */
95
- payload: T;
96
- /** Headers */
97
- headers?: Record<string, string>;
98
- /** Offset/sequence number */
99
- offset?: number;
100
- /** Partition */
101
- partition?: number;
102
- /** Key */
103
- key?: string;
104
- /** Message ID */
105
- messageId?: string;
106
- /** Timestamp */
107
- timestamp?: number;
64
+ /** Message payload */
65
+ payload: T;
66
+ /** Headers */
67
+ headers?: Record<string, string>;
68
+ /** Offset/sequence number */
69
+ offset?: number;
70
+ /** Partition */
71
+ partition?: number;
72
+ /** Key */
73
+ key?: string;
74
+ /** Message ID */
75
+ messageId?: string;
76
+ /** Timestamp */
77
+ timestamp?: number;
108
78
  }
109
79
  /**
110
80
  * Producer assertion options
111
81
  */
112
82
  interface ProducerAssertionOptions {
113
- /** Expected number of messages */
114
- messageCount?: number;
115
- /** Whether trace headers should be present */
116
- hasTraceHeaders?: boolean;
117
- /** Expected destination */
118
- destination?: string;
119
- /** Custom matcher for payload */
120
- payloadMatcher?: (payload: unknown) => boolean;
121
- /** Expected trace ID */
122
- traceId?: string;
83
+ /** Expected number of messages */
84
+ messageCount?: number;
85
+ /** Whether trace headers should be present */
86
+ hasTraceHeaders?: boolean;
87
+ /** Expected destination */
88
+ destination?: string;
89
+ /** Custom matcher for payload */
90
+ payloadMatcher?: (payload: unknown) => boolean;
91
+ /** Expected trace ID */
92
+ traceId?: string;
123
93
  }
124
94
  /**
125
95
  * Consumer assertion options
126
96
  */
127
97
  interface ConsumerAssertionOptions {
128
- /** Expected number of messages processed */
129
- messageCount?: number;
130
- /** Whether producer links should be present */
131
- hasProducerLinks?: boolean;
132
- /** Expected destination */
133
- destination?: string;
134
- /** Expected consumer group */
135
- consumerGroup?: string;
136
- /** Whether any messages were duplicates */
137
- hasDuplicates?: boolean;
138
- /** Whether any messages were out of order */
139
- hasOutOfOrder?: boolean;
140
- /** Whether any messages went to DLQ */
141
- hasDLQ?: boolean;
98
+ /** Expected number of messages processed */
99
+ messageCount?: number;
100
+ /** Whether producer links should be present */
101
+ hasProducerLinks?: boolean;
102
+ /** Expected destination */
103
+ destination?: string;
104
+ /** Expected consumer group */
105
+ consumerGroup?: string;
106
+ /** Whether any messages were duplicates */
107
+ hasDuplicates?: boolean;
108
+ /** Whether any messages were out of order */
109
+ hasOutOfOrder?: boolean;
110
+ /** Whether any messages went to DLQ */
111
+ hasDLQ?: boolean;
142
112
  }
143
113
  /**
144
114
  * Messaging test harness
145
115
  */
146
116
  interface MessagingTestHarness {
147
- /** All recorded producer calls */
148
- producerCalls: RecordedProducerCall[];
149
- /** All recorded consumer calls */
150
- consumerCalls: RecordedConsumerCall[];
151
- /** All recorded rebalance events */
152
- rebalanceEvents: RecordedRebalanceEvent[];
153
- /**
154
- * Record a producer call
155
- */
156
- recordProducerCall(call: Omit<RecordedProducerCall, 'timestamp'>): void;
157
- /**
158
- * Record a consumer call
159
- */
160
- recordConsumerCall(call: Omit<RecordedConsumerCall, 'timestamp'>): void;
161
- /**
162
- * Record a rebalance event
163
- */
164
- recordRebalanceEvent(event: RecordedRebalanceEvent): void;
165
- /**
166
- * Create a mock message with trace headers
167
- */
168
- createMockMessage<T>(payload: T, options?: Partial<MockMessage<T>>): MockMessage<T>;
169
- /**
170
- * Create mock trace headers
171
- */
172
- createMockTraceHeaders(traceId?: string, spanId?: string): Record<string, string>;
173
- /**
174
- * Assert producer was called with expected options
175
- */
176
- assertProducerCalled(destination: string, options?: ProducerAssertionOptions): void;
177
- /**
178
- * Assert producer was not called
179
- */
180
- assertProducerNotCalled(destination?: string): void;
181
- /**
182
- * Assert consumer processed messages with expected options
183
- */
184
- assertConsumerProcessed(destination: string, options?: ConsumerAssertionOptions): void;
185
- /**
186
- * Assert consumer was not called
187
- */
188
- assertConsumerNotCalled(destination?: string): void;
189
- /**
190
- * Assert rebalance occurred
191
- */
192
- assertRebalanceOccurred(destination: string, type: RebalanceEvent['type'], partitionCount?: number): void;
193
- /**
194
- * Get producer calls for destination
195
- */
196
- getProducerCalls(destination?: string): RecordedProducerCall[];
197
- /**
198
- * Get consumer calls for destination
199
- */
200
- getConsumerCalls(destination?: string): RecordedConsumerCall[];
201
- /**
202
- * Get the last producer call
203
- */
204
- getLastProducerCall(destination?: string): RecordedProducerCall | undefined;
205
- /**
206
- * Get the last consumer call
207
- */
208
- getLastConsumerCall(destination?: string): RecordedConsumerCall | undefined;
209
- /**
210
- * Reset all recorded calls
211
- */
212
- reset(): void;
213
- /**
214
- * Shutdown the harness
215
- */
216
- shutdown(): void;
117
+ /** All recorded producer calls */
118
+ producerCalls: RecordedProducerCall[];
119
+ /** All recorded consumer calls */
120
+ consumerCalls: RecordedConsumerCall[];
121
+ /** All recorded rebalance events */
122
+ rebalanceEvents: RecordedRebalanceEvent[];
123
+ /**
124
+ * Record a producer call
125
+ */
126
+ recordProducerCall(call: Omit<RecordedProducerCall, 'timestamp'>): void;
127
+ /**
128
+ * Record a consumer call
129
+ */
130
+ recordConsumerCall(call: Omit<RecordedConsumerCall, 'timestamp'>): void;
131
+ /**
132
+ * Record a rebalance event
133
+ */
134
+ recordRebalanceEvent(event: RecordedRebalanceEvent): void;
135
+ /**
136
+ * Create a mock message with trace headers
137
+ */
138
+ createMockMessage<T>(payload: T, options?: Partial<MockMessage<T>>): MockMessage<T>;
139
+ /**
140
+ * Create mock trace headers
141
+ */
142
+ createMockTraceHeaders(traceId?: string, spanId?: string): Record<string, string>;
143
+ /**
144
+ * Assert producer was called with expected options
145
+ */
146
+ assertProducerCalled(destination: string, options?: ProducerAssertionOptions): void;
147
+ /**
148
+ * Assert producer was not called
149
+ */
150
+ assertProducerNotCalled(destination?: string): void;
151
+ /**
152
+ * Assert consumer processed messages with expected options
153
+ */
154
+ assertConsumerProcessed(destination: string, options?: ConsumerAssertionOptions): void;
155
+ /**
156
+ * Assert consumer was not called
157
+ */
158
+ assertConsumerNotCalled(destination?: string): void;
159
+ /**
160
+ * Assert rebalance occurred
161
+ */
162
+ assertRebalanceOccurred(destination: string, type: RebalanceEvent['type'], partitionCount?: number): void;
163
+ /**
164
+ * Get producer calls for destination
165
+ */
166
+ getProducerCalls(destination?: string): RecordedProducerCall[];
167
+ /**
168
+ * Get consumer calls for destination
169
+ */
170
+ getConsumerCalls(destination?: string): RecordedConsumerCall[];
171
+ /**
172
+ * Get the last producer call
173
+ */
174
+ getLastProducerCall(destination?: string): RecordedProducerCall | undefined;
175
+ /**
176
+ * Get the last consumer call
177
+ */
178
+ getLastConsumerCall(destination?: string): RecordedConsumerCall | undefined;
179
+ /**
180
+ * Reset all recorded calls
181
+ */
182
+ reset(): void;
183
+ /**
184
+ * Shutdown the harness
185
+ */
186
+ shutdown(): void;
217
187
  }
218
188
  /**
219
189
  * Create a messaging test harness
@@ -247,40 +217,40 @@ declare function createMessagingTestHarness(): MessagingTestHarness;
247
217
  * Mock message broker for testing
248
218
  */
249
219
  interface MockMessageBroker {
250
- /** Topics/queues in the broker */
251
- topics: Map<string, MockMessage[]>;
252
- /**
253
- * Publish a message to a topic
254
- */
255
- publish(topic: string, message: MockMessage): void;
256
- /**
257
- * Consume messages from a topic
258
- */
259
- consume(topic: string, count?: number): MockMessage[];
260
- /**
261
- * Peek at messages without consuming
262
- */
263
- peek(topic: string, count?: number): MockMessage[];
264
- /**
265
- * Get message count for topic
266
- */
267
- getMessageCount(topic: string): number;
268
- /**
269
- * Clear all messages
270
- */
271
- clear(topic?: string): void;
272
- /**
273
- * Create a topic
274
- */
275
- createTopic(topic: string): void;
276
- /**
277
- * Delete a topic
278
- */
279
- deleteTopic(topic: string): void;
280
- /**
281
- * List all topics
282
- */
283
- listTopics(): string[];
220
+ /** Topics/queues in the broker */
221
+ topics: Map<string, MockMessage[]>;
222
+ /**
223
+ * Publish a message to a topic
224
+ */
225
+ publish(topic: string, message: MockMessage): void;
226
+ /**
227
+ * Consume messages from a topic
228
+ */
229
+ consume(topic: string, count?: number): MockMessage[];
230
+ /**
231
+ * Peek at messages without consuming
232
+ */
233
+ peek(topic: string, count?: number): MockMessage[];
234
+ /**
235
+ * Get message count for topic
236
+ */
237
+ getMessageCount(topic: string): number;
238
+ /**
239
+ * Clear all messages
240
+ */
241
+ clear(topic?: string): void;
242
+ /**
243
+ * Create a topic
244
+ */
245
+ createTopic(topic: string): void;
246
+ /**
247
+ * Delete a topic
248
+ */
249
+ deleteTopic(topic: string): void;
250
+ /**
251
+ * List all topics
252
+ */
253
+ listTopics(): string[];
284
254
  }
285
255
  /**
286
256
  * Create a mock message broker for testing
@@ -321,17 +291,17 @@ declare function createMockProducerLink(traceId?: string, spanId?: string): Link
321
291
  * Create a batch of mock messages
322
292
  */
323
293
  declare function createMockMessageBatch<T>(payloads: T[], options?: {
324
- startOffset?: number;
325
- partition?: number;
326
- addTraceHeaders?: boolean;
327
- traceId?: string;
294
+ startOffset?: number;
295
+ partition?: number;
296
+ addTraceHeaders?: boolean;
297
+ traceId?: string;
328
298
  }): MockMessage<T>[];
329
299
  /**
330
300
  * Create a rebalance scenario
331
301
  */
332
302
  declare function createRebalanceScenario(topic: string, consumerGroup: string, partitions: number[]): {
333
- assignEvent: RecordedRebalanceEvent;
334
- revokeEvent: RecordedRebalanceEvent;
303
+ assignEvent: RecordedRebalanceEvent;
304
+ revokeEvent: RecordedRebalanceEvent;
335
305
  };
336
306
  /**
337
307
  * Create an out-of-order scenario
@@ -341,5 +311,6 @@ declare function createOutOfOrderScenario<T>(payloads: T[], outOfOrderIndices: n
341
311
  * Create a duplicate message scenario
342
312
  */
343
313
  declare function createDuplicateScenario<T>(payloads: T[], duplicateIndices: number[]): MockMessage<T>[];
344
-
345
- export { type ConsumerAssertionOptions, type MessagingTestHarness, type MockMessage, type MockMessageBroker, type ProducerAssertionOptions, type RecordedConsumerCall, type RecordedProducerCall, type RecordedRebalanceEvent, createDuplicateScenario, createMessagingTestHarness, createMockMessageBatch, createMockMessageBroker, createMockProducerLink, createMockSpanContext, createOutOfOrderScenario, createRebalanceScenario, extractSpanIdFromHeader, extractTraceIdFromHeader };
314
+ //#endregion
315
+ export { ConsumerAssertionOptions, MessagingTestHarness, MockMessage, MockMessageBroker, ProducerAssertionOptions, RecordedConsumerCall, RecordedProducerCall, RecordedRebalanceEvent, createDuplicateScenario, createMessagingTestHarness, createMockMessageBatch, createMockMessageBroker, createMockProducerLink, createMockSpanContext, createOutOfOrderScenario, createRebalanceScenario, extractSpanIdFromHeader, extractTraceIdFromHeader };
316
+ //# sourceMappingURL=messaging-testing.d.cts.map