@lindorm/iris 0.3.0 → 0.4.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 (997) hide show
  1. package/README.md +334 -901
  2. package/dist/classes/IrisSession.d.ts +6 -4
  3. package/dist/classes/IrisSession.d.ts.map +1 -1
  4. package/dist/classes/IrisSession.js +6 -5
  5. package/dist/classes/IrisSession.js.map +1 -1
  6. package/dist/classes/IrisSource.d.ts +6 -5
  7. package/dist/classes/IrisSource.d.ts.map +1 -1
  8. package/dist/classes/IrisSource.js +52 -76
  9. package/dist/classes/IrisSource.js.map +1 -1
  10. package/dist/classes/index.d.ts +2 -2
  11. package/dist/classes/index.d.ts.map +1 -1
  12. package/dist/classes/index.js +2 -18
  13. package/dist/classes/index.js.map +1 -1
  14. package/dist/cli.js +9 -11
  15. package/dist/cli.js.map +1 -1
  16. package/dist/decorators/AbstractMessage.js +3 -7
  17. package/dist/decorators/AbstractMessage.js.map +1 -1
  18. package/dist/decorators/AfterConsume.d.ts +1 -1
  19. package/dist/decorators/AfterConsume.d.ts.map +1 -1
  20. package/dist/decorators/AfterConsume.js +3 -7
  21. package/dist/decorators/AfterConsume.js.map +1 -1
  22. package/dist/decorators/AfterPublish.d.ts +1 -1
  23. package/dist/decorators/AfterPublish.d.ts.map +1 -1
  24. package/dist/decorators/AfterPublish.js +3 -7
  25. package/dist/decorators/AfterPublish.js.map +1 -1
  26. package/dist/decorators/BeforeConsume.d.ts +1 -1
  27. package/dist/decorators/BeforeConsume.d.ts.map +1 -1
  28. package/dist/decorators/BeforeConsume.js +3 -7
  29. package/dist/decorators/BeforeConsume.js.map +1 -1
  30. package/dist/decorators/BeforePublish.d.ts +1 -1
  31. package/dist/decorators/BeforePublish.d.ts.map +1 -1
  32. package/dist/decorators/BeforePublish.js +3 -7
  33. package/dist/decorators/BeforePublish.js.map +1 -1
  34. package/dist/decorators/Broadcast.js +3 -7
  35. package/dist/decorators/Broadcast.js.map +1 -1
  36. package/dist/decorators/Compressed.d.ts +1 -1
  37. package/dist/decorators/Compressed.d.ts.map +1 -1
  38. package/dist/decorators/Compressed.js +3 -7
  39. package/dist/decorators/Compressed.js.map +1 -1
  40. package/dist/decorators/CorrelationField.js +5 -9
  41. package/dist/decorators/CorrelationField.js.map +1 -1
  42. package/dist/decorators/DeadLetter.js +3 -7
  43. package/dist/decorators/DeadLetter.js.map +1 -1
  44. package/dist/decorators/Default.d.ts +1 -1
  45. package/dist/decorators/Default.d.ts.map +1 -1
  46. package/dist/decorators/Default.js +3 -7
  47. package/dist/decorators/Default.js.map +1 -1
  48. package/dist/decorators/Delay.js +5 -9
  49. package/dist/decorators/Delay.js.map +1 -1
  50. package/dist/decorators/Encrypted.js +3 -7
  51. package/dist/decorators/Encrypted.js.map +1 -1
  52. package/dist/decorators/Enum.js +3 -7
  53. package/dist/decorators/Enum.js.map +1 -1
  54. package/dist/decorators/Expiry.js +5 -9
  55. package/dist/decorators/Expiry.js.map +1 -1
  56. package/dist/decorators/Field.d.ts +1 -1
  57. package/dist/decorators/Field.d.ts.map +1 -1
  58. package/dist/decorators/Field.js +3 -7
  59. package/dist/decorators/Field.js.map +1 -1
  60. package/dist/decorators/Generated.d.ts +2 -2
  61. package/dist/decorators/Generated.d.ts.map +1 -1
  62. package/dist/decorators/Generated.js +3 -7
  63. package/dist/decorators/Generated.js.map +1 -1
  64. package/dist/decorators/Header.js +3 -7
  65. package/dist/decorators/Header.js.map +1 -1
  66. package/dist/decorators/IdentifierField.js +5 -9
  67. package/dist/decorators/IdentifierField.js.map +1 -1
  68. package/dist/decorators/MandatoryField.js +3 -7
  69. package/dist/decorators/MandatoryField.js.map +1 -1
  70. package/dist/decorators/Max.js +3 -7
  71. package/dist/decorators/Max.js.map +1 -1
  72. package/dist/decorators/Message.d.ts +1 -1
  73. package/dist/decorators/Message.d.ts.map +1 -1
  74. package/dist/decorators/Message.js +5 -9
  75. package/dist/decorators/Message.js.map +1 -1
  76. package/dist/decorators/Min.js +3 -7
  77. package/dist/decorators/Min.js.map +1 -1
  78. package/dist/decorators/Namespace.js +3 -7
  79. package/dist/decorators/Namespace.js.map +1 -1
  80. package/dist/decorators/Nullable.js +3 -7
  81. package/dist/decorators/Nullable.js.map +1 -1
  82. package/dist/decorators/OnConsumeError.d.ts +1 -1
  83. package/dist/decorators/OnConsumeError.d.ts.map +1 -1
  84. package/dist/decorators/OnConsumeError.js +3 -7
  85. package/dist/decorators/OnConsumeError.js.map +1 -1
  86. package/dist/decorators/OnCreate.d.ts +1 -1
  87. package/dist/decorators/OnCreate.d.ts.map +1 -1
  88. package/dist/decorators/OnCreate.js +3 -7
  89. package/dist/decorators/OnCreate.js.map +1 -1
  90. package/dist/decorators/OnHydrate.d.ts +1 -1
  91. package/dist/decorators/OnHydrate.d.ts.map +1 -1
  92. package/dist/decorators/OnHydrate.js +3 -7
  93. package/dist/decorators/OnHydrate.js.map +1 -1
  94. package/dist/decorators/OnValidate.d.ts +1 -1
  95. package/dist/decorators/OnValidate.d.ts.map +1 -1
  96. package/dist/decorators/OnValidate.js +3 -7
  97. package/dist/decorators/OnValidate.js.map +1 -1
  98. package/dist/decorators/Optional.js +3 -7
  99. package/dist/decorators/Optional.js.map +1 -1
  100. package/dist/decorators/Persistent.js +3 -7
  101. package/dist/decorators/Persistent.js.map +1 -1
  102. package/dist/decorators/PersistentField.js +3 -7
  103. package/dist/decorators/PersistentField.js.map +1 -1
  104. package/dist/decorators/Priority.js +5 -9
  105. package/dist/decorators/Priority.js.map +1 -1
  106. package/dist/decorators/Retry.d.ts +1 -1
  107. package/dist/decorators/Retry.d.ts.map +1 -1
  108. package/dist/decorators/Retry.js +3 -7
  109. package/dist/decorators/Retry.js.map +1 -1
  110. package/dist/decorators/Schema.js +3 -7
  111. package/dist/decorators/Schema.js.map +1 -1
  112. package/dist/decorators/TimestampField.js +3 -7
  113. package/dist/decorators/TimestampField.js.map +1 -1
  114. package/dist/decorators/Topic.js +3 -7
  115. package/dist/decorators/Topic.js.map +1 -1
  116. package/dist/decorators/Transform.d.ts +1 -1
  117. package/dist/decorators/Transform.d.ts.map +1 -1
  118. package/dist/decorators/Transform.js +3 -7
  119. package/dist/decorators/Transform.js.map +1 -1
  120. package/dist/decorators/Version.js +5 -9
  121. package/dist/decorators/Version.js.map +1 -1
  122. package/dist/decorators/index.d.ts +38 -38
  123. package/dist/decorators/index.d.ts.map +1 -1
  124. package/dist/decorators/index.js +38 -54
  125. package/dist/decorators/index.js.map +1 -1
  126. package/dist/errors/IrisDriverError.d.ts +1 -1
  127. package/dist/errors/IrisDriverError.d.ts.map +1 -1
  128. package/dist/errors/IrisDriverError.js +2 -6
  129. package/dist/errors/IrisDriverError.js.map +1 -1
  130. package/dist/errors/IrisError.js +2 -6
  131. package/dist/errors/IrisError.js.map +1 -1
  132. package/dist/errors/IrisMetadataError.d.ts +1 -1
  133. package/dist/errors/IrisMetadataError.d.ts.map +1 -1
  134. package/dist/errors/IrisMetadataError.js +2 -6
  135. package/dist/errors/IrisMetadataError.js.map +1 -1
  136. package/dist/errors/IrisNotSupportedError.d.ts +1 -1
  137. package/dist/errors/IrisNotSupportedError.d.ts.map +1 -1
  138. package/dist/errors/IrisNotSupportedError.js +2 -6
  139. package/dist/errors/IrisNotSupportedError.js.map +1 -1
  140. package/dist/errors/IrisPublishError.d.ts +1 -1
  141. package/dist/errors/IrisPublishError.d.ts.map +1 -1
  142. package/dist/errors/IrisPublishError.js +2 -6
  143. package/dist/errors/IrisPublishError.js.map +1 -1
  144. package/dist/errors/IrisScannerError.d.ts +1 -1
  145. package/dist/errors/IrisScannerError.d.ts.map +1 -1
  146. package/dist/errors/IrisScannerError.js +2 -6
  147. package/dist/errors/IrisScannerError.js.map +1 -1
  148. package/dist/errors/IrisSerializationError.d.ts +1 -1
  149. package/dist/errors/IrisSerializationError.d.ts.map +1 -1
  150. package/dist/errors/IrisSerializationError.js +2 -6
  151. package/dist/errors/IrisSerializationError.js.map +1 -1
  152. package/dist/errors/IrisSourceError.d.ts +1 -1
  153. package/dist/errors/IrisSourceError.d.ts.map +1 -1
  154. package/dist/errors/IrisSourceError.js +2 -6
  155. package/dist/errors/IrisSourceError.js.map +1 -1
  156. package/dist/errors/IrisTimeoutError.d.ts +1 -1
  157. package/dist/errors/IrisTimeoutError.d.ts.map +1 -1
  158. package/dist/errors/IrisTimeoutError.js +2 -6
  159. package/dist/errors/IrisTimeoutError.js.map +1 -1
  160. package/dist/errors/IrisTransportError.d.ts +1 -1
  161. package/dist/errors/IrisTransportError.d.ts.map +1 -1
  162. package/dist/errors/IrisTransportError.js +2 -6
  163. package/dist/errors/IrisTransportError.js.map +1 -1
  164. package/dist/errors/IrisValidationError.d.ts +1 -1
  165. package/dist/errors/IrisValidationError.d.ts.map +1 -1
  166. package/dist/errors/IrisValidationError.js +2 -6
  167. package/dist/errors/IrisValidationError.js.map +1 -1
  168. package/dist/errors/index.d.ts +11 -11
  169. package/dist/errors/index.d.ts.map +1 -1
  170. package/dist/errors/index.js +11 -27
  171. package/dist/errors/index.js.map +1 -1
  172. package/dist/index.d.ts +7 -6
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +7 -22
  175. package/dist/index.js.map +1 -1
  176. package/dist/interfaces/IrisDeadLetterStore.d.ts +1 -1
  177. package/dist/interfaces/IrisDeadLetterStore.d.ts.map +1 -1
  178. package/dist/interfaces/IrisDeadLetterStore.js +1 -2
  179. package/dist/interfaces/IrisDelayStore.d.ts +1 -1
  180. package/dist/interfaces/IrisDelayStore.d.ts.map +1 -1
  181. package/dist/interfaces/IrisDelayStore.js +1 -2
  182. package/dist/interfaces/IrisDriver.d.ts +9 -9
  183. package/dist/interfaces/IrisDriver.d.ts.map +1 -1
  184. package/dist/interfaces/IrisDriver.js +1 -2
  185. package/dist/interfaces/IrisMessageBus.d.ts +2 -2
  186. package/dist/interfaces/IrisMessageBus.d.ts.map +1 -1
  187. package/dist/interfaces/IrisMessageBus.js +1 -2
  188. package/dist/interfaces/IrisMessagingProvider.d.ts +8 -8
  189. package/dist/interfaces/IrisMessagingProvider.d.ts.map +1 -1
  190. package/dist/interfaces/IrisMessagingProvider.js +1 -2
  191. package/dist/interfaces/IrisPublisher.d.ts +2 -2
  192. package/dist/interfaces/IrisPublisher.d.ts.map +1 -1
  193. package/dist/interfaces/IrisPublisher.js +1 -2
  194. package/dist/interfaces/IrisRpcClient.d.ts +1 -1
  195. package/dist/interfaces/IrisRpcClient.d.ts.map +1 -1
  196. package/dist/interfaces/IrisRpcClient.js +1 -2
  197. package/dist/interfaces/IrisRpcServer.d.ts +1 -1
  198. package/dist/interfaces/IrisRpcServer.d.ts.map +1 -1
  199. package/dist/interfaces/IrisRpcServer.js +1 -2
  200. package/dist/interfaces/IrisSession.d.ts +1 -1
  201. package/dist/interfaces/IrisSession.d.ts.map +1 -1
  202. package/dist/interfaces/IrisSession.js +1 -2
  203. package/dist/interfaces/IrisSource.d.ts +5 -5
  204. package/dist/interfaces/IrisSource.d.ts.map +1 -1
  205. package/dist/interfaces/IrisSource.js +1 -2
  206. package/dist/interfaces/IrisStreamProcessor.d.ts +1 -1
  207. package/dist/interfaces/IrisStreamProcessor.d.ts.map +1 -1
  208. package/dist/interfaces/IrisStreamProcessor.js +1 -2
  209. package/dist/interfaces/IrisWorkerQueue.d.ts +2 -2
  210. package/dist/interfaces/IrisWorkerQueue.d.ts.map +1 -1
  211. package/dist/interfaces/IrisWorkerQueue.js +1 -2
  212. package/dist/interfaces/Message.js +1 -2
  213. package/dist/interfaces/MessageSubscriber.d.ts +1 -1
  214. package/dist/interfaces/MessageSubscriber.d.ts.map +1 -1
  215. package/dist/interfaces/MessageSubscriber.js +1 -2
  216. package/dist/interfaces/index.d.ts +13 -13
  217. package/dist/interfaces/index.d.ts.map +1 -1
  218. package/dist/interfaces/index.js +13 -29
  219. package/dist/interfaces/index.js.map +1 -1
  220. package/dist/internal/classes/DriverBase.d.ts +7 -6
  221. package/dist/internal/classes/DriverBase.d.ts.map +1 -1
  222. package/dist/internal/classes/DriverBase.js +14 -16
  223. package/dist/internal/classes/DriverBase.js.map +1 -1
  224. package/dist/internal/classes/DriverMessageBusBase.d.ts +4 -4
  225. package/dist/internal/classes/DriverMessageBusBase.d.ts.map +1 -1
  226. package/dist/internal/classes/DriverMessageBusBase.js +2 -6
  227. package/dist/internal/classes/DriverMessageBusBase.js.map +1 -1
  228. package/dist/internal/classes/DriverPublisherBase.d.ts +4 -4
  229. package/dist/internal/classes/DriverPublisherBase.d.ts.map +1 -1
  230. package/dist/internal/classes/DriverPublisherBase.js +2 -6
  231. package/dist/internal/classes/DriverPublisherBase.js.map +1 -1
  232. package/dist/internal/classes/DriverRpcClientBase.d.ts +6 -5
  233. package/dist/internal/classes/DriverRpcClientBase.d.ts.map +1 -1
  234. package/dist/internal/classes/DriverRpcClientBase.js +23 -27
  235. package/dist/internal/classes/DriverRpcClientBase.js.map +1 -1
  236. package/dist/internal/classes/DriverRpcServerBase.d.ts +6 -5
  237. package/dist/internal/classes/DriverRpcServerBase.d.ts.map +1 -1
  238. package/dist/internal/classes/DriverRpcServerBase.js +21 -25
  239. package/dist/internal/classes/DriverRpcServerBase.js.map +1 -1
  240. package/dist/internal/classes/DriverStreamPipelineBase.d.ts +7 -6
  241. package/dist/internal/classes/DriverStreamPipelineBase.d.ts.map +1 -1
  242. package/dist/internal/classes/DriverStreamPipelineBase.js +19 -23
  243. package/dist/internal/classes/DriverStreamPipelineBase.js.map +1 -1
  244. package/dist/internal/classes/DriverStreamProcessorBase.d.ts +6 -5
  245. package/dist/internal/classes/DriverStreamProcessorBase.d.ts.map +1 -1
  246. package/dist/internal/classes/DriverStreamProcessorBase.js +11 -15
  247. package/dist/internal/classes/DriverStreamProcessorBase.js.map +1 -1
  248. package/dist/internal/classes/DriverWorkerQueueBase.d.ts +4 -4
  249. package/dist/internal/classes/DriverWorkerQueueBase.d.ts.map +1 -1
  250. package/dist/internal/classes/DriverWorkerQueueBase.js +2 -6
  251. package/dist/internal/classes/DriverWorkerQueueBase.js.map +1 -1
  252. package/dist/internal/classes/index.d.ts +8 -8
  253. package/dist/internal/classes/index.d.ts.map +1 -1
  254. package/dist/internal/classes/index.js +8 -24
  255. package/dist/internal/classes/index.js.map +1 -1
  256. package/dist/internal/cli/commands/generate-message.js +4 -41
  257. package/dist/internal/cli/commands/generate-message.js.map +1 -1
  258. package/dist/internal/cli/commands/init.js +6 -43
  259. package/dist/internal/cli/commands/init.js.map +1 -1
  260. package/dist/internal/cli/commands/register-generate.js +3 -7
  261. package/dist/internal/cli/commands/register-generate.js.map +1 -1
  262. package/dist/internal/cli/commands/register-init.js +3 -7
  263. package/dist/internal/cli/commands/register-init.js.map +1 -1
  264. package/dist/internal/dead-letter/DeadLetterManager.d.ts +3 -3
  265. package/dist/internal/dead-letter/DeadLetterManager.d.ts.map +1 -1
  266. package/dist/internal/dead-letter/DeadLetterManager.js +3 -7
  267. package/dist/internal/dead-letter/DeadLetterManager.js.map +1 -1
  268. package/dist/internal/dead-letter/MemoryDeadLetterStore.d.ts +2 -2
  269. package/dist/internal/dead-letter/MemoryDeadLetterStore.d.ts.map +1 -1
  270. package/dist/internal/dead-letter/MemoryDeadLetterStore.js +1 -5
  271. package/dist/internal/dead-letter/MemoryDeadLetterStore.js.map +1 -1
  272. package/dist/internal/dead-letter/RedisDeadLetterStore.d.ts +2 -2
  273. package/dist/internal/dead-letter/RedisDeadLetterStore.d.ts.map +1 -1
  274. package/dist/internal/dead-letter/RedisDeadLetterStore.js +12 -16
  275. package/dist/internal/dead-letter/RedisDeadLetterStore.js.map +1 -1
  276. package/dist/internal/dead-letter/types.d.ts +1 -1
  277. package/dist/internal/dead-letter/types.d.ts.map +1 -1
  278. package/dist/internal/dead-letter/types.js +1 -2
  279. package/dist/internal/dead-letter/utils/create-dead-letter-store.d.ts +2 -2
  280. package/dist/internal/dead-letter/utils/create-dead-letter-store.d.ts.map +1 -1
  281. package/dist/internal/dead-letter/utils/create-dead-letter-store.js +6 -43
  282. package/dist/internal/dead-letter/utils/create-dead-letter-store.js.map +1 -1
  283. package/dist/internal/dead-letter/utils/serialize-helpers.d.ts +1 -1
  284. package/dist/internal/dead-letter/utils/serialize-helpers.d.ts.map +1 -1
  285. package/dist/internal/dead-letter/utils/serialize-helpers.js +2 -7
  286. package/dist/internal/dead-letter/utils/serialize-helpers.js.map +1 -1
  287. package/dist/internal/delay/DelayManager.d.ts +3 -3
  288. package/dist/internal/delay/DelayManager.d.ts.map +1 -1
  289. package/dist/internal/delay/DelayManager.js +3 -7
  290. package/dist/internal/delay/DelayManager.js.map +1 -1
  291. package/dist/internal/delay/MemoryDelayStore.d.ts +2 -2
  292. package/dist/internal/delay/MemoryDelayStore.d.ts.map +1 -1
  293. package/dist/internal/delay/MemoryDelayStore.js +1 -5
  294. package/dist/internal/delay/MemoryDelayStore.js.map +1 -1
  295. package/dist/internal/delay/RedisDelayStore.d.ts +2 -2
  296. package/dist/internal/delay/RedisDelayStore.d.ts.map +1 -1
  297. package/dist/internal/delay/RedisDelayStore.js +8 -12
  298. package/dist/internal/delay/RedisDelayStore.js.map +1 -1
  299. package/dist/internal/delay/types.d.ts +1 -1
  300. package/dist/internal/delay/types.d.ts.map +1 -1
  301. package/dist/internal/delay/types.js +1 -2
  302. package/dist/internal/delay/utils/create-delay-store.d.ts +2 -2
  303. package/dist/internal/delay/utils/create-delay-store.d.ts.map +1 -1
  304. package/dist/internal/delay/utils/create-delay-store.js +6 -43
  305. package/dist/internal/delay/utils/create-delay-store.js.map +1 -1
  306. package/dist/internal/delay/utils/serialize-helpers.d.ts +1 -1
  307. package/dist/internal/delay/utils/serialize-helpers.d.ts.map +1 -1
  308. package/dist/internal/delay/utils/serialize-helpers.js +2 -7
  309. package/dist/internal/delay/utils/serialize-helpers.js.map +1 -1
  310. package/dist/internal/drivers/kafka/classes/KafkaDriver.d.ts +10 -10
  311. package/dist/internal/drivers/kafka/classes/KafkaDriver.d.ts.map +1 -1
  312. package/dist/internal/drivers/kafka/classes/KafkaDriver.js +38 -75
  313. package/dist/internal/drivers/kafka/classes/KafkaDriver.js.map +1 -1
  314. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.d.ts +7 -7
  315. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.d.ts.map +1 -1
  316. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.js +26 -30
  317. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.js.map +1 -1
  318. package/dist/internal/drivers/kafka/classes/KafkaPublisher.d.ts +6 -6
  319. package/dist/internal/drivers/kafka/classes/KafkaPublisher.d.ts.map +1 -1
  320. package/dist/internal/drivers/kafka/classes/KafkaPublisher.js +4 -8
  321. package/dist/internal/drivers/kafka/classes/KafkaPublisher.js.map +1 -1
  322. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.d.ts +5 -4
  323. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.d.ts.map +1 -1
  324. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.js +21 -25
  325. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.js.map +1 -1
  326. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.d.ts +5 -4
  327. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.d.ts.map +1 -1
  328. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.js +18 -22
  329. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.js.map +1 -1
  330. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.d.ts +3 -3
  331. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.d.ts.map +1 -1
  332. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.js +29 -33
  333. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.js.map +1 -1
  334. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.d.ts +7 -6
  335. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.d.ts.map +1 -1
  336. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.js +5 -9
  337. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.js.map +1 -1
  338. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.d.ts +7 -7
  339. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.d.ts.map +1 -1
  340. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.js +26 -30
  341. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.js.map +1 -1
  342. package/dist/internal/drivers/kafka/classes/index.d.ts +8 -8
  343. package/dist/internal/drivers/kafka/classes/index.d.ts.map +1 -1
  344. package/dist/internal/drivers/kafka/classes/index.js +8 -19
  345. package/dist/internal/drivers/kafka/classes/index.js.map +1 -1
  346. package/dist/internal/drivers/kafka/index.d.ts +3 -3
  347. package/dist/internal/drivers/kafka/index.d.ts.map +1 -1
  348. package/dist/internal/drivers/kafka/index.js +3 -19
  349. package/dist/internal/drivers/kafka/index.js.map +1 -1
  350. package/dist/internal/drivers/kafka/types/index.d.ts +1 -1
  351. package/dist/internal/drivers/kafka/types/index.d.ts.map +1 -1
  352. package/dist/internal/drivers/kafka/types/index.js +1 -17
  353. package/dist/internal/drivers/kafka/types/index.js.map +1 -1
  354. package/dist/internal/drivers/kafka/types/kafka-types.d.ts +3 -3
  355. package/dist/internal/drivers/kafka/types/kafka-types.d.ts.map +1 -1
  356. package/dist/internal/drivers/kafka/types/kafka-types.js +1 -2
  357. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.d.ts +1 -1
  358. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.d.ts.map +1 -1
  359. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.js +14 -21
  360. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.js.map +1 -1
  361. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.d.ts +1 -1
  362. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.d.ts.map +1 -1
  363. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.js +3 -8
  364. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.js.map +1 -1
  365. package/dist/internal/drivers/kafka/utils/index.d.ts +9 -9
  366. package/dist/internal/drivers/kafka/utils/index.d.ts.map +1 -1
  367. package/dist/internal/drivers/kafka/utils/index.js +9 -25
  368. package/dist/internal/drivers/kafka/utils/index.js.map +1 -1
  369. package/dist/internal/drivers/kafka/utils/parse-kafka-message.d.ts +2 -2
  370. package/dist/internal/drivers/kafka/utils/parse-kafka-message.d.ts.map +1 -1
  371. package/dist/internal/drivers/kafka/utils/parse-kafka-message.js +1 -5
  372. package/dist/internal/drivers/kafka/utils/parse-kafka-message.js.map +1 -1
  373. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.d.ts +4 -4
  374. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.d.ts.map +1 -1
  375. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.js +11 -15
  376. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.js.map +1 -1
  377. package/dist/internal/drivers/kafka/utils/resolve-group-id.d.ts +1 -1
  378. package/dist/internal/drivers/kafka/utils/resolve-group-id.d.ts.map +1 -1
  379. package/dist/internal/drivers/kafka/utils/resolve-group-id.js +1 -5
  380. package/dist/internal/drivers/kafka/utils/resolve-group-id.js.map +1 -1
  381. package/dist/internal/drivers/kafka/utils/resolve-topic-name.js +1 -5
  382. package/dist/internal/drivers/kafka/utils/resolve-topic-name.js.map +1 -1
  383. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.d.ts +2 -2
  384. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.d.ts.map +1 -1
  385. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.js +1 -5
  386. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.js.map +1 -1
  387. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.d.ts +1 -1
  388. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.d.ts.map +1 -1
  389. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.js +12 -20
  390. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.js.map +1 -1
  391. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.d.ts +5 -5
  392. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.d.ts.map +1 -1
  393. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.js +9 -13
  394. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.js.map +1 -1
  395. package/dist/internal/drivers/memory/classes/MemoryDriver.d.ts +11 -11
  396. package/dist/internal/drivers/memory/classes/MemoryDriver.d.ts.map +1 -1
  397. package/dist/internal/drivers/memory/classes/MemoryDriver.js +32 -36
  398. package/dist/internal/drivers/memory/classes/MemoryDriver.js.map +1 -1
  399. package/dist/internal/drivers/memory/classes/MemoryMessageBus.d.ts +7 -7
  400. package/dist/internal/drivers/memory/classes/MemoryMessageBus.d.ts.map +1 -1
  401. package/dist/internal/drivers/memory/classes/MemoryMessageBus.js +8 -12
  402. package/dist/internal/drivers/memory/classes/MemoryMessageBus.js.map +1 -1
  403. package/dist/internal/drivers/memory/classes/MemoryPublisher.d.ts +6 -6
  404. package/dist/internal/drivers/memory/classes/MemoryPublisher.d.ts.map +1 -1
  405. package/dist/internal/drivers/memory/classes/MemoryPublisher.js +4 -8
  406. package/dist/internal/drivers/memory/classes/MemoryPublisher.js.map +1 -1
  407. package/dist/internal/drivers/memory/classes/MemoryRpcClient.d.ts +5 -4
  408. package/dist/internal/drivers/memory/classes/MemoryRpcClient.d.ts.map +1 -1
  409. package/dist/internal/drivers/memory/classes/MemoryRpcClient.js +7 -11
  410. package/dist/internal/drivers/memory/classes/MemoryRpcClient.js.map +1 -1
  411. package/dist/internal/drivers/memory/classes/MemoryRpcServer.d.ts +5 -4
  412. package/dist/internal/drivers/memory/classes/MemoryRpcServer.d.ts.map +1 -1
  413. package/dist/internal/drivers/memory/classes/MemoryRpcServer.js +2 -6
  414. package/dist/internal/drivers/memory/classes/MemoryRpcServer.js.map +1 -1
  415. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.d.ts +3 -3
  416. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.d.ts.map +1 -1
  417. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.js +21 -25
  418. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.js.map +1 -1
  419. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.d.ts +7 -6
  420. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.d.ts.map +1 -1
  421. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.js +5 -9
  422. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.js.map +1 -1
  423. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.d.ts +7 -7
  424. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.d.ts.map +1 -1
  425. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.js +10 -14
  426. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.js.map +1 -1
  427. package/dist/internal/drivers/memory/classes/index.d.ts +8 -8
  428. package/dist/internal/drivers/memory/classes/index.d.ts.map +1 -1
  429. package/dist/internal/drivers/memory/classes/index.js +8 -24
  430. package/dist/internal/drivers/memory/classes/index.js.map +1 -1
  431. package/dist/internal/drivers/memory/index.d.ts +3 -3
  432. package/dist/internal/drivers/memory/index.d.ts.map +1 -1
  433. package/dist/internal/drivers/memory/index.js +3 -19
  434. package/dist/internal/drivers/memory/index.js.map +1 -1
  435. package/dist/internal/drivers/memory/types/index.d.ts +1 -1
  436. package/dist/internal/drivers/memory/types/index.d.ts.map +1 -1
  437. package/dist/internal/drivers/memory/types/index.js +1 -17
  438. package/dist/internal/drivers/memory/types/index.js.map +1 -1
  439. package/dist/internal/drivers/memory/types/memory-store.d.ts +3 -3
  440. package/dist/internal/drivers/memory/types/memory-store.d.ts.map +1 -1
  441. package/dist/internal/drivers/memory/types/memory-store.js +1 -2
  442. package/dist/internal/drivers/memory/utils/create-store.d.ts +1 -1
  443. package/dist/internal/drivers/memory/utils/create-store.d.ts.map +1 -1
  444. package/dist/internal/drivers/memory/utils/create-store.js +1 -5
  445. package/dist/internal/drivers/memory/utils/create-store.js.map +1 -1
  446. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.d.ts +1 -1
  447. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.d.ts.map +1 -1
  448. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.js +1 -5
  449. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.js.map +1 -1
  450. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.d.ts +1 -1
  451. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.d.ts.map +1 -1
  452. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.js +1 -5
  453. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.js.map +1 -1
  454. package/dist/internal/drivers/memory/utils/index.d.ts +5 -5
  455. package/dist/internal/drivers/memory/utils/index.d.ts.map +1 -1
  456. package/dist/internal/drivers/memory/utils/index.js +5 -21
  457. package/dist/internal/drivers/memory/utils/index.js.map +1 -1
  458. package/dist/internal/drivers/memory/utils/publish-messages.d.ts +4 -4
  459. package/dist/internal/drivers/memory/utils/publish-messages.d.ts.map +1 -1
  460. package/dist/internal/drivers/memory/utils/publish-messages.js +7 -11
  461. package/dist/internal/drivers/memory/utils/publish-messages.js.map +1 -1
  462. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.d.ts +5 -5
  463. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.d.ts.map +1 -1
  464. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.js +3 -7
  465. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.js.map +1 -1
  466. package/dist/internal/drivers/nats/classes/NatsDriver.d.ts +10 -10
  467. package/dist/internal/drivers/nats/classes/NatsDriver.d.ts.map +1 -1
  468. package/dist/internal/drivers/nats/classes/NatsDriver.js +39 -76
  469. package/dist/internal/drivers/nats/classes/NatsDriver.js.map +1 -1
  470. package/dist/internal/drivers/nats/classes/NatsMessageBus.d.ts +7 -7
  471. package/dist/internal/drivers/nats/classes/NatsMessageBus.d.ts.map +1 -1
  472. package/dist/internal/drivers/nats/classes/NatsMessageBus.js +19 -23
  473. package/dist/internal/drivers/nats/classes/NatsMessageBus.js.map +1 -1
  474. package/dist/internal/drivers/nats/classes/NatsPublisher.d.ts +6 -6
  475. package/dist/internal/drivers/nats/classes/NatsPublisher.d.ts.map +1 -1
  476. package/dist/internal/drivers/nats/classes/NatsPublisher.js +4 -8
  477. package/dist/internal/drivers/nats/classes/NatsPublisher.js.map +1 -1
  478. package/dist/internal/drivers/nats/classes/NatsRpcClient.d.ts +5 -4
  479. package/dist/internal/drivers/nats/classes/NatsRpcClient.d.ts.map +1 -1
  480. package/dist/internal/drivers/nats/classes/NatsRpcClient.js +15 -19
  481. package/dist/internal/drivers/nats/classes/NatsRpcClient.js.map +1 -1
  482. package/dist/internal/drivers/nats/classes/NatsRpcServer.d.ts +5 -4
  483. package/dist/internal/drivers/nats/classes/NatsRpcServer.d.ts.map +1 -1
  484. package/dist/internal/drivers/nats/classes/NatsRpcServer.js +9 -13
  485. package/dist/internal/drivers/nats/classes/NatsRpcServer.js.map +1 -1
  486. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.d.ts +3 -3
  487. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.d.ts.map +1 -1
  488. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.js +29 -33
  489. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.js.map +1 -1
  490. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.d.ts +7 -6
  491. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.d.ts.map +1 -1
  492. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.js +5 -9
  493. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.js.map +1 -1
  494. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.d.ts +7 -7
  495. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.d.ts.map +1 -1
  496. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.js +23 -27
  497. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.js.map +1 -1
  498. package/dist/internal/drivers/nats/classes/index.d.ts +8 -8
  499. package/dist/internal/drivers/nats/classes/index.d.ts.map +1 -1
  500. package/dist/internal/drivers/nats/classes/index.js +8 -19
  501. package/dist/internal/drivers/nats/classes/index.js.map +1 -1
  502. package/dist/internal/drivers/nats/index.d.ts +3 -3
  503. package/dist/internal/drivers/nats/index.d.ts.map +1 -1
  504. package/dist/internal/drivers/nats/index.js +3 -19
  505. package/dist/internal/drivers/nats/index.js.map +1 -1
  506. package/dist/internal/drivers/nats/types/index.d.ts +1 -1
  507. package/dist/internal/drivers/nats/types/index.d.ts.map +1 -1
  508. package/dist/internal/drivers/nats/types/index.js +1 -17
  509. package/dist/internal/drivers/nats/types/index.js.map +1 -1
  510. package/dist/internal/drivers/nats/types/nats-types.d.ts +2 -2
  511. package/dist/internal/drivers/nats/types/nats-types.d.ts.map +1 -1
  512. package/dist/internal/drivers/nats/types/nats-types.js +1 -2
  513. package/dist/internal/drivers/nats/utils/create-nats-consumer.d.ts +1 -1
  514. package/dist/internal/drivers/nats/utils/create-nats-consumer.d.ts.map +1 -1
  515. package/dist/internal/drivers/nats/utils/create-nats-consumer.js +3 -7
  516. package/dist/internal/drivers/nats/utils/create-nats-consumer.js.map +1 -1
  517. package/dist/internal/drivers/nats/utils/ensure-nats-stream.d.ts +1 -1
  518. package/dist/internal/drivers/nats/utils/ensure-nats-stream.d.ts.map +1 -1
  519. package/dist/internal/drivers/nats/utils/ensure-nats-stream.js +1 -5
  520. package/dist/internal/drivers/nats/utils/ensure-nats-stream.js.map +1 -1
  521. package/dist/internal/drivers/nats/utils/index.d.ts +10 -10
  522. package/dist/internal/drivers/nats/utils/index.d.ts.map +1 -1
  523. package/dist/internal/drivers/nats/utils/index.js +10 -26
  524. package/dist/internal/drivers/nats/utils/index.js.map +1 -1
  525. package/dist/internal/drivers/nats/utils/parse-nats-message.d.ts +1 -1
  526. package/dist/internal/drivers/nats/utils/parse-nats-message.d.ts.map +1 -1
  527. package/dist/internal/drivers/nats/utils/parse-nats-message.js +1 -5
  528. package/dist/internal/drivers/nats/utils/parse-nats-message.js.map +1 -1
  529. package/dist/internal/drivers/nats/utils/publish-nats-messages.d.ts +4 -4
  530. package/dist/internal/drivers/nats/utils/publish-nats-messages.d.ts.map +1 -1
  531. package/dist/internal/drivers/nats/utils/publish-nats-messages.js +9 -13
  532. package/dist/internal/drivers/nats/utils/publish-nats-messages.js.map +1 -1
  533. package/dist/internal/drivers/nats/utils/resolve-consumer-name.d.ts +1 -1
  534. package/dist/internal/drivers/nats/utils/resolve-consumer-name.d.ts.map +1 -1
  535. package/dist/internal/drivers/nats/utils/resolve-consumer-name.js +1 -5
  536. package/dist/internal/drivers/nats/utils/resolve-consumer-name.js.map +1 -1
  537. package/dist/internal/drivers/nats/utils/resolve-stream-name.js +1 -5
  538. package/dist/internal/drivers/nats/utils/resolve-stream-name.js.map +1 -1
  539. package/dist/internal/drivers/nats/utils/resolve-subject.js +1 -5
  540. package/dist/internal/drivers/nats/utils/resolve-subject.js.map +1 -1
  541. package/dist/internal/drivers/nats/utils/serialize-nats-message.d.ts +2 -2
  542. package/dist/internal/drivers/nats/utils/serialize-nats-message.d.ts.map +1 -1
  543. package/dist/internal/drivers/nats/utils/serialize-nats-message.js +1 -5
  544. package/dist/internal/drivers/nats/utils/serialize-nats-message.js.map +1 -1
  545. package/dist/internal/drivers/nats/utils/stop-nats-consumer.d.ts +1 -1
  546. package/dist/internal/drivers/nats/utils/stop-nats-consumer.d.ts.map +1 -1
  547. package/dist/internal/drivers/nats/utils/stop-nats-consumer.js +2 -7
  548. package/dist/internal/drivers/nats/utils/stop-nats-consumer.js.map +1 -1
  549. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.d.ts +5 -5
  550. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.d.ts.map +1 -1
  551. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.js +5 -9
  552. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.js.map +1 -1
  553. package/dist/internal/drivers/rabbit/classes/RabbitDriver.d.ts +8 -8
  554. package/dist/internal/drivers/rabbit/classes/RabbitDriver.d.ts.map +1 -1
  555. package/dist/internal/drivers/rabbit/classes/RabbitDriver.js +26 -33
  556. package/dist/internal/drivers/rabbit/classes/RabbitDriver.js.map +1 -1
  557. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.d.ts +5 -5
  558. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.d.ts.map +1 -1
  559. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.js +12 -16
  560. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.js.map +1 -1
  561. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.d.ts +5 -5
  562. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.d.ts.map +1 -1
  563. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.js +4 -8
  564. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.js.map +1 -1
  565. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.d.ts +5 -4
  566. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.d.ts.map +1 -1
  567. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.js +18 -22
  568. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.js.map +1 -1
  569. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.d.ts +5 -4
  570. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.d.ts.map +1 -1
  571. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.js +13 -17
  572. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.js.map +1 -1
  573. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.d.ts +3 -3
  574. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.d.ts.map +1 -1
  575. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.js +15 -19
  576. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.js.map +1 -1
  577. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.d.ts +7 -6
  578. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.d.ts.map +1 -1
  579. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.js +5 -9
  580. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.js.map +1 -1
  581. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.d.ts +5 -5
  582. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.d.ts.map +1 -1
  583. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.js +13 -17
  584. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.js.map +1 -1
  585. package/dist/internal/drivers/rabbit/classes/index.d.ts +8 -8
  586. package/dist/internal/drivers/rabbit/classes/index.d.ts.map +1 -1
  587. package/dist/internal/drivers/rabbit/classes/index.js +8 -19
  588. package/dist/internal/drivers/rabbit/classes/index.js.map +1 -1
  589. package/dist/internal/drivers/rabbit/index.d.ts +3 -3
  590. package/dist/internal/drivers/rabbit/index.d.ts.map +1 -1
  591. package/dist/internal/drivers/rabbit/index.js +3 -19
  592. package/dist/internal/drivers/rabbit/index.js.map +1 -1
  593. package/dist/internal/drivers/rabbit/types/index.d.ts +1 -1
  594. package/dist/internal/drivers/rabbit/types/index.d.ts.map +1 -1
  595. package/dist/internal/drivers/rabbit/types/index.js +1 -17
  596. package/dist/internal/drivers/rabbit/types/index.js.map +1 -1
  597. package/dist/internal/drivers/rabbit/types/rabbit-types.d.ts +1 -1
  598. package/dist/internal/drivers/rabbit/types/rabbit-types.d.ts.map +1 -1
  599. package/dist/internal/drivers/rabbit/types/rabbit-types.js +1 -2
  600. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.d.ts +2 -2
  601. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.d.ts.map +1 -1
  602. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.js +3 -7
  603. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.js.map +1 -1
  604. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.d.ts +3 -3
  605. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.d.ts.map +1 -1
  606. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.js +1 -5
  607. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.js.map +1 -1
  608. package/dist/internal/drivers/rabbit/utils/index.d.ts +8 -8
  609. package/dist/internal/drivers/rabbit/utils/index.d.ts.map +1 -1
  610. package/dist/internal/drivers/rabbit/utils/index.js +8 -24
  611. package/dist/internal/drivers/rabbit/utils/index.js.map +1 -1
  612. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.d.ts +1 -1
  613. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.d.ts.map +1 -1
  614. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.js +1 -5
  615. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.js.map +1 -1
  616. package/dist/internal/drivers/rabbit/utils/publish-messages.d.ts +4 -4
  617. package/dist/internal/drivers/rabbit/utils/publish-messages.d.ts.map +1 -1
  618. package/dist/internal/drivers/rabbit/utils/publish-messages.js +14 -18
  619. package/dist/internal/drivers/rabbit/utils/publish-messages.js.map +1 -1
  620. package/dist/internal/drivers/rabbit/utils/publish-to-exchange.js +4 -8
  621. package/dist/internal/drivers/rabbit/utils/publish-to-exchange.js.map +1 -1
  622. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.d.ts +1 -1
  623. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.d.ts.map +1 -1
  624. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.js +6 -10
  625. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.js.map +1 -1
  626. package/dist/internal/drivers/rabbit/utils/sanitize-routing-key.js +1 -5
  627. package/dist/internal/drivers/rabbit/utils/sanitize-routing-key.js.map +1 -1
  628. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.d.ts +5 -5
  629. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.d.ts.map +1 -1
  630. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.js +16 -20
  631. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.js.map +1 -1
  632. package/dist/internal/drivers/redis/classes/RedisDriver.d.ts +10 -10
  633. package/dist/internal/drivers/redis/classes/RedisDriver.d.ts.map +1 -1
  634. package/dist/internal/drivers/redis/classes/RedisDriver.js +42 -78
  635. package/dist/internal/drivers/redis/classes/RedisDriver.js.map +1 -1
  636. package/dist/internal/drivers/redis/classes/RedisMessageBus.d.ts +7 -7
  637. package/dist/internal/drivers/redis/classes/RedisMessageBus.d.ts.map +1 -1
  638. package/dist/internal/drivers/redis/classes/RedisMessageBus.js +19 -23
  639. package/dist/internal/drivers/redis/classes/RedisMessageBus.js.map +1 -1
  640. package/dist/internal/drivers/redis/classes/RedisPublisher.d.ts +6 -6
  641. package/dist/internal/drivers/redis/classes/RedisPublisher.d.ts.map +1 -1
  642. package/dist/internal/drivers/redis/classes/RedisPublisher.js +4 -8
  643. package/dist/internal/drivers/redis/classes/RedisPublisher.js.map +1 -1
  644. package/dist/internal/drivers/redis/classes/RedisRpcClient.d.ts +5 -4
  645. package/dist/internal/drivers/redis/classes/RedisRpcClient.d.ts.map +1 -1
  646. package/dist/internal/drivers/redis/classes/RedisRpcClient.js +18 -22
  647. package/dist/internal/drivers/redis/classes/RedisRpcClient.js.map +1 -1
  648. package/dist/internal/drivers/redis/classes/RedisRpcServer.d.ts +5 -4
  649. package/dist/internal/drivers/redis/classes/RedisRpcServer.d.ts.map +1 -1
  650. package/dist/internal/drivers/redis/classes/RedisRpcServer.js +19 -23
  651. package/dist/internal/drivers/redis/classes/RedisRpcServer.js.map +1 -1
  652. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.d.ts +3 -3
  653. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.d.ts.map +1 -1
  654. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.js +27 -31
  655. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.js.map +1 -1
  656. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.d.ts +7 -6
  657. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.d.ts.map +1 -1
  658. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.js +5 -9
  659. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.js.map +1 -1
  660. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.d.ts +7 -7
  661. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.d.ts.map +1 -1
  662. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.js +23 -27
  663. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.js.map +1 -1
  664. package/dist/internal/drivers/redis/classes/index.d.ts +8 -8
  665. package/dist/internal/drivers/redis/classes/index.d.ts.map +1 -1
  666. package/dist/internal/drivers/redis/classes/index.js +8 -19
  667. package/dist/internal/drivers/redis/classes/index.js.map +1 -1
  668. package/dist/internal/drivers/redis/index.d.ts +3 -3
  669. package/dist/internal/drivers/redis/index.d.ts.map +1 -1
  670. package/dist/internal/drivers/redis/index.js +3 -19
  671. package/dist/internal/drivers/redis/index.js.map +1 -1
  672. package/dist/internal/drivers/redis/types/index.d.ts +1 -1
  673. package/dist/internal/drivers/redis/types/index.d.ts.map +1 -1
  674. package/dist/internal/drivers/redis/types/index.js +1 -17
  675. package/dist/internal/drivers/redis/types/index.js.map +1 -1
  676. package/dist/internal/drivers/redis/types/redis-types.d.ts +4 -4
  677. package/dist/internal/drivers/redis/types/redis-types.d.ts.map +1 -1
  678. package/dist/internal/drivers/redis/types/redis-types.js +1 -2
  679. package/dist/internal/drivers/redis/utils/create-consumer-loop.d.ts +1 -1
  680. package/dist/internal/drivers/redis/utils/create-consumer-loop.d.ts.map +1 -1
  681. package/dist/internal/drivers/redis/utils/create-consumer-loop.js +5 -9
  682. package/dist/internal/drivers/redis/utils/create-consumer-loop.js.map +1 -1
  683. package/dist/internal/drivers/redis/utils/index.d.ts +9 -9
  684. package/dist/internal/drivers/redis/utils/index.d.ts.map +1 -1
  685. package/dist/internal/drivers/redis/utils/index.js +9 -25
  686. package/dist/internal/drivers/redis/utils/index.js.map +1 -1
  687. package/dist/internal/drivers/redis/utils/parse-stream-entry.d.ts +1 -1
  688. package/dist/internal/drivers/redis/utils/parse-stream-entry.d.ts.map +1 -1
  689. package/dist/internal/drivers/redis/utils/parse-stream-entry.js +1 -5
  690. package/dist/internal/drivers/redis/utils/parse-stream-entry.js.map +1 -1
  691. package/dist/internal/drivers/redis/utils/publish-redis-messages.d.ts +4 -4
  692. package/dist/internal/drivers/redis/utils/publish-redis-messages.d.ts.map +1 -1
  693. package/dist/internal/drivers/redis/utils/publish-redis-messages.js +11 -15
  694. package/dist/internal/drivers/redis/utils/publish-redis-messages.js.map +1 -1
  695. package/dist/internal/drivers/redis/utils/resolve-group-name.d.ts +1 -1
  696. package/dist/internal/drivers/redis/utils/resolve-group-name.d.ts.map +1 -1
  697. package/dist/internal/drivers/redis/utils/resolve-group-name.js +1 -5
  698. package/dist/internal/drivers/redis/utils/resolve-group-name.js.map +1 -1
  699. package/dist/internal/drivers/redis/utils/resolve-stream-key.js +1 -5
  700. package/dist/internal/drivers/redis/utils/resolve-stream-key.js.map +1 -1
  701. package/dist/internal/drivers/redis/utils/serialize-stream-fields.d.ts +1 -1
  702. package/dist/internal/drivers/redis/utils/serialize-stream-fields.d.ts.map +1 -1
  703. package/dist/internal/drivers/redis/utils/serialize-stream-fields.js +1 -5
  704. package/dist/internal/drivers/redis/utils/serialize-stream-fields.js.map +1 -1
  705. package/dist/internal/drivers/redis/utils/stop-consumer-loop.d.ts +1 -1
  706. package/dist/internal/drivers/redis/utils/stop-consumer-loop.d.ts.map +1 -1
  707. package/dist/internal/drivers/redis/utils/stop-consumer-loop.js +2 -7
  708. package/dist/internal/drivers/redis/utils/stop-consumer-loop.js.map +1 -1
  709. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.d.ts +5 -5
  710. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.d.ts.map +1 -1
  711. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.js +9 -13
  712. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.js.map +1 -1
  713. package/dist/internal/drivers/redis/utils/xadd-to-stream.d.ts +1 -1
  714. package/dist/internal/drivers/redis/utils/xadd-to-stream.d.ts.map +1 -1
  715. package/dist/internal/drivers/redis/utils/xadd-to-stream.js +1 -5
  716. package/dist/internal/drivers/redis/utils/xadd-to-stream.js.map +1 -1
  717. package/dist/internal/index.d.ts +1 -1
  718. package/dist/internal/index.d.ts.map +1 -1
  719. package/dist/internal/index.js +1 -17
  720. package/dist/internal/index.js.map +1 -1
  721. package/dist/internal/message/classes/MessageManager.d.ts +5 -4
  722. package/dist/internal/message/classes/MessageManager.d.ts.map +1 -1
  723. package/dist/internal/message/classes/MessageManager.js +28 -31
  724. package/dist/internal/message/classes/MessageManager.js.map +1 -1
  725. package/dist/internal/message/classes/MessageScanner.d.ts +3 -3
  726. package/dist/internal/message/classes/MessageScanner.d.ts.map +1 -1
  727. package/dist/internal/message/classes/MessageScanner.js +18 -22
  728. package/dist/internal/message/classes/MessageScanner.js.map +1 -1
  729. package/dist/internal/message/classes/index.d.ts +2 -2
  730. package/dist/internal/message/classes/index.d.ts.map +1 -1
  731. package/dist/internal/message/classes/index.js +2 -18
  732. package/dist/internal/message/classes/index.js.map +1 -1
  733. package/dist/internal/message/errors/IrisScannerError.d.ts +1 -1
  734. package/dist/internal/message/errors/IrisScannerError.d.ts.map +1 -1
  735. package/dist/internal/message/errors/IrisScannerError.js +1 -5
  736. package/dist/internal/message/errors/IrisScannerError.js.map +1 -1
  737. package/dist/internal/message/errors/index.d.ts +1 -1
  738. package/dist/internal/message/errors/index.d.ts.map +1 -1
  739. package/dist/internal/message/errors/index.js +1 -17
  740. package/dist/internal/message/errors/index.js.map +1 -1
  741. package/dist/internal/message/index.d.ts +5 -5
  742. package/dist/internal/message/index.d.ts.map +1 -1
  743. package/dist/internal/message/index.js +5 -21
  744. package/dist/internal/message/index.js.map +1 -1
  745. package/dist/internal/message/metadata/abstract-message.js +3 -7
  746. package/dist/internal/message/metadata/abstract-message.js.map +1 -1
  747. package/dist/internal/message/metadata/build-message-metadata.d.ts +1 -1
  748. package/dist/internal/message/metadata/build-message-metadata.d.ts.map +1 -1
  749. package/dist/internal/message/metadata/build-message-metadata.js +38 -42
  750. package/dist/internal/message/metadata/build-message-metadata.js.map +1 -1
  751. package/dist/internal/message/metadata/collect.d.ts +1 -1
  752. package/dist/internal/message/metadata/collect.d.ts.map +1 -1
  753. package/dist/internal/message/metadata/collect.js +3 -9
  754. package/dist/internal/message/metadata/collect.js.map +1 -1
  755. package/dist/internal/message/metadata/get-message-metadata.d.ts +1 -1
  756. package/dist/internal/message/metadata/get-message-metadata.d.ts.map +1 -1
  757. package/dist/internal/message/metadata/get-message-metadata.js +6 -10
  758. package/dist/internal/message/metadata/get-message-metadata.js.map +1 -1
  759. package/dist/internal/message/metadata/index.d.ts +4 -4
  760. package/dist/internal/message/metadata/index.d.ts.map +1 -1
  761. package/dist/internal/message/metadata/index.js +4 -20
  762. package/dist/internal/message/metadata/index.js.map +1 -1
  763. package/dist/internal/message/metadata/registry.d.ts +1 -1
  764. package/dist/internal/message/metadata/registry.d.ts.map +1 -1
  765. package/dist/internal/message/metadata/registry.js +7 -17
  766. package/dist/internal/message/metadata/registry.js.map +1 -1
  767. package/dist/internal/message/metadata/stage-metadata.d.ts +2 -2
  768. package/dist/internal/message/metadata/stage-metadata.d.ts.map +1 -1
  769. package/dist/internal/message/metadata/stage-metadata.js +29 -52
  770. package/dist/internal/message/metadata/stage-metadata.js.map +1 -1
  771. package/dist/internal/message/metadata/validate-fields.d.ts +1 -1
  772. package/dist/internal/message/metadata/validate-fields.d.ts.map +1 -1
  773. package/dist/internal/message/metadata/validate-fields.js +4 -8
  774. package/dist/internal/message/metadata/validate-fields.js.map +1 -1
  775. package/dist/internal/message/metadata/validate-generated.d.ts +2 -2
  776. package/dist/internal/message/metadata/validate-generated.d.ts.map +1 -1
  777. package/dist/internal/message/metadata/validate-generated.js +4 -8
  778. package/dist/internal/message/metadata/validate-generated.js.map +1 -1
  779. package/dist/internal/message/metadata/validate-headers.d.ts +1 -1
  780. package/dist/internal/message/metadata/validate-headers.d.ts.map +1 -1
  781. package/dist/internal/message/metadata/validate-headers.js +8 -12
  782. package/dist/internal/message/metadata/validate-headers.js.map +1 -1
  783. package/dist/internal/message/types/index.d.ts +5 -5
  784. package/dist/internal/message/types/index.d.ts.map +1 -1
  785. package/dist/internal/message/types/index.js +5 -21
  786. package/dist/internal/message/types/index.js.map +1 -1
  787. package/dist/internal/message/types/metadata.d.ts +4 -3
  788. package/dist/internal/message/types/metadata.d.ts.map +1 -1
  789. package/dist/internal/message/types/metadata.js +1 -2
  790. package/dist/internal/message/types/outbound-payload.js +1 -2
  791. package/dist/internal/message/types/serialized-message.js +1 -2
  792. package/dist/internal/message/types/staged.d.ts +2 -2
  793. package/dist/internal/message/types/staged.d.ts.map +1 -1
  794. package/dist/internal/message/types/staged.js +1 -2
  795. package/dist/internal/message/types/types.js +1 -2
  796. package/dist/internal/message/utils/apply-stage.d.ts +1 -1
  797. package/dist/internal/message/utils/apply-stage.d.ts.map +1 -1
  798. package/dist/internal/message/utils/apply-stage.js +1 -5
  799. package/dist/internal/message/utils/apply-stage.js.map +1 -1
  800. package/dist/internal/message/utils/build-schema.d.ts +1 -1
  801. package/dist/internal/message/utils/build-schema.d.ts.map +1 -1
  802. package/dist/internal/message/utils/build-schema.js +17 -21
  803. package/dist/internal/message/utils/build-schema.js.map +1 -1
  804. package/dist/internal/message/utils/compress.d.ts +1 -1
  805. package/dist/internal/message/utils/compress.d.ts.map +1 -1
  806. package/dist/internal/message/utils/compress.js +13 -18
  807. package/dist/internal/message/utils/compress.js.map +1 -1
  808. package/dist/internal/message/utils/deserialise.d.ts +1 -1
  809. package/dist/internal/message/utils/deserialise.d.ts.map +1 -1
  810. package/dist/internal/message/utils/deserialise.js +16 -20
  811. package/dist/internal/message/utils/deserialise.js.map +1 -1
  812. package/dist/internal/message/utils/deserialize-message.d.ts +1 -1
  813. package/dist/internal/message/utils/deserialize-message.d.ts.map +1 -1
  814. package/dist/internal/message/utils/deserialize-message.js +3 -7
  815. package/dist/internal/message/utils/deserialize-message.js.map +1 -1
  816. package/dist/internal/message/utils/encrypt.js +12 -50
  817. package/dist/internal/message/utils/encrypt.js.map +1 -1
  818. package/dist/internal/message/utils/generate-fields.d.ts +1 -1
  819. package/dist/internal/message/utils/generate-fields.d.ts.map +1 -1
  820. package/dist/internal/message/utils/generate-fields.js +6 -10
  821. package/dist/internal/message/utils/generate-fields.js.map +1 -1
  822. package/dist/internal/message/utils/index.d.ts +16 -16
  823. package/dist/internal/message/utils/index.d.ts.map +1 -1
  824. package/dist/internal/message/utils/index.js +16 -32
  825. package/dist/internal/message/utils/index.js.map +1 -1
  826. package/dist/internal/message/utils/parse-field.d.ts +1 -1
  827. package/dist/internal/message/utils/parse-field.d.ts.map +1 -1
  828. package/dist/internal/message/utils/parse-field.js +5 -9
  829. package/dist/internal/message/utils/parse-field.js.map +1 -1
  830. package/dist/internal/message/utils/prepare-inbound.d.ts +1 -1
  831. package/dist/internal/message/utils/prepare-inbound.d.ts.map +1 -1
  832. package/dist/internal/message/utils/prepare-inbound.js +11 -15
  833. package/dist/internal/message/utils/prepare-inbound.js.map +1 -1
  834. package/dist/internal/message/utils/prepare-outbound.d.ts +2 -2
  835. package/dist/internal/message/utils/prepare-outbound.d.ts.map +1 -1
  836. package/dist/internal/message/utils/prepare-outbound.js +7 -11
  837. package/dist/internal/message/utils/prepare-outbound.js.map +1 -1
  838. package/dist/internal/message/utils/resolve-default-topic.d.ts +1 -1
  839. package/dist/internal/message/utils/resolve-default-topic.d.ts.map +1 -1
  840. package/dist/internal/message/utils/resolve-default-topic.js +1 -5
  841. package/dist/internal/message/utils/resolve-default-topic.js.map +1 -1
  842. package/dist/internal/message/utils/resolve-delay.d.ts +2 -2
  843. package/dist/internal/message/utils/resolve-delay.d.ts.map +1 -1
  844. package/dist/internal/message/utils/resolve-delay.js +1 -5
  845. package/dist/internal/message/utils/resolve-delay.js.map +1 -1
  846. package/dist/internal/message/utils/resolve-expiry.d.ts +2 -2
  847. package/dist/internal/message/utils/resolve-expiry.d.ts.map +1 -1
  848. package/dist/internal/message/utils/resolve-expiry.js +1 -5
  849. package/dist/internal/message/utils/resolve-expiry.js.map +1 -1
  850. package/dist/internal/message/utils/resolve-priority.d.ts +2 -2
  851. package/dist/internal/message/utils/resolve-priority.d.ts.map +1 -1
  852. package/dist/internal/message/utils/resolve-priority.js +1 -5
  853. package/dist/internal/message/utils/resolve-priority.js.map +1 -1
  854. package/dist/internal/message/utils/resolve-topic.d.ts +2 -2
  855. package/dist/internal/message/utils/resolve-topic.d.ts.map +1 -1
  856. package/dist/internal/message/utils/resolve-topic.js +1 -5
  857. package/dist/internal/message/utils/resolve-topic.js.map +1 -1
  858. package/dist/internal/message/utils/run-hooks.d.ts +5 -4
  859. package/dist/internal/message/utils/run-hooks.d.ts.map +1 -1
  860. package/dist/internal/message/utils/run-hooks.js +6 -11
  861. package/dist/internal/message/utils/run-hooks.js.map +1 -1
  862. package/dist/internal/message/utils/serialize-message.d.ts +2 -2
  863. package/dist/internal/message/utils/serialize-message.d.ts.map +1 -1
  864. package/dist/internal/message/utils/serialize-message.js +6 -10
  865. package/dist/internal/message/utils/serialize-message.js.map +1 -1
  866. package/dist/internal/polyfill-symbol-metadata.d.ts +2 -0
  867. package/dist/internal/polyfill-symbol-metadata.d.ts.map +1 -0
  868. package/dist/internal/polyfill-symbol-metadata.js +5 -0
  869. package/dist/internal/polyfill-symbol-metadata.js.map +1 -0
  870. package/dist/internal/types/consume-strategies.d.ts +1 -1
  871. package/dist/internal/types/consume-strategies.d.ts.map +1 -1
  872. package/dist/internal/types/consume-strategies.js +1 -2
  873. package/dist/internal/types/envelope-overrides.js +1 -2
  874. package/dist/internal/types/index.d.ts +4 -4
  875. package/dist/internal/types/index.d.ts.map +1 -1
  876. package/dist/internal/types/index.js +4 -20
  877. package/dist/internal/types/index.js.map +1 -1
  878. package/dist/internal/types/iris-envelope.d.ts +1 -1
  879. package/dist/internal/types/iris-envelope.d.ts.map +1 -1
  880. package/dist/internal/types/iris-envelope.js +1 -2
  881. package/dist/internal/types/pipeline-stage.js +1 -2
  882. package/dist/internal/utils/build-envelope.d.ts +4 -4
  883. package/dist/internal/utils/build-envelope.d.ts.map +1 -1
  884. package/dist/internal/utils/build-envelope.js +1 -5
  885. package/dist/internal/utils/build-envelope.js.map +1 -1
  886. package/dist/internal/utils/check-pipeline-results.js +1 -5
  887. package/dist/internal/utils/check-pipeline-results.js.map +1 -1
  888. package/dist/internal/utils/consume-message-core.d.ts +5 -5
  889. package/dist/internal/utils/consume-message-core.d.ts.map +1 -1
  890. package/dist/internal/utils/consume-message-core.js +5 -9
  891. package/dist/internal/utils/consume-message-core.js.map +1 -1
  892. package/dist/internal/utils/create-default-envelope.d.ts +2 -2
  893. package/dist/internal/utils/create-default-envelope.d.ts.map +1 -1
  894. package/dist/internal/utils/create-default-envelope.js +1 -5
  895. package/dist/internal/utils/create-default-envelope.js.map +1 -1
  896. package/dist/internal/utils/index.d.ts +6 -6
  897. package/dist/internal/utils/index.d.ts.map +1 -1
  898. package/dist/internal/utils/index.js +6 -22
  899. package/dist/internal/utils/index.js.map +1 -1
  900. package/dist/internal/utils/is-expired.d.ts +1 -1
  901. package/dist/internal/utils/is-expired.d.ts.map +1 -1
  902. package/dist/internal/utils/is-expired.js +1 -5
  903. package/dist/internal/utils/is-expired.js.map +1 -1
  904. package/dist/internal/utils/prepare-publish-batch.d.ts +5 -5
  905. package/dist/internal/utils/prepare-publish-batch.d.ts.map +1 -1
  906. package/dist/internal/utils/prepare-publish-batch.js +13 -17
  907. package/dist/internal/utils/prepare-publish-batch.js.map +1 -1
  908. package/dist/internal/utils/resolve-identifier-value.d.ts +1 -1
  909. package/dist/internal/utils/resolve-identifier-value.d.ts.map +1 -1
  910. package/dist/internal/utils/resolve-identifier-value.js +1 -5
  911. package/dist/internal/utils/resolve-identifier-value.js.map +1 -1
  912. package/dist/internal/utils/validate-encrypted-messages.d.ts +1 -1
  913. package/dist/internal/utils/validate-encrypted-messages.d.ts.map +1 -1
  914. package/dist/internal/utils/validate-encrypted-messages.js +5 -9
  915. package/dist/internal/utils/validate-encrypted-messages.js.map +1 -1
  916. package/dist/mocks/create-mock-iris-session.d.ts +2 -3
  917. package/dist/mocks/create-mock-iris-session.d.ts.map +1 -1
  918. package/dist/mocks/create-mock-iris-session.js +32 -19
  919. package/dist/mocks/create-mock-iris-session.js.map +1 -1
  920. package/dist/mocks/create-mock-iris-source.d.ts +2 -3
  921. package/dist/mocks/create-mock-iris-source.d.ts.map +1 -1
  922. package/dist/mocks/create-mock-iris-source.js +46 -33
  923. package/dist/mocks/create-mock-iris-source.js.map +1 -1
  924. package/dist/mocks/create-mock-message-bus.d.ts +4 -4
  925. package/dist/mocks/create-mock-message-bus.d.ts.map +1 -1
  926. package/dist/mocks/create-mock-message-bus.js +14 -13
  927. package/dist/mocks/create-mock-message-bus.js.map +1 -1
  928. package/dist/mocks/create-mock-publisher.d.ts +4 -4
  929. package/dist/mocks/create-mock-publisher.d.ts.map +1 -1
  930. package/dist/mocks/create-mock-publisher.js +11 -10
  931. package/dist/mocks/create-mock-publisher.js.map +1 -1
  932. package/dist/mocks/create-mock-rpc-client.d.ts +4 -4
  933. package/dist/mocks/create-mock-rpc-client.d.ts.map +1 -1
  934. package/dist/mocks/create-mock-rpc-client.js +8 -7
  935. package/dist/mocks/create-mock-rpc-client.js.map +1 -1
  936. package/dist/mocks/create-mock-worker-queue.d.ts +4 -4
  937. package/dist/mocks/create-mock-worker-queue.d.ts.map +1 -1
  938. package/dist/mocks/create-mock-worker-queue.js +14 -13
  939. package/dist/mocks/create-mock-worker-queue.js.map +1 -1
  940. package/dist/mocks/jest.d.ts +25 -0
  941. package/dist/mocks/jest.d.ts.map +1 -0
  942. package/dist/mocks/jest.js +13 -0
  943. package/dist/mocks/jest.js.map +1 -0
  944. package/dist/mocks/vitest.d.ts +26 -0
  945. package/dist/mocks/vitest.d.ts.map +1 -0
  946. package/dist/mocks/vitest.js +14 -0
  947. package/dist/mocks/vitest.js.map +1 -0
  948. package/dist/types/compression.js +1 -2
  949. package/dist/types/connection.js +1 -2
  950. package/dist/types/consume-envelope.js +1 -2
  951. package/dist/types/dead-letter.d.ts +1 -1
  952. package/dist/types/dead-letter.d.ts.map +1 -1
  953. package/dist/types/dead-letter.js +1 -2
  954. package/dist/types/decorator-options.js +1 -2
  955. package/dist/types/delay.d.ts +1 -1
  956. package/dist/types/delay.d.ts.map +1 -1
  957. package/dist/types/delay.js +1 -2
  958. package/dist/types/envelope.js +1 -2
  959. package/dist/types/events.d.ts +1 -1
  960. package/dist/types/events.d.ts.map +1 -1
  961. package/dist/types/events.js +1 -2
  962. package/dist/types/hook.d.ts +4 -3
  963. package/dist/types/hook.d.ts.map +1 -1
  964. package/dist/types/hook.js +1 -2
  965. package/dist/types/index.d.ts +13 -12
  966. package/dist/types/index.d.ts.map +1 -1
  967. package/dist/types/index.js +12 -27
  968. package/dist/types/index.js.map +1 -1
  969. package/dist/types/iris-hook-meta.d.ts +7 -0
  970. package/dist/types/iris-hook-meta.d.ts.map +1 -0
  971. package/dist/types/iris-hook-meta.js +6 -0
  972. package/dist/types/iris-hook-meta.js.map +1 -0
  973. package/dist/types/message-bus.d.ts +2 -2
  974. package/dist/types/message-bus.d.ts.map +1 -1
  975. package/dist/types/message-bus.js +1 -2
  976. package/dist/types/source-options.d.ts +6 -5
  977. package/dist/types/source-options.d.ts.map +1 -1
  978. package/dist/types/source-options.js +1 -2
  979. package/dist/utils/generate-message.js +2 -6
  980. package/dist/utils/generate-message.js.map +1 -1
  981. package/dist/utils/generate-source.js +2 -6
  982. package/dist/utils/generate-source.js.map +1 -1
  983. package/dist/utils/index.d.ts +4 -4
  984. package/dist/utils/index.d.ts.map +1 -1
  985. package/dist/utils/index.js +4 -20
  986. package/dist/utils/index.js.map +1 -1
  987. package/dist/utils/write-message.js +16 -20
  988. package/dist/utils/write-message.js.map +1 -1
  989. package/dist/utils/write-source.d.ts +1 -1
  990. package/dist/utils/write-source.d.ts.map +1 -1
  991. package/dist/utils/write-source.js +21 -25
  992. package/dist/utils/write-source.js.map +1 -1
  993. package/package.json +39 -35
  994. package/dist/mocks/index.d.ts +0 -7
  995. package/dist/mocks/index.d.ts.map +0 -1
  996. package/dist/mocks/index.js +0 -26
  997. package/dist/mocks/index.js.map +0 -1
package/README.md CHANGED
@@ -1,27 +1,35 @@
1
1
  # @lindorm/iris
2
2
 
3
- Unified messaging library for Node.js with a single decorator-driven API across multiple brokers. Define messages once, deploy to any backend.
3
+ Decorator-driven messaging for Node.js with a single API across multiple brokers. Define messages once, publish and subscribe against memory, RabbitMQ, Kafka, NATS, or Redis Streams.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @lindorm/iris
9
+ ```
10
+
11
+ This package is **ESM-only** and ships native (TC39 stage 3) decorators. Use it from an ESM project (`"type": "module"`) and a TypeScript version that supports stage 3 decorators (TS 5+). The package polyfills `Symbol.metadata` for older Node versions, so no extra setup is required.
4
12
 
5
13
  ## Supported Drivers
6
14
 
7
- | Driver | Peer Dependency | Use Case |
8
- | ------------ | --------------- | ----------------------------------- |
9
- | **Memory** | _(none)_ | Testing, prototyping |
10
- | **RabbitMQ** | `amqplib` | Task queues, complex routing |
11
- | **Kafka** | `kafkajs` | High-throughput event streaming |
12
- | **NATS** | `nats` | Low-latency, cloud-native systems |
13
- | **Redis** | `ioredis` | Lightweight streams, existing infra |
15
+ Iris is broker-agnostic. The driver is chosen via the `IrisSource` constructor; the matching peer dependency is loaded lazily and only needs to be installed for the driver(s) you use.
14
16
 
15
- Install only the peer dependency for the driver(s) you use:
17
+ | Driver | Peer Dependency |
18
+ | -------- | --------------- |
19
+ | `memory` | _(none)_ |
20
+ | `rabbit` | `amqplib` ^0.10 |
21
+ | `kafka` | `kafkajs` ^2.2 |
22
+ | `nats` | `nats` ^2.29 |
23
+ | `redis` | `ioredis` ^5.10 |
16
24
 
17
- ```bash
18
- npm install @lindorm/iris
25
+ `@lindorm/amphora` ^0.4 is an optional peer used for payload encryption (`@Encrypted`). `@lindorm/logger` ^0.5 is a required peer — every `IrisSource` takes an `ILogger`.
19
26
 
20
- # Pick one or more:
21
- npm install amqplib # RabbitMQ
22
- npm install kafkajs # Kafka
23
- npm install nats # NATS
24
- npm install ioredis # Redis Streams
27
+ ```bash
28
+ npm install amqplib # RabbitMQ
29
+ npm install kafkajs # Kafka
30
+ npm install nats # NATS
31
+ npm install ioredis # Redis Streams
32
+ npm install @lindorm/amphora # Encryption (optional)
25
33
  ```
26
34
 
27
35
  ## Quick Start
@@ -30,14 +38,13 @@ npm install ioredis # Redis Streams
30
38
 
31
39
  ```typescript
32
40
  import {
33
- Message,
34
- Namespace,
35
- Version,
36
41
  Field,
37
42
  IdentifierField,
43
+ Message,
44
+ Namespace,
38
45
  TimestampField,
46
+ Version,
39
47
  } from "@lindorm/iris";
40
- import type { IMessage } from "@lindorm/iris";
41
48
 
42
49
  @Message()
43
50
  @Namespace("orders")
@@ -50,7 +57,7 @@ class OrderPlaced {
50
57
  }
51
58
  ```
52
59
 
53
- ### 2. Create a Source and Connect
60
+ ### 2. Create a Source
54
61
 
55
62
  ```typescript
56
63
  import { IrisSource } from "@lindorm/iris";
@@ -71,7 +78,6 @@ await source.setup();
71
78
  ```typescript
72
79
  const bus = source.messageBus(OrderPlaced);
73
80
 
74
- // Subscribe
75
81
  await bus.subscribe({
76
82
  topic: "OrderPlaced",
77
83
  queue: "order-service",
@@ -80,7 +86,6 @@ await bus.subscribe({
80
86
  },
81
87
  });
82
88
 
83
- // Publish
84
89
  const msg = bus.create({ orderId: "abc-123", total: 59.99 });
85
90
  await bus.publish(msg);
86
91
  ```
@@ -92,78 +97,13 @@ await source.drain();
92
97
  await source.disconnect();
93
98
  ```
94
99
 
95
- ## Table of Contents
96
-
97
- - [Messaging Patterns](#messaging-patterns)
98
- - [Publisher (Fire-and-Forget)](#publisher-fire-and-forget)
99
- - [Message Bus (Pub/Sub + Queues)](#message-bus-pubsub--queues)
100
- - [Worker Queue (Competing Consumers)](#worker-queue-competing-consumers)
101
- - [RPC (Request/Response)](#rpc-requestresponse)
102
- - [Stream Processor (Pipelines)](#stream-processor-pipelines)
103
- - [Field Types](#field-types)
104
- - [Decorators](#decorators)
105
- - [Class-Level Decorators](#class-level-decorators)
106
- - [`@Message`](#message)
107
- - [`@AbstractMessage`](#abstractmessage)
108
- - [`@Namespace`](#namespace)
109
- - [`@Version`](#version)
110
- - [`@Topic`](#topic)
111
- - [`@Broadcast`](#broadcast)
112
- - [`@Persistent`](#persistent)
113
- - [`@Priority`](#priority)
114
- - [`@Delay`](#delay)
115
- - [`@Expiry`](#expiry)
116
- - [`@Encrypted`](#encrypted)
117
- - [`@Compressed`](#compressed)
118
- - [`@Retry`](#retry)
119
- - [`@DeadLetter`](#deadletter)
120
- - [Field Decorators](#field-decorators)
121
- - [`@Field`](#field)
122
- - [`@IdentifierField`](#identifierfield)
123
- - [`@CorrelationField`](#correlationfield)
124
- - [`@TimestampField`](#timestampfield)
125
- - [`@MandatoryField`](#mandatoryfield)
126
- - [`@PersistentField`](#persistentfield)
127
- - [Field Modifiers](#field-modifiers)
128
- - [`@Generated`](#generated)
129
- - [`@Header`](#header)
130
- - [`@Enum`](#enum)
131
- - [`@Min` / `@Max`](#min--max)
132
- - [`@Schema`](#schema)
133
- - [`@Transform`](#transform)
134
- - [Lifecycle Hook Decorators](#lifecycle-hook-decorators)
135
- - [`@OnCreate`](#oncreate)
136
- - [`@OnHydrate`](#onhydrate)
137
- - [`@OnValidate`](#onvalidate)
138
- - [`@BeforePublish` / `@AfterPublish`](#beforepublish--afterpublish)
139
- - [`@BeforeConsume` / `@AfterConsume`](#beforeconsume--afterconsume)
140
- - [`@OnConsumeError`](#onconsumeerror)
141
- - [Retry and Dead Letter](#retry-and-dead-letter)
142
- - [Dynamic Topics](#dynamic-topics)
143
- - [Encryption and Compression](#encryption-and-compression)
144
- - [Message Subscribers](#message-subscribers)
145
- - [Hook Execution Order](#hook-execution-order)
146
- - [Consume Envelope](#consume-envelope)
147
- - [Message Manipulation](#message-manipulation)
148
- - [Publish Options](#publish-options)
149
- - [Zod Validation](#zod-validation)
150
- - [Cloning](#cloning)
151
- - [Driver Configuration](#driver-configuration)
152
- - [Memory](#memory)
153
- - [RabbitMQ](#rabbitmq)
154
- - [Kafka](#kafka)
155
- - [NATS](#nats)
156
- - [Redis Streams](#redis-streams)
157
- - [Persistence (Delay and Dead Letter Stores)](#persistence-delay-and-dead-letter-stores)
158
- - [Connection State](#connection-state)
159
- - [Testing with Mocks](#testing-with-mocks)
160
- - [Error Classes](#error-classes)
161
-
162
100
  ## Messaging Patterns
163
101
 
164
- ### Publisher (Fire-and-Forget)
102
+ Every primitive below is created from an `IrisSource` (or a session — see [Sessions](#sessions)) and is bound to a single message class.
103
+
104
+ ### Publisher
165
105
 
166
- Write-only. No subscriptions.
106
+ Write-only. Use when a service produces messages but never consumes them.
167
107
 
168
108
  ```typescript
169
109
  const pub = source.publisher(OrderPlaced);
@@ -171,68 +111,60 @@ const pub = source.publisher(OrderPlaced);
171
111
  const msg = pub.create({ orderId: "abc-123", total: 59.99 });
172
112
  await pub.publish(msg);
173
113
 
174
- // Batch publish
175
114
  await pub.publish([msg1, msg2, msg3]);
176
115
  ```
177
116
 
178
- ### Message Bus (Pub/Sub + Queues)
117
+ ### Message Bus
179
118
 
180
- Publish with topic-based subscriptions. Supports broadcast and competing-consumer queues.
119
+ Pub/sub with topic-based subscriptions. Supports broadcast and competing-consumer queues.
181
120
 
182
121
  ```typescript
183
122
  const bus = source.messageBus(OrderPlaced);
184
123
 
185
- // Broadcast: every subscriber receives every message
186
124
  await bus.subscribe({
187
125
  topic: "OrderPlaced",
188
126
  callback: async (msg) => {
189
- /* ... */
127
+ /* every subscriber gets every message */
190
128
  },
191
129
  });
192
130
 
193
- // Queue: messages are distributed round-robin among consumers
194
131
  await bus.subscribe({
195
132
  topic: "OrderPlaced",
196
133
  queue: "order-processors",
197
134
  callback: async (msg) => {
198
- /* ... */
135
+ /* round-robin across consumers in this queue */
199
136
  },
200
137
  });
201
138
 
202
- // Multiple subscriptions at once
203
139
  await bus.subscribe([
204
140
  { topic: "OrderPlaced", queue: "analytics", callback: handleAnalytics },
205
141
  { topic: "OrderPlaced", queue: "notifications", callback: handleNotify },
206
142
  ]);
207
143
 
208
- // Unsubscribe
209
144
  await bus.unsubscribe({ topic: "OrderPlaced", queue: "analytics" });
210
145
  await bus.unsubscribeAll();
211
146
  ```
212
147
 
213
- ### Worker Queue (Competing Consumers)
148
+ ### Worker Queue
214
149
 
215
- Specialised for job distribution where each message is processed by exactly one consumer.
150
+ Specialised competing-consumer queue where every message is processed by exactly one consumer.
216
151
 
217
152
  ```typescript
218
153
  const queue = source.workerQueue(OrderPlaced);
219
154
 
220
- // Register competing consumers
221
155
  await queue.consume("process-orders", async (msg, envelope) => {
222
156
  console.log(`Processing order ${msg.orderId} (attempt ${envelope.attempt})`);
223
157
  });
224
158
 
225
- // Publish work
226
159
  await queue.publish(queue.create({ orderId: "abc-123", total: 59.99 }));
227
160
 
228
- // Clean up
229
161
  await queue.unconsume("process-orders");
230
162
  await queue.unconsumeAll();
231
163
  ```
232
164
 
233
- ### RPC (Request/Response)
165
+ ### RPC
234
166
 
235
- Synchronous request/response over the message broker.
167
+ Request/response over the broker.
236
168
 
237
169
  ```typescript
238
170
  @Message()
@@ -249,7 +181,6 @@ class PriceResponse {
249
181
  const client = source.rpcClient(GetPrice, PriceResponse);
250
182
  const server = source.rpcServer(GetPrice, PriceResponse);
251
183
 
252
- // Server: register handler
253
184
  await server.serve(async (req) => {
254
185
  const res = new PriceResponse();
255
186
  res.price = await lookupPrice(req.sku);
@@ -257,38 +188,21 @@ await server.serve(async (req) => {
257
188
  return res;
258
189
  });
259
190
 
260
- // Client: send request
261
191
  const req = new GetPrice();
262
192
  req.sku = "WIDGET-42";
263
193
 
264
194
  const res = await client.request(req);
265
- console.log(`${res.price} ${res.currency}`); // 29.99 USD
266
-
267
- // With timeout
268
- const res2 = await client.request(req, { timeout: 5000 });
195
+ const resWithTimeout = await client.request(req, { timeout: 5000 });
269
196
 
270
- // Clean up
271
197
  await client.close();
272
198
  await server.unserveAll();
273
199
  ```
274
200
 
275
- ### Stream Processor (Pipelines)
201
+ ### Stream Processor
276
202
 
277
- Declarative stream processing with an immutable builder pattern.
203
+ Declarative pipelines built with an immutable builder. The pipeline is started, paused, resumed, and stopped explicitly.
278
204
 
279
205
  ```typescript
280
- @Message()
281
- class RawEvent {
282
- @Field("string") type!: string;
283
- @Field("float") value!: number;
284
- }
285
-
286
- @Message()
287
- class AggregatedEvent {
288
- @Field("float") sum!: number;
289
- @Field("integer") count!: number;
290
- }
291
-
292
206
  const pipeline = source
293
207
  .stream()
294
208
  .from(RawEvent)
@@ -302,22 +216,23 @@ const pipeline = source
302
216
  .to(AggregatedEvent);
303
217
 
304
218
  await pipeline.start();
305
- // pipeline.isRunning() === true
306
-
219
+ pipeline.isRunning(); // true
307
220
  await pipeline.pause();
308
221
  await pipeline.resume();
309
222
  await pipeline.stop();
310
223
  ```
311
224
 
225
+ The builder also exposes `flatMap((msg) => Array<T>)` and `batch(size, { timeout? })` between `from(...)` and `to(...)`.
226
+
312
227
  ## Field Types
313
228
 
314
- The `@Field()` decorator accepts the following type identifiers:
229
+ `@Field()` accepts the following type identifiers:
315
230
 
316
231
  | Category | Types |
317
232
  | -------------- | -------------------------------- |
318
233
  | Boolean | `boolean` |
319
234
  | Integer | `integer`, `bigint` |
320
- | Floating Point | `float` |
235
+ | Floating point | `float` |
321
236
  | String | `string`, `email`, `url`, `uuid` |
322
237
  | Enum | `enum` |
323
238
  | Date/Time | `date` |
@@ -325,7 +240,7 @@ The `@Field()` decorator accepts the following type identifiers:
325
240
 
326
241
  ```typescript
327
242
  @Message()
328
- class FullExample {
243
+ class Example {
329
244
  @IdentifierField() id!: string;
330
245
  @CorrelationField() correlationId!: string;
331
246
  @TimestampField() createdAt!: Date;
@@ -350,15 +265,13 @@ class FullExample {
350
265
 
351
266
  ## Decorators
352
267
 
353
- All decorators use the TC39 (stage 3) decorator specification. Class decorators receive `ClassDecoratorContext`, field decorators receive `ClassFieldDecoratorContext`. Metadata flows through the `Symbol.metadata` prototype chain, so abstract base class decorators are inherited by concrete subclasses.
268
+ All decorators use the TC39 stage 3 specification. Class decorators receive `ClassDecoratorContext`, field decorators receive `ClassFieldDecoratorContext`. Metadata flows through the `Symbol.metadata` prototype chain, so abstract base classes propagate fields and hooks to concrete subclasses automatically.
354
269
 
355
270
  ### Class-Level Decorators
356
271
 
357
- These decorators are applied to classes and configure message-wide behavior.
358
-
359
272
  #### `@Message`
360
273
 
361
- Marks a class as a concrete message type registered in the global message registry. Every message class must have exactly one of `@Message` or `@AbstractMessage`.
274
+ Marks a class as a concrete message and registers it in the global message registry. Every message must have exactly one of `@Message` or `@AbstractMessage`.
362
275
 
363
276
  ```typescript
364
277
  @Message()
@@ -366,17 +279,17 @@ class OrderPlaced {
366
279
  /* ... */
367
280
  }
368
281
 
369
- @Message({ name: "order-placed" }) // custom message name
370
- class OrderPlaced {
282
+ @Message({ name: "order-placed" })
283
+ class OrderPlaced_v1 {
371
284
  /* ... */
372
285
  }
373
286
  ```
374
287
 
375
- **Options:** `{ name?: string }` — Override the message name. Defaults to the class name with any trailing version suffix (`_v1`, `_V2`) stripped. Must not conflict with other registered message names.
288
+ **Options:** `{ name?: string }` — overrides the registered name. Defaults to the class name with any trailing `_v1`/`_V2` suffix stripped. Names must be unique across the registry.
376
289
 
377
290
  #### `@AbstractMessage`
378
291
 
379
- Marks a class as an abstract message base. It is **not** registered in the global message registry. Fields, hooks, and metadata are inherited by `@Message()` subclasses via the `Symbol.metadata` prototype chain.
292
+ Marks a class as an abstract base. The class is **not** registered. Fields, hooks, and metadata are inherited by `@Message` subclasses through the metadata prototype chain.
380
293
 
381
294
  ```typescript
382
295
  @AbstractMessage()
@@ -392,11 +305,9 @@ class OrderPlaced extends BaseEvent {
392
305
  }
393
306
  ```
394
307
 
395
- Cannot be combined with `@Message` on the same class.
396
-
397
308
  #### `@Namespace`
398
309
 
399
- Places the message in a named namespace for logical grouping and routing.
310
+ Places the message in a named namespace for routing and grouping.
400
311
 
401
312
  ```typescript
402
313
  @Namespace("orders")
@@ -406,11 +317,11 @@ class OrderPlaced {
406
317
  }
407
318
  ```
408
319
 
409
- **Argument:** `string` — must be non-empty. Throws `IrisMetadataError` if empty or whitespace-only.
320
+ **Argument:** `string` — non-empty, non-whitespace. Throws `IrisMetadataError` otherwise.
410
321
 
411
322
  #### `@Version`
412
323
 
413
- Sets the message schema version. Useful for evolving message formats while maintaining backward compatibility.
324
+ Sets the message schema version.
414
325
 
415
326
  ```typescript
416
327
  @Version(1)
@@ -420,14 +331,14 @@ class OrderPlaced {
420
331
  }
421
332
  ```
422
333
 
423
- **Argument:** `number` — must be a positive integer (>= 1). Throws `IrisMetadataError` otherwise.
334
+ **Argument:** `number` — positive integer (>= 1). Throws `IrisMetadataError` otherwise.
424
335
 
425
336
  #### `@Topic`
426
337
 
427
- Provides a dynamic topic resolution callback. Instead of using the message class name as the topic, the callback computes the topic from the message content at publish time.
338
+ Provides a callback that resolves the routing topic dynamically from the message instance instead of using the class name.
428
339
 
429
340
  ```typescript
430
- @Topic((msg: any) => `events.${msg.region}.${msg.type}`)
341
+ @Topic((msg: RegionalEvent) => `events.${msg.region}.${msg.type}`)
431
342
  @Message()
432
343
  class RegionalEvent {
433
344
  @Field("string") region!: string;
@@ -435,128 +346,118 @@ class RegionalEvent {
435
346
  }
436
347
  ```
437
348
 
438
- **Argument:** `(message: any) => string` — receives the message instance, returns the routing topic string.
349
+ **Argument:** `(message: any) => string`.
439
350
 
440
351
  #### `@Broadcast`
441
352
 
442
- Marks a message for broadcast delivery. When published, the message is delivered to **all** subscribers rather than being distributed round-robin to one consumer per queue.
353
+ Marks a message for broadcast delivery. Every subscriber receives every message rather than competing for it.
443
354
 
444
355
  ```typescript
445
356
  @Broadcast()
446
357
  @Message()
447
358
  class SystemNotification {
448
- @Field("string") text!: string;
359
+ /* ... */
449
360
  }
450
361
  ```
451
362
 
452
- No arguments.
453
-
454
363
  #### `@Persistent`
455
364
 
456
- Marks a message as persistent/durable. Persistent messages survive broker restarts (where supported by the driver).
365
+ Marks a message as durable. Persistent messages survive broker restarts where the underlying driver supports it.
457
366
 
458
367
  ```typescript
459
368
  @Persistent()
460
369
  @Message()
461
370
  class PaymentCharge {
462
- @Field("string") chargeId!: string;
371
+ /* ... */
463
372
  }
464
373
  ```
465
374
 
466
- No arguments.
467
-
468
375
  #### `@Priority`
469
376
 
470
- Sets the default priority for a message type. Higher priority messages are delivered before lower priority ones (where supported by the driver).
377
+ Default priority for a message type. Higher priority messages are delivered first where supported.
471
378
 
472
379
  ```typescript
473
380
  @Priority(8)
474
381
  @Message()
475
382
  class UrgentAlert {
476
- @Field("string") text!: string;
383
+ /* ... */
477
384
  }
478
385
  ```
479
386
 
480
- **Argument:** `number` — integer between 0 and 10 inclusive. Throws `IrisMetadataError` if out of range or not an integer.
387
+ **Argument:** `number` — integer in `[0, 10]`. Throws `IrisMetadataError` otherwise.
481
388
 
482
389
  #### `@Delay`
483
390
 
484
- Sets a default delivery delay. The message is held for the specified duration before being delivered to consumers.
391
+ Default delivery delay in milliseconds. Messages are held until the delay elapses. Can be overridden per publish via `PublishOptions.delay`.
485
392
 
486
393
  ```typescript
487
- @Delay(5000) // 5 seconds
394
+ @Delay(5000)
488
395
  @Message()
489
396
  class ScheduledReminder {
490
- @Field("string") text!: string;
397
+ /* ... */
491
398
  }
492
399
  ```
493
400
 
494
- **Argument:** `number` — non-negative integer in milliseconds. Throws `IrisMetadataError` if negative or not an integer.
495
-
496
- Can be overridden per-publish via `PublishOptions.delay`.
401
+ **Argument:** `number` — non-negative integer.
497
402
 
498
403
  #### `@Expiry`
499
404
 
500
- Sets a default message TTL (time-to-live). Messages that are not consumed within this window are discarded.
405
+ Default TTL in milliseconds. Unconsumed messages are discarded after this window. Can be overridden per publish via `PublishOptions.expiry`.
501
406
 
502
407
  ```typescript
503
- @Expiry(60000) // 1 minute
408
+ @Expiry(60000)
504
409
  @Message()
505
410
  class TemporaryOffer {
506
- @Field("float") discount!: number;
411
+ /* ... */
507
412
  }
508
413
  ```
509
414
 
510
- **Argument:** `number` — non-negative integer in milliseconds. Throws `IrisMetadataError` if negative or not an integer.
511
-
512
- Can be overridden per-publish via `PublishOptions.expiry`.
415
+ **Argument:** `number` — non-negative integer.
513
416
 
514
417
  #### `@Encrypted`
515
418
 
516
- Enables payload encryption via `@lindorm/amphora`. The entire message payload is encrypted before publishing and decrypted on consume. Requires an `IAmphora` instance configured on `IrisSource`.
419
+ Encrypts the payload via `@lindorm/amphora` before publishing and decrypts on consume. Requires `amphora` on `IrisSource`.
517
420
 
518
421
  ```typescript
519
- @Encrypted() // encrypt with any available key
422
+ @Encrypted()
520
423
  @Message()
521
424
  class SensitivePayload {
522
425
  @Field("string") ssn!: string;
523
426
  }
524
427
 
525
- @Encrypted({ purpose: "pii" }) // filter keys by purpose
428
+ @Encrypted({ purpose: "pii" })
526
429
  @Message()
527
430
  class MedicalRecord {
528
- @Field("json") data!: Record<string, unknown>;
431
+ @Field("object") data!: Record<string, unknown>;
529
432
  }
530
433
  ```
531
434
 
532
- **Argument:** `AmphoraPredicate` (optional, defaults to `{}`) — a predicate object to filter which encryption key to use from the key store. Supports fields like `algorithm`, `encryption`, `purpose`, `type`, `ownerId`, and standard predicate operators (`$eq`, `$in`, `$neq`, etc.).
435
+ **Argument:** `AmphoraPredicate` (defaults to `{}`) — predicate object that selects which key from the amphora key store is used (e.g. `algorithm`, `encryption`, `purpose`, `type`, `ownerId`, plus the standard `$eq`, `$in`, `$neq` operators).
533
436
 
534
437
  #### `@Compressed`
535
438
 
536
- Enables payload compression before publishing and decompression on consume.
439
+ Compresses the payload before publishing.
537
440
 
538
441
  ```typescript
539
442
  @Compressed() // gzip (default)
540
- @Compressed("brotli") // brotli compression
443
+ @Compressed("brotli") // brotli
541
444
  @Message()
542
445
  class LargePayload {
543
446
  @Field("object") data!: Record<string, unknown>;
544
447
  }
545
448
  ```
546
449
 
547
- **Argument:** `"gzip" | "deflate" | "brotli"` (optional, defaults to `"gzip"`).
548
-
549
- When combined with `@Encrypted`, compression is applied first, then encryption.
450
+ **Argument:** `"gzip" | "deflate" | "brotli"` (defaults to `"gzip"`). When combined with `@Encrypted`, compression runs first.
550
451
 
551
452
  #### `@Retry`
552
453
 
553
- Configures automatic retry behavior when a consume callback throws. Failed messages are retried with configurable backoff strategies.
454
+ Configures retry behavior when a consume callback throws.
554
455
 
555
456
  ```typescript
556
- @Retry() // defaults: 3 retries, constant 1s delay
457
+ @Retry()
557
458
  @Message()
558
459
  class ProcessOrder {
559
- @Field("string") orderId!: string;
460
+ /* ... */
560
461
  }
561
462
 
562
463
  @Retry({
@@ -569,249 +470,147 @@ class ProcessOrder {
569
470
  })
570
471
  @Message()
571
472
  class PaymentCharge {
572
- @Field("string") chargeId!: string;
473
+ /* ... */
573
474
  }
574
475
  ```
575
476
 
576
477
  **Options:**
577
478
 
578
- | Field | Type | Default | Description |
579
- | ------------ | --------------------------------------------- | ------------ | ----------------------------------------- |
580
- | `maxRetries` | `number` | `3` | Maximum number of retry attempts |
581
- | `strategy` | `"constant"` \| `"linear"` \| `"exponential"` | `"constant"` | Backoff strategy |
582
- | `delay` | `number` | `1000` | Initial delay in milliseconds |
583
- | `delayMax` | `number` | `30000` | Maximum delay cap in milliseconds |
584
- | `multiplier` | `number` | `2` | Multiplier for exponential backoff |
585
- | `jitter` | `boolean` | `false` | Add randomness to prevent thundering herd |
586
-
587
- **Retry strategies:**
588
-
589
- | Strategy | Delay pattern (base=1000, multiplier=2) |
590
- | --------------- | ------------------------------------------- |
591
- | `"constant"` | 1000, 1000, 1000, ... |
592
- | `"linear"` | 1000, 2000, 3000, ... |
593
- | `"exponential"` | 1000, 2000, 4000, 8000, ... (capped at max) |
479
+ | Field | Type | Default | Description |
480
+ | ------------ | --------------------------------------------- | ------------ | -------------------------------------- |
481
+ | `maxRetries` | `number` | `3` | Maximum number of retry attempts |
482
+ | `strategy` | `"constant"` \| `"linear"` \| `"exponential"` | `"constant"` | Backoff strategy |
483
+ | `delay` | `number` | `1000` | Initial delay in milliseconds |
484
+ | `delayMax` | `number` | `30000` | Maximum delay cap in milliseconds |
485
+ | `multiplier` | `number` | `2` | Multiplier used by exponential backoff |
486
+ | `jitter` | `boolean` | `false` | Add randomness to spread retry storms |
487
+
488
+ | Strategy | Delay sequence (`delay=1000`, `multiplier=2`) |
489
+ | --------------- | ---------------------------------------------------- |
490
+ | `"constant"` | `1000, 1000, 1000, ...` |
491
+ | `"linear"` | `1000, 2000, 3000, ...` |
492
+ | `"exponential"` | `1000, 2000, 4000, 8000, ...` (capped at `delayMax`) |
594
493
 
595
494
  #### `@DeadLetter`
596
495
 
597
- Routes messages that have exhausted all retry attempts to the dead letter store. Requires `@Retry` and a dead letter store configured via `IrisSource.persistence.deadLetter`.
496
+ Routes messages that exhaust all retries to the configured dead letter store. Requires `@Retry` and `IrisSource.persistence.deadLetter`.
598
497
 
599
498
  ```typescript
600
499
  @Retry({ maxRetries: 3 })
601
500
  @DeadLetter()
602
501
  @Message()
603
502
  class PaymentCharge {
604
- @Field("string") chargeId!: string;
503
+ /* ... */
605
504
  }
606
505
  ```
607
506
 
608
- No arguments.
609
-
610
- ---
611
-
612
507
  ### Field Decorators
613
508
 
614
- These decorators are applied to class properties and declare message fields. Each field decorator creates a complete field definition with its type, default value, and nullability.
509
+ Each field decorator declares one message field with its type, default, and nullability. Combine with the modifier decorators below.
615
510
 
616
511
  #### `@Field`
617
512
 
618
- The foundational field decorator. Declares a message field with an explicit type.
513
+ Declares a field with an explicit type from the [Field Types](#field-types) table.
619
514
 
620
515
  ```typescript
621
- @Field("string")
622
- name!: string;
623
-
624
- @Field("integer")
625
- count!: number;
626
-
627
- @Field("float")
628
- price!: number;
629
-
630
- @Field("boolean")
631
- active!: boolean;
632
-
633
- @Field("date")
634
- expiresAt!: Date;
635
-
636
- @Field("uuid")
637
- referenceId!: string;
638
-
639
- @Field("email")
640
- contactEmail!: string;
641
-
642
- @Field("url")
643
- callbackUrl!: string;
644
-
645
- @Field("array")
646
- tags!: Array<string>;
647
-
648
- @Field("object")
649
- metadata!: Record<string, unknown>;
516
+ @Field("string") name!: string;
517
+ @Field("integer") count!: number;
518
+ @Field("date") expiresAt!: Date;
519
+ @Field("array") tags!: Array<string>;
520
+ @Field("object") metadata!: Record<string, unknown>;
650
521
  ```
651
522
 
652
- **Arguments:** `(type: MetaFieldType)`.
653
-
654
- Modifiers (nullable, optional, default value, transform) are expressed as stackable decorators applied above `@Field`. See the modifier sections below.
655
-
656
- ```typescript
657
- @Nullable()
658
- @Field("string")
659
- description!: string | null;
660
-
661
- @Optional()
662
- @Field("string")
663
- nickname?: string;
664
-
665
- @Default(0)
666
- @Field("integer")
667
- retryCount!: number;
668
-
669
- @Default(() => "generated")
670
- @Field("string")
671
- code!: string;
672
-
673
- @Transform({
674
- to: (value: unknown) => Math.round((value as number) * 100),
675
- from: (raw: unknown) => (raw as number) / 100,
676
- })
677
- @Field("float")
678
- price!: number;
679
- ```
523
+ **Argument:** `MetaFieldType` (re-exported as `IrisFieldType`).
680
524
 
681
525
  #### `@IdentifierField`
682
526
 
683
- Shorthand for a UUID primary identifier field. Auto-generates a UUID v4 on message creation.
527
+ Auto-generated UUID v4 primary identifier. Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
684
528
 
685
529
  ```typescript
686
- @IdentifierField()
687
- id!: string;
530
+ @IdentifierField() id!: string;
688
531
  ```
689
532
 
690
- Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
691
-
692
- No arguments.
693
-
694
533
  #### `@CorrelationField`
695
534
 
696
- Shorthand for a UUID correlation tracking field. Auto-generates a UUID v4 on message creation. Used to trace related messages across publish/consume chains.
535
+ Auto-generated UUID v4 used to trace related messages across publish/consume chains. Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
697
536
 
698
537
  ```typescript
699
- @CorrelationField()
700
- correlationId!: string;
538
+ @CorrelationField() correlationId!: string;
701
539
  ```
702
540
 
703
- Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
704
-
705
- No arguments.
706
-
707
541
  #### `@TimestampField`
708
542
 
709
- Shorthand for a timestamp field. Auto-generates the current `Date` on message creation.
543
+ Auto-generated `Date` set on creation. Equivalent to `@Default(() => new Date()) @Field("date")`. Non-nullable, non-optional.
710
544
 
711
545
  ```typescript
712
- @TimestampField()
713
- createdAt!: Date;
546
+ @TimestampField() createdAt!: Date;
714
547
  ```
715
548
 
716
- Equivalent to `@Default(() => new Date()) @Field("date")`. Non-nullable, non-optional.
717
-
718
- No arguments.
719
-
720
549
  #### `@MandatoryField`
721
550
 
722
- Shorthand for a boolean flag that defaults to `false`. Commonly used for acknowledgement or processing flags.
551
+ Boolean flag that defaults to `false`. Equivalent to `@Default(false) @Field("boolean")`.
723
552
 
724
553
  ```typescript
725
- @MandatoryField()
726
- requiresApproval!: boolean;
554
+ @MandatoryField() requiresApproval!: boolean;
727
555
  ```
728
556
 
729
- Equivalent to `@Default(false) @Field("boolean")`. Non-nullable, non-optional.
730
-
731
- No arguments.
732
-
733
557
  #### `@PersistentField`
734
558
 
735
- Shorthand for a boolean persistence flag that defaults to `false`. Commonly used to mark whether a message should be durably stored.
559
+ Boolean persistence flag that defaults to `false`. Equivalent to `@Default(false) @Field("boolean")`.
736
560
 
737
561
  ```typescript
738
- @PersistentField()
739
- shouldPersist!: boolean;
562
+ @PersistentField() shouldPersist!: boolean;
740
563
  ```
741
564
 
742
- Equivalent to `@Default(false) @Field("boolean")`. Non-nullable, non-optional.
743
-
744
- No arguments.
745
-
746
- ---
747
-
748
565
  ### Field Modifiers
749
566
 
750
- These decorators modify the behavior of a field declared with `@Field` or one of the shorthand field decorators. Stack them on the same property. Modifier decorators must appear alongside a field decorator on the same property.
567
+ Stack these on top of a field decorator to refine its behavior.
751
568
 
752
- #### `@Generated`
753
-
754
- Marks a field for automatic value generation on message creation.
569
+ #### `@Nullable` / `@Optional`
755
570
 
756
571
  ```typescript
757
- @Generated("uuid") // UUID v4
758
- @Field("uuid")
759
- traceId!: string;
760
-
761
- @Generated("date") // current timestamp
762
- @Field("date")
763
- processedAt!: Date;
764
-
765
- @Generated("string") // random string (default length)
766
- @Field("string")
767
- token!: string;
768
-
769
- @Generated("string", { length: 12 }) // random string with custom length
770
- @Field("string")
771
- shortCode!: string;
572
+ @Nullable() @Field("string") description!: string | null;
573
+ @Optional() @Field("string") nickname?: string;
574
+ ```
772
575
 
773
- @Generated("integer", { min: 1, max: 1000 })
774
- @Field("integer")
775
- sequenceNumber!: number;
576
+ #### `@Default`
776
577
 
777
- @Generated("float", { min: 0.0, max: 1.0 })
778
- @Field("float")
779
- weight!: number;
578
+ ```typescript
579
+ @Default(0) @Field("integer") retryCount!: number;
580
+ @Default(() => "generated") @Field("string") code!: string;
780
581
  ```
781
582
 
782
- **Arguments:** `(strategy: MetaGeneratedStrategy, options?: GeneratedDecoratorOptions)`.
583
+ **Argument:** `MetaFieldDefault` (re-exported as `IrisFieldDefault`) — a primitive value, an array/record of primitives, or a no-arg function returning one.
783
584
 
784
- **Strategies:**
585
+ #### `@Generated`
586
+
587
+ Marks a field for automatic value generation when an instance is created.
785
588
 
786
- | Strategy | Description |
787
- | ----------- | ---------------------------------------- |
788
- | `"uuid"` | Generate UUID v4 |
789
- | `"date"` | Current timestamp |
790
- | `"string"` | Random string with configurable `length` |
791
- | `"integer"` | Random integer in `[min, max]` range |
792
- | `"float"` | Random float in `[min, max]` range |
589
+ ```typescript
590
+ @Generated("uuid") @Field("uuid") traceId!: string;
591
+ @Generated("date") @Field("date") processedAt!: Date;
592
+ @Generated("string") @Field("string") token!: string;
593
+ @Generated("string", { length: 12 }) @Field("string") shortCode!: string;
594
+ @Generated("integer", { min: 1, max: 1000 }) @Field("integer") sequence!: number;
595
+ @Generated("float", { min: 0, max: 1 }) @Field("float") weight!: number;
596
+ ```
793
597
 
794
- **Options:** `{ length?: number, min?: number, max?: number }` all optional, all default to `null`.
598
+ **Strategies:** `"uuid" | "date" | "string" | "integer" | "float"` (re-exported as `IrisGeneratedStrategy`). **Options:** `{ length?, min?, max? }`.
795
599
 
796
600
  #### `@Header`
797
601
 
798
- Promotes a field value to a message header. Headers are transported as key-value metadata alongside the payload, accessible without deserialising the full message body.
602
+ Promotes a field to a transport header so it is accessible without deserialising the body.
799
603
 
800
604
  ```typescript
801
- @Header() // header name = property name ("source")
802
- @Field("string")
803
- source!: string;
804
-
805
- @Header("x-trace-id") // explicit header name
806
- @Field("uuid")
807
- traceId!: string;
605
+ @Header() @Field("string") source!: string;
606
+ @Header("x-trace-id") @Field("uuid") traceId!: string;
808
607
  ```
809
608
 
810
- **Argument:** `string?` — custom header name. Defaults to the property name. Throws `IrisMetadataError` if the resolved name is empty or whitespace-only.
609
+ **Argument:** `string?` — header name, defaults to the property name. Throws `IrisMetadataError` if it resolves to an empty string.
811
610
 
812
611
  #### `@Enum`
813
612
 
814
- Restricts a field to a fixed set of allowed values. Pass a TypeScript enum or a plain `Record<string, string | number>`. Enforced during Zod validation.
613
+ Restricts the field to the values of a TypeScript enum or `Record<string, string | number>`. Enforced during validation.
815
614
 
816
615
  ```typescript
817
616
  enum OrderStatus {
@@ -820,56 +619,34 @@ enum OrderStatus {
820
619
  Delivered = "delivered",
821
620
  }
822
621
 
823
- @Enum(OrderStatus)
824
- @Field("enum")
825
- status!: OrderStatus;
622
+ @Enum(OrderStatus) @Field("enum") status!: OrderStatus;
826
623
  ```
827
624
 
828
- **Argument:** `Record<string, string | number>` — the enum object or value map.
829
-
830
625
  #### `@Min` / `@Max`
831
626
 
832
- Set minimum/maximum bounds for numeric fields or minimum/maximum length for string fields. Enforced during Zod validation.
627
+ Numeric bounds for number fields, length bounds for string fields.
833
628
 
834
629
  ```typescript
835
- @Min(0)
836
- @Max(100)
837
- @Field("integer")
838
- score!: number;
839
-
840
- @Min(1)
841
- @Max(255)
842
- @Field("string")
843
- name!: string;
630
+ @Min(0) @Max(100) @Field("integer") score!: number;
631
+ @Min(1) @Max(255) @Field("string") name!: string;
844
632
  ```
845
633
 
846
- **Argument:** `number`.
847
-
848
634
  #### `@Schema`
849
635
 
850
- Attaches a Zod schema for fine-grained field validation. The schema is evaluated during message validation.
636
+ Attaches a Zod schema for fine-grained validation.
851
637
 
852
638
  ```typescript
853
639
  import { z } from "zod";
854
640
 
855
- @Schema(z.string().email())
856
- @Field("email")
857
- email!: string;
858
-
859
- @Schema(z.number().int().min(13).max(150))
860
- @Field("integer")
861
- age!: number;
862
-
863
- @Schema(z.string().regex(/^[A-Z]{2,3}$/))
864
- @Field("string")
865
- countryCode!: string;
641
+ @Schema(z.string().email()) @Field("email") email!: string;
642
+ @Schema(z.number().int().min(13).max(150)) @Field("integer") age!: number;
866
643
  ```
867
644
 
868
- **Argument:** `z.ZodType` — any Zod schema.
645
+ **Argument:** `z.ZodType`.
869
646
 
870
647
  #### `@Transform`
871
648
 
872
- Applies a bidirectional transform to a field value. `to` runs during serialisation (message -> transport), `from` runs during deserialisation (transport -> message).
649
+ Bidirectional transform between the in-memory field value and its serialised form. `to` runs on serialise, `from` runs on hydrate.
873
650
 
874
651
  ```typescript
875
652
  @Transform({
@@ -878,259 +655,90 @@ Applies a bidirectional transform to a field value. `to` runs during serialisati
878
655
  })
879
656
  @Field("string")
880
657
  tags!: string[];
881
-
882
- @Transform<Date, number>({
883
- to: (date) => date.getTime(),
884
- from: (ms) => new Date(ms),
885
- })
886
- @Field("bigint")
887
- timestamp!: Date;
888
658
  ```
889
659
 
890
- **Options:** `{ to: (value: TFrom) => TTo, from: (raw: TTo) => TFrom }`.
891
-
892
- This is a standalone decorator that uses a separate staging path. For inline transforms, use the `transform` option on `@Field` instead.
893
-
894
- ---
660
+ **Options:** `{ to: (value) => unknown, from: (raw) => unknown }` (the type is re-exported as `IrisTransformFn`).
895
661
 
896
662
  ### Lifecycle Hook Decorators
897
663
 
898
- Lifecycle hooks are **class decorators** that register callbacks at specific points in the message lifecycle. All hooks receive `(message, context?)` as arguments, where `context` is the source's context value.
899
-
900
- Hooks may be async (`void | Promise<void>`) unless otherwise noted.
664
+ Hooks are class decorators. Each hook receives `(message, meta)` where `meta: IrisHookMeta` carries `{ correlationId, actor, timestamp }`. Hooks may be sync or async.
901
665
 
902
- #### `@OnCreate`
903
-
904
- Fires when a message instance is created via `create()`. Useful for setting computed defaults or derived fields.
666
+ | Decorator | Fires |
667
+ | ----------------- | ---------------------------------------------------------------------------------- |
668
+ | `@OnCreate` | When a message is constructed via `create()` |
669
+ | `@OnHydrate` | After raw transport data is rehydrated, before delivery to a consume callback |
670
+ | `@OnValidate` | During validation, after the built-in Zod check — throw to reject |
671
+ | `@BeforePublish` | Before the transport publishes |
672
+ | `@AfterPublish` | After the transport confirms publication |
673
+ | `@BeforeConsume` | After deserialisation, before the consume callback |
674
+ | `@AfterConsume` | After the consume callback completes successfully |
675
+ | `@OnConsumeError` | When the consume callback throws — receives `(error, message, meta)` (error first) |
905
676
 
906
677
  ```typescript
907
678
  @OnCreate((msg) => {
908
679
  msg.slug = msg.name.toLowerCase().replace(/\s+/g, "-");
909
680
  })
910
- @Message()
911
- class OrderPlaced {
912
- @Field("string") name!: string;
913
- @Field("string") slug!: string;
914
- }
915
- ```
916
-
917
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
918
-
919
- #### `@OnHydrate`
920
-
921
- Fires when a message is rehydrated from raw transport data, after all fields are populated but before the message is returned to the consume callback.
922
-
923
- ```typescript
924
- @OnHydrate((msg) => {
925
- msg.displayName = `${msg.firstName} ${msg.lastName}`;
926
- })
927
- @Message()
928
- class UserEvent {
929
- @Field("string") firstName!: string;
930
- @Field("string") lastName!: string;
931
- @Field("string") displayName!: string;
932
- }
933
- ```
934
-
935
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
936
-
937
- #### `@OnValidate`
938
-
939
- Fires during message validation, after the built-in Zod schema check. Throw to reject the message.
940
-
941
- ```typescript
942
681
  @OnValidate((msg) => {
943
- if (msg.startDate >= msg.endDate) {
944
- throw new Error("startDate must be before endDate");
945
- }
682
+ if (msg.startDate >= msg.endDate) throw new Error("startDate must be before endDate");
946
683
  })
947
- @Message()
948
- class BookingRequest {
949
- @Field("date") startDate!: Date;
950
- @Field("date") endDate!: Date;
951
- }
952
- ```
953
-
954
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
955
-
956
- #### `@BeforePublish` / `@AfterPublish`
957
-
958
- Fire around publish operations. `@BeforePublish` runs before the message is handed to the transport. `@AfterPublish` runs after the transport confirms delivery.
959
-
960
- ```typescript
961
684
  @BeforePublish(async (msg) => {
962
685
  await validateExternalId(msg.externalId);
963
686
  })
964
687
  @AfterPublish(async (msg) => {
965
688
  metrics.increment("messages.published");
966
689
  })
967
- @Message()
968
- class OrderPlaced {
969
- @Field("string") externalId!: string;
970
- }
971
- ```
972
-
973
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
974
-
975
- #### `@BeforeConsume` / `@AfterConsume`
976
-
977
- Fire around consume callback execution. `@BeforeConsume` runs after deserialisation but before the consume callback. `@AfterConsume` runs after the callback completes successfully.
978
-
979
- ```typescript
980
- @BeforeConsume(async (msg, ctx) => {
690
+ @BeforeConsume(async (msg) => {
981
691
  audit.log("consuming", msg);
982
692
  })
983
693
  @AfterConsume(async (msg) => {
984
694
  metrics.increment("messages.consumed");
985
695
  })
986
- @Message()
987
- class OrderPlaced {
988
- /* ... */
989
- }
990
- ```
991
-
992
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
993
-
994
- #### `@OnConsumeError`
995
-
996
- Fires when a consume callback throws an error. Receives the error as the **first** argument, followed by the message and context.
997
-
998
- ```typescript
999
696
  @OnConsumeError(async (error, msg) => {
1000
697
  errorTracker.capture(error, { messageId: msg.id });
1001
698
  })
1002
699
  @Message()
1003
- class PaymentCharge {
1004
- @IdentifierField() id!: string;
1005
- @Field("string") chargeId!: string;
1006
- }
1007
- ```
1008
-
1009
- **Argument:** `(error: Error, message: M, context?: C) => void | Promise<void>`.
1010
-
1011
- Note the different signature: `error` is the first parameter, unlike all other hooks where the message comes first.
1012
-
1013
- ---
1014
-
1015
- ### Hook Execution Order
1016
-
1017
- | Phase | Hooks (in order) |
1018
- | ---------- | ------------------------------------------------------------------------------------------------------- |
1019
- | Creation | `@OnCreate` |
1020
- | Validation | `@OnValidate` |
1021
- | Publish | `@BeforePublish` -> subscriber.beforePublish -> transport -> `@AfterPublish` -> subscriber.afterPublish |
1022
- | Consume | `@BeforeConsume` -> subscriber.beforeConsume -> callback -> `@AfterConsume` -> subscriber.afterConsume |
1023
- | Hydration | `@OnHydrate` |
1024
- | Error | `@OnConsumeError` -> subscriber.onConsumeError (replaces AfterConsume steps) |
1025
-
1026
- Full publish + consume lifecycle:
1027
-
1028
- ```
1029
- 1. @BeforePublish hook
1030
- 2. subscriber.beforePublish
1031
- 3. (transport publishes)
1032
- 4. (transport delivers to consumer)
1033
- 5. @BeforeConsume hook
1034
- 6. subscriber.beforeConsume
1035
- 7. callback executes
1036
- 8. @AfterConsume hook
1037
- 9. subscriber.afterConsume
1038
- 10. @AfterPublish hook
1039
- 11. subscriber.afterPublish
1040
- ```
1041
-
1042
- On error at step 7, steps 8-11 are replaced by `@OnConsumeError` and `subscriber.onConsumeError`.
1043
-
1044
- ## Retry and Dead Letter
1045
-
1046
- Configure automatic retry with backoff strategies and dead letter routing for permanently failed messages.
1047
-
1048
- ```typescript
1049
- @Retry({
1050
- maxRetries: 5,
1051
- strategy: "exponential", // "constant" | "linear" | "exponential"
1052
- delay: 1000, // initial delay in ms
1053
- delayMax: 30000, // maximum delay cap
1054
- multiplier: 2, // exponential multiplier
1055
- jitter: true, // add randomness to prevent thundering herd
1056
- })
1057
- @DeadLetter()
1058
- @Message()
1059
- class PaymentCharge {
1060
- @Field("string") chargeId!: string;
1061
- @Field("float") amount!: number;
1062
- }
1063
- ```
1064
-
1065
- ## Dynamic Topics
1066
-
1067
- Route messages to different topics based on their content:
1068
-
1069
- ```typescript
1070
- @Topic((msg: any) => `events.${msg.region}.${msg.type}`)
1071
- @Message()
1072
- class RegionalEvent {
1073
- @Field("string") region!: string;
1074
- @Field("string") type!: string;
1075
- @Field("object") data!: Record<string, unknown>;
700
+ class BookingRequest {
701
+ /* ... */
1076
702
  }
1077
-
1078
- const bus = source.messageBus(RegionalEvent);
1079
- const msg = bus.create({ region: "eu-west", type: "signup", data: {} });
1080
- await bus.publish(msg); // Published to "events.eu-west.signup"
1081
703
  ```
1082
704
 
1083
- ## Encryption and Compression
1084
-
1085
- ```typescript
1086
- import { Encrypted, Compressed } from "@lindorm/iris";
1087
-
1088
- @Encrypted() // Encrypt payload via amphora
1089
- @Compressed("brotli") // Then compress ("gzip" | "deflate" | "brotli")
1090
- @Message()
1091
- class SensitivePayload {
1092
- @Field("string") ssn!: string;
1093
- @Field("string") name!: string;
1094
- }
705
+ ## Hook Execution Order
1095
706
 
1096
- // Source must be configured with an amphora instance
1097
- const source = new IrisSource({
1098
- driver: "rabbit",
1099
- url: "amqp://localhost",
1100
- logger: myLogger,
1101
- amphora: myAmphora,
1102
- messages: [SensitivePayload],
1103
- });
1104
- ```
707
+ | Phase | Order |
708
+ | ---------- | ----------------------------------------------------------------------------------------------------------- |
709
+ | Creation | `@OnCreate` |
710
+ | Validation | `@OnValidate` |
711
+ | Hydration | `@OnHydrate` |
712
+ | Publish | `@BeforePublish` -> `subscriber.beforePublish` -> transport -> `@AfterPublish` -> `subscriber.afterPublish` |
713
+ | Consume | `@BeforeConsume` -> `subscriber.beforeConsume` -> callback -> `@AfterConsume` -> `subscriber.afterConsume` |
714
+ | Error | `@OnConsumeError` -> `subscriber.onConsumeError` (replaces the after-consume steps) |
1105
715
 
1106
- ## Message Subscribers
716
+ ## Subscribers
1107
717
 
1108
- Observe message lifecycle events across all messages in a source:
718
+ Observe message lifecycle events across every message in a source.
1109
719
 
1110
720
  ```typescript
1111
721
  import type { IMessageSubscriber } from "@lindorm/iris";
1112
722
 
1113
- const auditSubscriber: IMessageSubscriber = {
723
+ const audit: IMessageSubscriber = {
1114
724
  beforePublish: async (msg) => {
1115
- audit.log("publishing", msg);
725
+ auditLog.log("publishing", msg);
1116
726
  },
1117
727
  afterConsume: async (msg) => {
1118
- audit.log("consumed", msg);
728
+ auditLog.log("consumed", msg);
1119
729
  },
1120
- onConsumeError: async (error, msg) => {
1121
- audit.log("consume-failed", { error: error.message, msg });
730
+ onConsumeError: async (err, msg) => {
731
+ auditLog.log("consume-failed", { error: err.message, msg });
1122
732
  },
1123
733
  };
1124
734
 
1125
- source.addSubscriber(auditSubscriber);
1126
-
1127
- // Remove later
1128
- source.removeSubscriber(auditSubscriber);
735
+ source.addSubscriber(audit);
736
+ source.removeSubscriber(audit);
1129
737
  ```
1130
738
 
1131
739
  ## Consume Envelope
1132
740
 
1133
- Every subscribe/consume callback receives the message and an envelope with routing metadata:
741
+ Every subscribe/consume callback receives the message and a `ConsumeEnvelope`:
1134
742
 
1135
743
  ```typescript
1136
744
  import type { ConsumeEnvelope } from "@lindorm/iris";
@@ -1138,128 +746,94 @@ import type { ConsumeEnvelope } from "@lindorm/iris";
1138
746
  await bus.subscribe({
1139
747
  topic: "OrderPlaced",
1140
748
  callback: async (msg: OrderPlaced, envelope: ConsumeEnvelope) => {
1141
- console.log(envelope.topic); // "OrderPlaced"
1142
- console.log(envelope.messageName); // "OrderPlaced"
1143
- console.log(envelope.namespace); // "orders" | null
1144
- console.log(envelope.version); // 1
1145
- console.log(envelope.headers); // Record<string, string>
1146
- console.log(envelope.attempt); // 1 (increments on retry)
1147
- console.log(envelope.correlationId); // string | null
1148
- console.log(envelope.timestamp); // Unix timestamp
749
+ envelope.topic; // string
750
+ envelope.messageName; // string
751
+ envelope.namespace; // string | null
752
+ envelope.version; // number
753
+ envelope.headers; // Record<string, string>
754
+ envelope.attempt; // number (1 on first delivery, increments on retry)
755
+ envelope.correlationId; // string | null
756
+ envelope.timestamp; // number (unix ms)
1149
757
  },
1150
758
  });
1151
759
  ```
1152
760
 
1153
761
  ## Message Manipulation
1154
762
 
1155
- Every publisher, message bus, and worker queue provides utilities for working with message instances:
763
+ Every publisher, message bus, and worker queue exposes the same instance utilities:
1156
764
 
1157
765
  ```typescript
1158
766
  const bus = source.messageBus(OrderPlaced);
1159
767
 
1160
- // Create: new instance with auto-generated fields and defaults
1161
768
  const msg = bus.create({ orderId: "abc-123", total: 59.99 });
1162
-
1163
- // Hydrate: reconstruct from raw data (no auto-generation)
1164
- const hydrated = bus.hydrate({ orderId: "abc-123", total: 59.99, id: "existing-uuid" });
1165
-
1166
- // Copy: deep clone with a fresh identifier
1167
- const copied = bus.copy(msg);
1168
- // copied.orderId === msg.orderId, but copied.id !== msg.id
1169
-
1170
- // Validate: throws IrisValidationError if invalid
1171
- bus.validate(msg);
769
+ const hydrated = bus.hydrate({ id: "...", orderId: "abc-123", total: 59.99, createdAt: ... });
770
+ const copied = bus.copy(msg); // deep clone with a fresh identifier value
771
+ bus.validate(msg); // throws IrisValidationError when invalid
1172
772
  ```
1173
773
 
774
+ `create()` runs default value generation and `@OnCreate` hooks. `hydrate()` reconstructs from raw transport data without regenerating defaults and runs `@OnHydrate` hooks.
775
+
1174
776
  ## Publish Options
1175
777
 
1176
- Override message-level defaults per publish call:
778
+ Per-publish overrides for `publish(message, options)`:
1177
779
 
1178
780
  ```typescript
1179
781
  await bus.publish(msg, {
1180
- delay: 5000, // delay delivery by 5 seconds
1181
- priority: 8, // override @Priority
1182
- expiry: 60000, // override @Expiry (TTL in ms)
782
+ delay: 5000, // ms overrides @Delay
783
+ priority: 8, // 0..10 — overrides @Priority
784
+ expiry: 60000, // ms — overrides @Expiry
1183
785
  key: "partition-key", // routing/partition key
1184
786
  headers: { "x-source": "api" }, // additional headers
1185
787
  });
1186
788
  ```
1187
789
 
1188
- ## Zod Validation
790
+ ## Sessions
1189
791
 
1190
- Use `@Schema()` with Zod for fine-grained field validation:
1191
-
1192
- ```typescript
1193
- import { z } from "zod";
1194
- import { Schema, Field, Message } from "@lindorm/iris";
1195
-
1196
- @Message()
1197
- class UserCreated {
1198
- @Schema(z.string().email())
1199
- @Field("email")
1200
- email!: string;
1201
-
1202
- @Schema(z.number().int().min(13).max(150))
1203
- @Field("integer")
1204
- age!: number;
1205
-
1206
- @Schema(z.string().regex(/^[A-Z]{2,3}$/))
1207
- @Field("string")
1208
- countryCode!: string;
1209
- }
1210
- ```
1211
-
1212
- ## Cloning
1213
-
1214
- Create independent source instances that share the underlying driver connection:
792
+ `source.session()` returns a lightweight `IIrisSession` that shares the underlying driver connection but carries its own logger, `IrisHookMeta`, and a snapshot of the source's subscribers at the time of cloning. This is the idiomatic way to scope correlation IDs and per-request loggers without tearing down the connection.
1215
793
 
1216
794
  ```typescript
1217
795
  const source = new IrisSource({
1218
796
  driver: "rabbit",
1219
797
  url: "amqp://localhost",
1220
- logger: mainLogger,
798
+ logger: appLogger,
1221
799
  messages: [OrderPlaced],
1222
800
  });
1223
801
 
1224
802
  await source.connect();
1225
803
  await source.setup();
1226
804
 
1227
- // Clone shares the connection but has its own logger and subscriber registry
1228
- const scoped = source.clone({ logger: requestLogger, context: { requestId: "abc" } });
805
+ const scoped = source.session({
806
+ logger: requestLogger,
807
+ meta: { correlationId: "abc-123", actor: "user:42", timestamp: new Date() },
808
+ });
1229
809
 
1230
810
  const pub = scoped.publisher(OrderPlaced);
1231
- await pub.publish(pub.create({ orderId: "abc-123", total: 59.99 }));
811
+ await pub.publish(pub.create({ orderId: "abc", total: 10 }));
1232
812
  ```
1233
813
 
814
+ A session exposes the same `messageBus`, `publisher`, `workerQueue`, `stream`, `rpcClient`, `rpcServer`, `hasMessage`, `ping`, and `driver` surface as the source.
815
+
1234
816
  ## Driver Configuration
1235
817
 
1236
818
  ### Memory
1237
819
 
1238
820
  ```typescript
1239
- const source = new IrisSource({
1240
- driver: "memory",
1241
- logger,
1242
- messages: [OrderPlaced],
1243
- });
821
+ new IrisSource({ driver: "memory", logger, messages: [OrderPlaced] });
1244
822
  ```
1245
823
 
1246
824
  ### RabbitMQ
1247
825
 
1248
826
  ```typescript
1249
- const source = new IrisSource({
827
+ new IrisSource({
1250
828
  driver: "rabbit",
1251
829
  url: "amqp://localhost",
1252
830
  logger,
1253
831
  messages: [OrderPlaced],
1254
- exchange: "my-exchange", // optional
1255
- prefetch: 10, // optional
832
+ exchange: "my-exchange",
833
+ prefetch: 10,
1256
834
  connection: {
1257
- // optional
1258
835
  heartbeat: 60,
1259
- socketOptions: {
1260
- timeout: 30000,
1261
- keepAlive: true,
1262
- },
836
+ socketOptions: { timeout: 30000, keepAlive: true },
1263
837
  },
1264
838
  });
1265
839
  ```
@@ -1267,30 +841,22 @@ const source = new IrisSource({
1267
841
  ### Kafka
1268
842
 
1269
843
  ```typescript
1270
- const source = new IrisSource({
844
+ new IrisSource({
1271
845
  driver: "kafka",
1272
846
  brokers: ["localhost:9092"],
1273
847
  logger,
1274
848
  messages: [OrderPlaced],
1275
- prefix: "my-app", // optional topic prefix
1276
- prefetch: 100, // optional
1277
- acks: -1, // optional: -1 (all), 0 (none), 1 (leader)
1278
- sessionTimeoutMs: 30000, // optional
849
+ prefix: "my-app",
850
+ prefetch: 100,
851
+ acks: -1, // -1 = all, 0 = none, 1 = leader
852
+ sessionTimeoutMs: 30000,
1279
853
  connection: {
1280
- // optional
1281
854
  clientId: "my-service",
1282
855
  ssl: true,
1283
- sasl: {
1284
- mechanism: "scram-sha-256",
1285
- username: "user",
1286
- password: "pass",
1287
- },
856
+ sasl: { mechanism: "scram-sha-256", username: "user", password: "pass" },
1288
857
  connectionTimeout: 10000,
1289
858
  requestTimeout: 30000,
1290
- retry: {
1291
- retries: 5,
1292
- initialRetryTime: 300,
1293
- },
859
+ retry: { retries: 5, initialRetryTime: 300 },
1294
860
  },
1295
861
  });
1296
862
  ```
@@ -1298,15 +864,14 @@ const source = new IrisSource({
1298
864
  ### NATS
1299
865
 
1300
866
  ```typescript
1301
- const source = new IrisSource({
867
+ new IrisSource({
1302
868
  driver: "nats",
1303
869
  servers: "nats://localhost:4222", // string or Array<string>
1304
870
  logger,
1305
871
  messages: [OrderPlaced],
1306
- prefix: "my-app", // optional
1307
- prefetch: 50, // optional
872
+ prefix: "my-app",
873
+ prefetch: 50,
1308
874
  connection: {
1309
- // optional
1310
875
  user: "nats-user",
1311
876
  pass: "nats-pass",
1312
877
  tls: true,
@@ -1322,17 +887,16 @@ const source = new IrisSource({
1322
887
  ### Redis Streams
1323
888
 
1324
889
  ```typescript
1325
- const source = new IrisSource({
890
+ new IrisSource({
1326
891
  driver: "redis",
1327
892
  url: "redis://localhost:6379",
1328
893
  logger,
1329
894
  messages: [OrderPlaced],
1330
- prefix: "my-app", // optional
1331
- prefetch: 50, // optional
1332
- blockMs: 5000, // optional: XREAD block time
1333
- maxStreamLength: 10000, // optional: MAXLEN cap per stream
895
+ prefix: "my-app",
896
+ prefetch: 50,
897
+ blockMs: 5000, // XREAD block time
898
+ maxStreamLength: 10000, // MAXLEN cap per stream
1334
899
  connection: {
1335
- // optional
1336
900
  host: "redis.internal",
1337
901
  port: 6379,
1338
902
  password: "secret",
@@ -1348,87 +912,83 @@ const source = new IrisSource({
1348
912
 
1349
913
  ## Persistence (Delay and Dead Letter Stores)
1350
914
 
1351
- Configure where delayed messages and dead letter entries are stored:
915
+ Configure where delayed deliveries and dead-lettered envelopes are kept. These are used by drivers that don't already provide native primitives for them.
1352
916
 
1353
917
  ```typescript
1354
- const source = new IrisSource({
1355
- driver: "rabbit",
1356
- url: "amqp://localhost",
918
+ new IrisSource({
919
+ driver: "kafka",
920
+ brokers: ["localhost:9092"],
1357
921
  logger,
1358
922
  messages: [OrderPlaced],
1359
923
  persistence: {
1360
- // Delay store: holds messages until their scheduled delivery time
1361
- delay: { type: "memory" },
1362
- // or: { type: "redis", url: "redis://localhost:6379" },
1363
- // or: { type: "custom", store: myDelayStore },
924
+ delay: { type: "memory", pollIntervalMs: 250 },
925
+ // delay: { type: "redis", url: "redis://localhost:6379", pollIntervalMs: 250 },
926
+ // delay: { type: "custom", store: myDelayStore },
1364
927
 
1365
- // Dead letter store: holds messages that exhausted all retries
1366
928
  deadLetter: { type: "memory" },
1367
- // or: { type: "redis", url: "redis://localhost:6379" },
1368
- // or: { type: "custom", store: myDeadLetterStore },
929
+ // deadLetter: { type: "redis", url: "redis://localhost:6379" },
930
+ // deadLetter: { type: "custom", store: myDeadLetterStore },
1369
931
  },
1370
932
  });
1371
933
  ```
1372
934
 
1373
935
  ### Custom Stores
1374
936
 
1375
- Implement `IDelayStore` and/or `IDeadLetterStore` for custom persistence:
937
+ Implement `IDelayStore` and/or `IDeadLetterStore` for bespoke persistence:
1376
938
 
1377
939
  ```typescript
1378
940
  import type {
1379
- IDelayStore,
1380
- IDeadLetterStore,
1381
- DelayedEntry,
1382
941
  DeadLetterEntry,
942
+ DeadLetterFilterOptions,
943
+ DeadLetterListOptions,
944
+ DelayedEntry,
945
+ IDeadLetterStore,
946
+ IDelayStore,
1383
947
  } from "@lindorm/iris";
1384
948
 
1385
949
  class MyDelayStore implements IDelayStore {
1386
- async schedule(entry: DelayedEntry): Promise<void> {
950
+ schedule = async (entry: DelayedEntry): Promise<void> => {
1387
951
  /* ... */
1388
- }
1389
- async poll(now: number): Promise<Array<DelayedEntry>> {
952
+ };
953
+ poll = async (now: number): Promise<Array<DelayedEntry>> => {
1390
954
  /* ... */
1391
- }
1392
- async cancel(id: string): Promise<boolean> {
955
+ };
956
+ cancel = async (id: string): Promise<boolean> => {
1393
957
  /* ... */
1394
- }
1395
- async size(): Promise<number> {
958
+ };
959
+ size = async (): Promise<number> => {
1396
960
  /* ... */
1397
- }
1398
- async clear(): Promise<void> {
961
+ };
962
+ clear = async (): Promise<void> => {
1399
963
  /* ... */
1400
- }
1401
- async close(): Promise<void> {
964
+ };
965
+ close = async (): Promise<void> => {
1402
966
  /* ... */
1403
- }
967
+ };
1404
968
  }
1405
969
 
1406
970
  class MyDeadLetterStore implements IDeadLetterStore {
1407
- async add(entry: DeadLetterEntry): Promise<void> {
971
+ add = async (entry: DeadLetterEntry): Promise<void> => {
1408
972
  /* ... */
1409
- }
1410
- async list(options?: {
1411
- topic?: string;
1412
- limit?: number;
1413
- offset?: number;
1414
- }): Promise<Array<DeadLetterEntry>> {
973
+ };
974
+ list = async (options?: DeadLetterListOptions): Promise<Array<DeadLetterEntry>> => {
1415
975
  /* ... */
1416
- }
1417
- async get(id: string): Promise<DeadLetterEntry | null> {
976
+ };
977
+ get = async (id: string): Promise<DeadLetterEntry | null> => {
1418
978
  /* ... */
1419
- }
1420
- async remove(id: string): Promise<boolean> {
979
+ };
980
+ remove = async (id: string): Promise<boolean> => {
1421
981
  /* ... */
1422
- }
1423
- async purge(options?: { topic?: string }): Promise<number> {
982
+ };
983
+ purge = async (options?: DeadLetterFilterOptions): Promise<number> => {
1424
984
  /* ... */
1425
- }
1426
- async count(options?: { topic?: string }): Promise<number> {
985
+ };
986
+ count = async (options?: DeadLetterFilterOptions): Promise<number> => {
1427
987
  /* ... */
1428
- }
1429
- async close(): Promise<void> {
988
+ };
989
+ close = async (): Promise<void> => {
1430
990
  /* ... */
1431
- }
991
+ };
1432
992
  }
1433
993
  ```
1434
994
 
@@ -1438,129 +998,106 @@ class MyDeadLetterStore implements IDeadLetterStore {
1438
998
  const state = source.getConnectionState();
1439
999
  // "disconnected" | "connecting" | "connected" | "reconnecting" | "draining"
1440
1000
 
1441
- source.onConnectionStateChange((state) => {
1442
- console.log(`Connection state: ${state}`);
1001
+ source.on("connection:state", (next) => {
1002
+ console.log(`connection state -> ${next}`);
1443
1003
  });
1444
1004
 
1445
- // Health check
1005
+ source.once("connection:state", (next) => {
1006
+ /* ... */
1007
+ });
1008
+ source.off("connection:state", listener);
1009
+
1446
1010
  const healthy = await source.ping();
1447
1011
  ```
1448
1012
 
1449
1013
  ## Testing with Mocks
1450
1014
 
1451
- All mocks are available via the `@lindorm/iris/mocks` subpath:
1015
+ Iris ships per-runtime mock factories. Pick the import path that matches your test runner:
1452
1016
 
1453
1017
  ```typescript
1018
+ // Jest
1454
1019
  import {
1455
1020
  createMockIrisSource,
1456
- createMockPublisher,
1021
+ createMockIrisSession,
1457
1022
  createMockMessageBus,
1023
+ createMockPublisher,
1024
+ createMockRpcClient,
1458
1025
  createMockWorkerQueue,
1026
+ } from "@lindorm/iris/mocks/jest";
1027
+
1028
+ // Vitest
1029
+ import {
1030
+ createMockIrisSource,
1031
+ createMockIrisSession,
1032
+ createMockMessageBus,
1033
+ createMockPublisher,
1459
1034
  createMockRpcClient,
1460
- } from "@lindorm/iris/mocks";
1035
+ createMockWorkerQueue,
1036
+ } from "@lindorm/iris/mocks/vitest";
1461
1037
  ```
1462
1038
 
1463
- ### Mock Source
1464
-
1465
1039
  ```typescript
1466
1040
  const source = createMockIrisSource();
1467
1041
 
1468
- // All methods are jest.fn() mocks
1469
- expect(source.connect).not.toHaveBeenCalled();
1470
-
1471
1042
  await source.connect();
1472
1043
  expect(source.connect).toHaveBeenCalledTimes(1);
1473
1044
 
1474
- // Factory methods return mocks by default
1475
1045
  const bus = source.messageBus(OrderPlaced);
1476
1046
  const pub = source.publisher(OrderPlaced);
1477
1047
  const queue = source.workerQueue(OrderPlaced);
1478
1048
  const rpc = source.rpcClient(GetPrice, PriceResponse);
1479
1049
  ```
1480
1050
 
1481
- ### Mock Publisher
1051
+ The bus, publisher, and worker-queue mocks expose a `published` array and a `clearPublished()` helper. The RPC client mock takes an optional response factory and exposes `requests` plus `clearRequests()`.
1482
1052
 
1483
1053
  ```typescript
1484
1054
  const pub = createMockPublisher<OrderPlaced>();
1485
-
1486
- const msg = pub.create({ orderId: "abc", total: 10 });
1487
- await pub.publish(msg);
1488
-
1489
- // Inspect published messages
1055
+ await pub.publish(pub.create({ orderId: "abc", total: 10 }));
1490
1056
  expect(pub.published).toHaveLength(1);
1491
-
1492
- // Reset
1493
1057
  pub.clearPublished();
1494
- expect(pub.published).toHaveLength(0);
1495
- ```
1496
-
1497
- ### Mock Message Bus
1498
-
1499
- ```typescript
1500
- const bus = createMockMessageBus<OrderPlaced>();
1501
-
1502
- await bus.publish(bus.create({ orderId: "abc", total: 10 }));
1503
-
1504
- expect(bus.published).toHaveLength(1);
1505
- expect(bus.subscribe).not.toHaveBeenCalled();
1506
-
1507
- bus.clearPublished();
1508
- ```
1509
-
1510
- ### Mock Worker Queue
1511
-
1512
- ```typescript
1513
- const queue = createMockWorkerQueue<OrderPlaced>();
1514
-
1515
- await queue.publish(queue.create({ orderId: "abc", total: 10 }));
1516
-
1517
- expect(queue.published).toHaveLength(1);
1518
- expect(queue.consume).not.toHaveBeenCalled();
1519
-
1520
- queue.clearPublished();
1521
- ```
1522
-
1523
- ### Mock RPC Client
1524
1058
 
1525
- ```typescript
1526
- // Provide a response factory
1527
1059
  const client = createMockRpcClient<GetPrice, PriceResponse>((req) => {
1528
1060
  const res = new PriceResponse();
1529
1061
  res.price = 42.0;
1530
1062
  res.currency = "USD";
1531
1063
  return res;
1532
1064
  });
1065
+ const res = await client.request(new GetPrice());
1066
+ expect(client.requests).toHaveLength(1);
1067
+ client.clearRequests();
1068
+ ```
1533
1069
 
1534
- const req = new GetPrice();
1535
- req.sku = "WIDGET-42";
1070
+ ## CLI
1536
1071
 
1537
- const res = await client.request(req);
1538
- expect(res.price).toBe(42.0);
1539
- expect(client.requests).toHaveLength(1);
1072
+ The package ships an `iris` binary for scaffolding:
1540
1073
 
1541
- client.clearRequests();
1074
+ ```bash
1075
+ npx iris init --driver rabbit --directory ./src/iris
1076
+ npx iris generate message OrderPlaced --directory ./src/iris/messages
1542
1077
  ```
1543
1078
 
1079
+ `iris init` (alias `i`) writes a `source.ts` plus an empty `messages/` directory. `iris generate message` (alias `g m`) writes a single PascalCase-named message file. Both commands accept `--dry-run`.
1080
+
1544
1081
  ## Error Classes
1545
1082
 
1546
- All errors extend `IrisError`, which extends `LindormError`:
1547
-
1548
- | Error Class | When |
1549
- | ------------------------ | ----------------------------------------- |
1550
- | `IrisError` | Base class for all iris errors |
1551
- | `IrisDriverError` | Driver connection or operation failure |
1552
- | `IrisMetadataError` | Invalid decorator configuration |
1553
- | `IrisNotSupportedError` | Unsupported feature for the active driver |
1554
- | `IrisPublishError` | Message publishing failure |
1555
- | `IrisScannerError` | Message class scanning failure |
1556
- | `IrisSerializationError` | Serialisation or deserialisation failure |
1557
- | `IrisSourceError` | Source setup or configuration error |
1558
- | `IrisTimeoutError` | Operation exceeded timeout |
1559
- | `IrisTransportError` | Transport layer failure |
1560
- | `IrisValidationError` | Message validation failure |
1083
+ Every error extends `IrisError`, which extends `LindormError` from `@lindorm/errors`.
1084
+
1085
+ | Error | Raised when |
1086
+ | ------------------------ | ------------------------------------------------ |
1087
+ | `IrisError` | Base class — extend for custom errors |
1088
+ | `IrisDriverError` | Driver connection or operation failed |
1089
+ | `IrisMetadataError` | A decorator was used with an invalid value |
1090
+ | `IrisNotSupportedError` | The active driver does not support the operation |
1091
+ | `IrisPublishError` | Publishing a message failed |
1092
+ | `IrisScannerError` | Auto-scanning message classes from disk failed |
1093
+ | `IrisSerializationError` | (De)serialisation of an envelope failed |
1094
+ | `IrisSourceError` | Source configuration or lifecycle error |
1095
+ | `IrisTimeoutError` | An operation exceeded its timeout |
1096
+ | `IrisTransportError` | Transport-layer failure |
1097
+ | `IrisValidationError` | A message failed validation |
1561
1098
 
1562
1099
  ```typescript
1563
- import { IrisTimeoutError, IrisValidationError } from "@lindorm/iris";
1100
+ import { IrisTimeoutError } from "@lindorm/iris";
1564
1101
 
1565
1102
  try {
1566
1103
  await client.request(req, { timeout: 1000 });
@@ -1571,110 +1108,6 @@ try {
1571
1108
  }
1572
1109
  ```
1573
1110
 
1574
- ## Full Example
1575
-
1576
- ```typescript
1577
- import {
1578
- IrisSource,
1579
- Message,
1580
- Namespace,
1581
- Version,
1582
- Field,
1583
- IdentifierField,
1584
- TimestampField,
1585
- Retry,
1586
- DeadLetter,
1587
- } from "@lindorm/iris";
1588
- import type { IMessage, IMessageSubscriber } from "@lindorm/iris";
1589
-
1590
- // --- Define messages ---
1591
-
1592
- @Message()
1593
- @Namespace("payments")
1594
- @Version(1)
1595
- @Retry({ maxRetries: 3, strategy: "exponential", delay: 1000 })
1596
- @DeadLetter()
1597
- class ChargeRequested {
1598
- @IdentifierField() id!: string;
1599
- @TimestampField() createdAt!: Date;
1600
- @Field("string") paymentId!: string;
1601
- @Field("float") amount!: number;
1602
- @Field("string") currency!: string;
1603
- }
1604
-
1605
- @Message()
1606
- @Namespace("payments")
1607
- @Version(1)
1608
- class ChargeCompleted {
1609
- @IdentifierField() id!: string;
1610
- @TimestampField() completedAt!: Date;
1611
- @Field("string") paymentId!: string;
1612
- @Field("boolean") success!: boolean;
1613
- }
1614
-
1615
- // --- Set up source ---
1616
-
1617
- const source = new IrisSource({
1618
- driver: "kafka",
1619
- brokers: ["kafka-1:9092", "kafka-2:9092"],
1620
- logger: appLogger,
1621
- messages: [ChargeRequested, ChargeCompleted],
1622
- persistence: {
1623
- deadLetter: { type: "redis", url: "redis://localhost:6379" },
1624
- },
1625
- });
1626
-
1627
- await source.connect();
1628
- await source.setup();
1629
-
1630
- // --- Observe lifecycle ---
1631
-
1632
- const metricsSubscriber: IMessageSubscriber = {
1633
- afterPublish: async (msg) => metrics.increment("messages.published"),
1634
- afterConsume: async (msg) => metrics.increment("messages.consumed"),
1635
- onConsumeError: async (err) => metrics.increment("messages.errors"),
1636
- };
1637
-
1638
- source.addSubscriber(metricsSubscriber);
1639
-
1640
- // --- Worker: process charges ---
1641
-
1642
- const queue = source.workerQueue(ChargeRequested);
1643
- const completedPub = source.publisher(ChargeCompleted);
1644
-
1645
- await queue.consume("payment-workers", async (msg, envelope) => {
1646
- const result = await paymentGateway.charge(msg.paymentId, msg.amount, msg.currency);
1647
-
1648
- const completed = completedPub.create({
1649
- paymentId: msg.paymentId,
1650
- success: result.ok,
1651
- });
1652
-
1653
- await completedPub.publish(completed);
1654
- });
1655
-
1656
- // --- Notify on completion ---
1657
-
1658
- const completedBus = source.messageBus(ChargeCompleted);
1659
-
1660
- await completedBus.subscribe({
1661
- topic: "ChargeCompleted",
1662
- queue: "notification-service",
1663
- callback: async (msg) => {
1664
- if (msg.success) {
1665
- await emailService.sendReceipt(msg.paymentId);
1666
- }
1667
- },
1668
- });
1669
-
1670
- // --- Shutdown ---
1671
-
1672
- process.on("SIGTERM", async () => {
1673
- await source.drain();
1674
- await source.disconnect();
1675
- });
1676
- ```
1677
-
1678
1111
  ## License
1679
1112
 
1680
1113
  AGPL-3.0-or-later