@lindorm/iris 0.2.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 (1013) hide show
  1. package/README.md +338 -909
  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 +3 -0
  45. package/dist/decorators/Default.d.ts.map +1 -0
  46. package/dist/decorators/Default.js +9 -0
  47. package/dist/decorators/Default.js.map +1 -0
  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 +2 -3
  57. package/dist/decorators/Field.d.ts.map +1 -1
  58. package/dist/decorators/Field.js +7 -12
  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.d.ts +2 -0
  81. package/dist/decorators/Nullable.d.ts.map +1 -0
  82. package/dist/decorators/Nullable.js +9 -0
  83. package/dist/decorators/Nullable.js.map +1 -0
  84. package/dist/decorators/OnConsumeError.d.ts +1 -1
  85. package/dist/decorators/OnConsumeError.d.ts.map +1 -1
  86. package/dist/decorators/OnConsumeError.js +3 -7
  87. package/dist/decorators/OnConsumeError.js.map +1 -1
  88. package/dist/decorators/OnCreate.d.ts +1 -1
  89. package/dist/decorators/OnCreate.d.ts.map +1 -1
  90. package/dist/decorators/OnCreate.js +3 -7
  91. package/dist/decorators/OnCreate.js.map +1 -1
  92. package/dist/decorators/OnHydrate.d.ts +1 -1
  93. package/dist/decorators/OnHydrate.d.ts.map +1 -1
  94. package/dist/decorators/OnHydrate.js +3 -7
  95. package/dist/decorators/OnHydrate.js.map +1 -1
  96. package/dist/decorators/OnValidate.d.ts +1 -1
  97. package/dist/decorators/OnValidate.d.ts.map +1 -1
  98. package/dist/decorators/OnValidate.js +3 -7
  99. package/dist/decorators/OnValidate.js.map +1 -1
  100. package/dist/decorators/Optional.d.ts +2 -0
  101. package/dist/decorators/Optional.d.ts.map +1 -0
  102. package/dist/decorators/Optional.js +9 -0
  103. package/dist/decorators/Optional.js.map +1 -0
  104. package/dist/decorators/Persistent.js +3 -7
  105. package/dist/decorators/Persistent.js.map +1 -1
  106. package/dist/decorators/PersistentField.js +3 -7
  107. package/dist/decorators/PersistentField.js.map +1 -1
  108. package/dist/decorators/Priority.js +5 -9
  109. package/dist/decorators/Priority.js.map +1 -1
  110. package/dist/decorators/Retry.d.ts +1 -1
  111. package/dist/decorators/Retry.d.ts.map +1 -1
  112. package/dist/decorators/Retry.js +3 -7
  113. package/dist/decorators/Retry.js.map +1 -1
  114. package/dist/decorators/Schema.d.ts +1 -1
  115. package/dist/decorators/Schema.d.ts.map +1 -1
  116. package/dist/decorators/Schema.js +3 -7
  117. package/dist/decorators/Schema.js.map +1 -1
  118. package/dist/decorators/TimestampField.js +3 -7
  119. package/dist/decorators/TimestampField.js.map +1 -1
  120. package/dist/decorators/Topic.js +3 -7
  121. package/dist/decorators/Topic.js.map +1 -1
  122. package/dist/decorators/Transform.d.ts +1 -1
  123. package/dist/decorators/Transform.d.ts.map +1 -1
  124. package/dist/decorators/Transform.js +3 -7
  125. package/dist/decorators/Transform.js.map +1 -1
  126. package/dist/decorators/Version.js +5 -9
  127. package/dist/decorators/Version.js.map +1 -1
  128. package/dist/decorators/index.d.ts +38 -35
  129. package/dist/decorators/index.d.ts.map +1 -1
  130. package/dist/decorators/index.js +38 -51
  131. package/dist/decorators/index.js.map +1 -1
  132. package/dist/errors/IrisDriverError.d.ts +1 -1
  133. package/dist/errors/IrisDriverError.d.ts.map +1 -1
  134. package/dist/errors/IrisDriverError.js +2 -6
  135. package/dist/errors/IrisDriverError.js.map +1 -1
  136. package/dist/errors/IrisError.js +2 -6
  137. package/dist/errors/IrisError.js.map +1 -1
  138. package/dist/errors/IrisMetadataError.d.ts +1 -1
  139. package/dist/errors/IrisMetadataError.d.ts.map +1 -1
  140. package/dist/errors/IrisMetadataError.js +2 -6
  141. package/dist/errors/IrisMetadataError.js.map +1 -1
  142. package/dist/errors/IrisNotSupportedError.d.ts +1 -1
  143. package/dist/errors/IrisNotSupportedError.d.ts.map +1 -1
  144. package/dist/errors/IrisNotSupportedError.js +2 -6
  145. package/dist/errors/IrisNotSupportedError.js.map +1 -1
  146. package/dist/errors/IrisPublishError.d.ts +1 -1
  147. package/dist/errors/IrisPublishError.d.ts.map +1 -1
  148. package/dist/errors/IrisPublishError.js +2 -6
  149. package/dist/errors/IrisPublishError.js.map +1 -1
  150. package/dist/errors/IrisScannerError.d.ts +1 -1
  151. package/dist/errors/IrisScannerError.d.ts.map +1 -1
  152. package/dist/errors/IrisScannerError.js +2 -6
  153. package/dist/errors/IrisScannerError.js.map +1 -1
  154. package/dist/errors/IrisSerializationError.d.ts +1 -1
  155. package/dist/errors/IrisSerializationError.d.ts.map +1 -1
  156. package/dist/errors/IrisSerializationError.js +2 -6
  157. package/dist/errors/IrisSerializationError.js.map +1 -1
  158. package/dist/errors/IrisSourceError.d.ts +1 -1
  159. package/dist/errors/IrisSourceError.d.ts.map +1 -1
  160. package/dist/errors/IrisSourceError.js +2 -6
  161. package/dist/errors/IrisSourceError.js.map +1 -1
  162. package/dist/errors/IrisTimeoutError.d.ts +1 -1
  163. package/dist/errors/IrisTimeoutError.d.ts.map +1 -1
  164. package/dist/errors/IrisTimeoutError.js +2 -6
  165. package/dist/errors/IrisTimeoutError.js.map +1 -1
  166. package/dist/errors/IrisTransportError.d.ts +1 -1
  167. package/dist/errors/IrisTransportError.d.ts.map +1 -1
  168. package/dist/errors/IrisTransportError.js +2 -6
  169. package/dist/errors/IrisTransportError.js.map +1 -1
  170. package/dist/errors/IrisValidationError.d.ts +1 -1
  171. package/dist/errors/IrisValidationError.d.ts.map +1 -1
  172. package/dist/errors/IrisValidationError.js +2 -6
  173. package/dist/errors/IrisValidationError.js.map +1 -1
  174. package/dist/errors/index.d.ts +11 -11
  175. package/dist/errors/index.d.ts.map +1 -1
  176. package/dist/errors/index.js +11 -27
  177. package/dist/errors/index.js.map +1 -1
  178. package/dist/index.d.ts +7 -5
  179. package/dist/index.d.ts.map +1 -1
  180. package/dist/index.js +7 -21
  181. package/dist/index.js.map +1 -1
  182. package/dist/interfaces/IrisDeadLetterStore.d.ts +1 -1
  183. package/dist/interfaces/IrisDeadLetterStore.d.ts.map +1 -1
  184. package/dist/interfaces/IrisDeadLetterStore.js +1 -2
  185. package/dist/interfaces/IrisDelayStore.d.ts +1 -1
  186. package/dist/interfaces/IrisDelayStore.d.ts.map +1 -1
  187. package/dist/interfaces/IrisDelayStore.js +1 -2
  188. package/dist/interfaces/IrisDriver.d.ts +9 -9
  189. package/dist/interfaces/IrisDriver.d.ts.map +1 -1
  190. package/dist/interfaces/IrisDriver.js +1 -2
  191. package/dist/interfaces/IrisMessageBus.d.ts +2 -2
  192. package/dist/interfaces/IrisMessageBus.d.ts.map +1 -1
  193. package/dist/interfaces/IrisMessageBus.js +1 -2
  194. package/dist/interfaces/IrisMessagingProvider.d.ts +8 -8
  195. package/dist/interfaces/IrisMessagingProvider.d.ts.map +1 -1
  196. package/dist/interfaces/IrisMessagingProvider.js +1 -2
  197. package/dist/interfaces/IrisPublisher.d.ts +2 -2
  198. package/dist/interfaces/IrisPublisher.d.ts.map +1 -1
  199. package/dist/interfaces/IrisPublisher.js +1 -2
  200. package/dist/interfaces/IrisRpcClient.d.ts +1 -1
  201. package/dist/interfaces/IrisRpcClient.d.ts.map +1 -1
  202. package/dist/interfaces/IrisRpcClient.js +1 -2
  203. package/dist/interfaces/IrisRpcServer.d.ts +1 -1
  204. package/dist/interfaces/IrisRpcServer.d.ts.map +1 -1
  205. package/dist/interfaces/IrisRpcServer.js +1 -2
  206. package/dist/interfaces/IrisSession.d.ts +1 -1
  207. package/dist/interfaces/IrisSession.d.ts.map +1 -1
  208. package/dist/interfaces/IrisSession.js +1 -2
  209. package/dist/interfaces/IrisSource.d.ts +5 -5
  210. package/dist/interfaces/IrisSource.d.ts.map +1 -1
  211. package/dist/interfaces/IrisSource.js +1 -2
  212. package/dist/interfaces/IrisStreamProcessor.d.ts +1 -1
  213. package/dist/interfaces/IrisStreamProcessor.d.ts.map +1 -1
  214. package/dist/interfaces/IrisStreamProcessor.js +1 -2
  215. package/dist/interfaces/IrisWorkerQueue.d.ts +2 -2
  216. package/dist/interfaces/IrisWorkerQueue.d.ts.map +1 -1
  217. package/dist/interfaces/IrisWorkerQueue.js +1 -2
  218. package/dist/interfaces/Message.js +1 -2
  219. package/dist/interfaces/MessageSubscriber.d.ts +1 -1
  220. package/dist/interfaces/MessageSubscriber.d.ts.map +1 -1
  221. package/dist/interfaces/MessageSubscriber.js +1 -2
  222. package/dist/interfaces/index.d.ts +13 -13
  223. package/dist/interfaces/index.d.ts.map +1 -1
  224. package/dist/interfaces/index.js +13 -29
  225. package/dist/interfaces/index.js.map +1 -1
  226. package/dist/internal/classes/DriverBase.d.ts +7 -6
  227. package/dist/internal/classes/DriverBase.d.ts.map +1 -1
  228. package/dist/internal/classes/DriverBase.js +14 -16
  229. package/dist/internal/classes/DriverBase.js.map +1 -1
  230. package/dist/internal/classes/DriverMessageBusBase.d.ts +4 -4
  231. package/dist/internal/classes/DriverMessageBusBase.d.ts.map +1 -1
  232. package/dist/internal/classes/DriverMessageBusBase.js +2 -6
  233. package/dist/internal/classes/DriverMessageBusBase.js.map +1 -1
  234. package/dist/internal/classes/DriverPublisherBase.d.ts +4 -4
  235. package/dist/internal/classes/DriverPublisherBase.d.ts.map +1 -1
  236. package/dist/internal/classes/DriverPublisherBase.js +2 -6
  237. package/dist/internal/classes/DriverPublisherBase.js.map +1 -1
  238. package/dist/internal/classes/DriverRpcClientBase.d.ts +6 -5
  239. package/dist/internal/classes/DriverRpcClientBase.d.ts.map +1 -1
  240. package/dist/internal/classes/DriverRpcClientBase.js +23 -27
  241. package/dist/internal/classes/DriverRpcClientBase.js.map +1 -1
  242. package/dist/internal/classes/DriverRpcServerBase.d.ts +6 -5
  243. package/dist/internal/classes/DriverRpcServerBase.d.ts.map +1 -1
  244. package/dist/internal/classes/DriverRpcServerBase.js +21 -25
  245. package/dist/internal/classes/DriverRpcServerBase.js.map +1 -1
  246. package/dist/internal/classes/DriverStreamPipelineBase.d.ts +7 -6
  247. package/dist/internal/classes/DriverStreamPipelineBase.d.ts.map +1 -1
  248. package/dist/internal/classes/DriverStreamPipelineBase.js +19 -23
  249. package/dist/internal/classes/DriverStreamPipelineBase.js.map +1 -1
  250. package/dist/internal/classes/DriverStreamProcessorBase.d.ts +6 -5
  251. package/dist/internal/classes/DriverStreamProcessorBase.d.ts.map +1 -1
  252. package/dist/internal/classes/DriverStreamProcessorBase.js +11 -15
  253. package/dist/internal/classes/DriverStreamProcessorBase.js.map +1 -1
  254. package/dist/internal/classes/DriverWorkerQueueBase.d.ts +4 -4
  255. package/dist/internal/classes/DriverWorkerQueueBase.d.ts.map +1 -1
  256. package/dist/internal/classes/DriverWorkerQueueBase.js +2 -6
  257. package/dist/internal/classes/DriverWorkerQueueBase.js.map +1 -1
  258. package/dist/internal/classes/index.d.ts +8 -8
  259. package/dist/internal/classes/index.d.ts.map +1 -1
  260. package/dist/internal/classes/index.js +8 -24
  261. package/dist/internal/classes/index.js.map +1 -1
  262. package/dist/internal/cli/commands/generate-message.d.ts.map +1 -1
  263. package/dist/internal/cli/commands/generate-message.js +8 -69
  264. package/dist/internal/cli/commands/generate-message.js.map +1 -1
  265. package/dist/internal/cli/commands/init.d.ts.map +1 -1
  266. package/dist/internal/cli/commands/init.js +10 -104
  267. package/dist/internal/cli/commands/init.js.map +1 -1
  268. package/dist/internal/cli/commands/register-generate.js +3 -7
  269. package/dist/internal/cli/commands/register-generate.js.map +1 -1
  270. package/dist/internal/cli/commands/register-init.js +3 -7
  271. package/dist/internal/cli/commands/register-init.js.map +1 -1
  272. package/dist/internal/dead-letter/DeadLetterManager.d.ts +3 -3
  273. package/dist/internal/dead-letter/DeadLetterManager.d.ts.map +1 -1
  274. package/dist/internal/dead-letter/DeadLetterManager.js +3 -7
  275. package/dist/internal/dead-letter/DeadLetterManager.js.map +1 -1
  276. package/dist/internal/dead-letter/MemoryDeadLetterStore.d.ts +2 -2
  277. package/dist/internal/dead-letter/MemoryDeadLetterStore.d.ts.map +1 -1
  278. package/dist/internal/dead-letter/MemoryDeadLetterStore.js +1 -5
  279. package/dist/internal/dead-letter/MemoryDeadLetterStore.js.map +1 -1
  280. package/dist/internal/dead-letter/RedisDeadLetterStore.d.ts +2 -2
  281. package/dist/internal/dead-letter/RedisDeadLetterStore.d.ts.map +1 -1
  282. package/dist/internal/dead-letter/RedisDeadLetterStore.js +12 -16
  283. package/dist/internal/dead-letter/RedisDeadLetterStore.js.map +1 -1
  284. package/dist/internal/dead-letter/types.d.ts +1 -1
  285. package/dist/internal/dead-letter/types.d.ts.map +1 -1
  286. package/dist/internal/dead-letter/types.js +1 -2
  287. package/dist/internal/dead-letter/utils/create-dead-letter-store.d.ts +2 -2
  288. package/dist/internal/dead-letter/utils/create-dead-letter-store.d.ts.map +1 -1
  289. package/dist/internal/dead-letter/utils/create-dead-letter-store.js +6 -43
  290. package/dist/internal/dead-letter/utils/create-dead-letter-store.js.map +1 -1
  291. package/dist/internal/dead-letter/utils/serialize-helpers.d.ts +1 -1
  292. package/dist/internal/dead-letter/utils/serialize-helpers.d.ts.map +1 -1
  293. package/dist/internal/dead-letter/utils/serialize-helpers.js +2 -7
  294. package/dist/internal/dead-letter/utils/serialize-helpers.js.map +1 -1
  295. package/dist/internal/delay/DelayManager.d.ts +3 -3
  296. package/dist/internal/delay/DelayManager.d.ts.map +1 -1
  297. package/dist/internal/delay/DelayManager.js +3 -7
  298. package/dist/internal/delay/DelayManager.js.map +1 -1
  299. package/dist/internal/delay/MemoryDelayStore.d.ts +2 -2
  300. package/dist/internal/delay/MemoryDelayStore.d.ts.map +1 -1
  301. package/dist/internal/delay/MemoryDelayStore.js +1 -5
  302. package/dist/internal/delay/MemoryDelayStore.js.map +1 -1
  303. package/dist/internal/delay/RedisDelayStore.d.ts +2 -2
  304. package/dist/internal/delay/RedisDelayStore.d.ts.map +1 -1
  305. package/dist/internal/delay/RedisDelayStore.js +8 -12
  306. package/dist/internal/delay/RedisDelayStore.js.map +1 -1
  307. package/dist/internal/delay/types.d.ts +1 -1
  308. package/dist/internal/delay/types.d.ts.map +1 -1
  309. package/dist/internal/delay/types.js +1 -2
  310. package/dist/internal/delay/utils/create-delay-store.d.ts +2 -2
  311. package/dist/internal/delay/utils/create-delay-store.d.ts.map +1 -1
  312. package/dist/internal/delay/utils/create-delay-store.js +6 -43
  313. package/dist/internal/delay/utils/create-delay-store.js.map +1 -1
  314. package/dist/internal/delay/utils/serialize-helpers.d.ts +1 -1
  315. package/dist/internal/delay/utils/serialize-helpers.d.ts.map +1 -1
  316. package/dist/internal/delay/utils/serialize-helpers.js +2 -7
  317. package/dist/internal/delay/utils/serialize-helpers.js.map +1 -1
  318. package/dist/internal/drivers/kafka/classes/KafkaDriver.d.ts +10 -10
  319. package/dist/internal/drivers/kafka/classes/KafkaDriver.d.ts.map +1 -1
  320. package/dist/internal/drivers/kafka/classes/KafkaDriver.js +38 -75
  321. package/dist/internal/drivers/kafka/classes/KafkaDriver.js.map +1 -1
  322. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.d.ts +7 -7
  323. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.d.ts.map +1 -1
  324. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.js +26 -30
  325. package/dist/internal/drivers/kafka/classes/KafkaMessageBus.js.map +1 -1
  326. package/dist/internal/drivers/kafka/classes/KafkaPublisher.d.ts +6 -6
  327. package/dist/internal/drivers/kafka/classes/KafkaPublisher.d.ts.map +1 -1
  328. package/dist/internal/drivers/kafka/classes/KafkaPublisher.js +4 -8
  329. package/dist/internal/drivers/kafka/classes/KafkaPublisher.js.map +1 -1
  330. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.d.ts +5 -4
  331. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.d.ts.map +1 -1
  332. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.js +21 -25
  333. package/dist/internal/drivers/kafka/classes/KafkaRpcClient.js.map +1 -1
  334. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.d.ts +5 -4
  335. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.d.ts.map +1 -1
  336. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.js +18 -22
  337. package/dist/internal/drivers/kafka/classes/KafkaRpcServer.js.map +1 -1
  338. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.d.ts +3 -3
  339. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.d.ts.map +1 -1
  340. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.js +29 -33
  341. package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.js.map +1 -1
  342. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.d.ts +7 -6
  343. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.d.ts.map +1 -1
  344. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.js +5 -9
  345. package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.js.map +1 -1
  346. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.d.ts +7 -7
  347. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.d.ts.map +1 -1
  348. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.js +26 -30
  349. package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.js.map +1 -1
  350. package/dist/internal/drivers/kafka/classes/index.d.ts +8 -8
  351. package/dist/internal/drivers/kafka/classes/index.d.ts.map +1 -1
  352. package/dist/internal/drivers/kafka/classes/index.js +8 -19
  353. package/dist/internal/drivers/kafka/classes/index.js.map +1 -1
  354. package/dist/internal/drivers/kafka/index.d.ts +3 -3
  355. package/dist/internal/drivers/kafka/index.d.ts.map +1 -1
  356. package/dist/internal/drivers/kafka/index.js +3 -19
  357. package/dist/internal/drivers/kafka/index.js.map +1 -1
  358. package/dist/internal/drivers/kafka/types/index.d.ts +1 -1
  359. package/dist/internal/drivers/kafka/types/index.d.ts.map +1 -1
  360. package/dist/internal/drivers/kafka/types/index.js +1 -17
  361. package/dist/internal/drivers/kafka/types/index.js.map +1 -1
  362. package/dist/internal/drivers/kafka/types/kafka-types.d.ts +3 -3
  363. package/dist/internal/drivers/kafka/types/kafka-types.d.ts.map +1 -1
  364. package/dist/internal/drivers/kafka/types/kafka-types.js +1 -2
  365. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.d.ts +1 -1
  366. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.d.ts.map +1 -1
  367. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.js +14 -21
  368. package/dist/internal/drivers/kafka/utils/create-kafka-consumer.js.map +1 -1
  369. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.d.ts +1 -1
  370. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.d.ts.map +1 -1
  371. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.js +3 -8
  372. package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.js.map +1 -1
  373. package/dist/internal/drivers/kafka/utils/index.d.ts +9 -9
  374. package/dist/internal/drivers/kafka/utils/index.d.ts.map +1 -1
  375. package/dist/internal/drivers/kafka/utils/index.js +9 -25
  376. package/dist/internal/drivers/kafka/utils/index.js.map +1 -1
  377. package/dist/internal/drivers/kafka/utils/parse-kafka-message.d.ts +2 -2
  378. package/dist/internal/drivers/kafka/utils/parse-kafka-message.d.ts.map +1 -1
  379. package/dist/internal/drivers/kafka/utils/parse-kafka-message.js +1 -5
  380. package/dist/internal/drivers/kafka/utils/parse-kafka-message.js.map +1 -1
  381. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.d.ts +4 -4
  382. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.d.ts.map +1 -1
  383. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.js +11 -15
  384. package/dist/internal/drivers/kafka/utils/publish-kafka-messages.js.map +1 -1
  385. package/dist/internal/drivers/kafka/utils/resolve-group-id.d.ts +1 -1
  386. package/dist/internal/drivers/kafka/utils/resolve-group-id.d.ts.map +1 -1
  387. package/dist/internal/drivers/kafka/utils/resolve-group-id.js +1 -5
  388. package/dist/internal/drivers/kafka/utils/resolve-group-id.js.map +1 -1
  389. package/dist/internal/drivers/kafka/utils/resolve-topic-name.js +1 -5
  390. package/dist/internal/drivers/kafka/utils/resolve-topic-name.js.map +1 -1
  391. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.d.ts +2 -2
  392. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.d.ts.map +1 -1
  393. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.js +1 -5
  394. package/dist/internal/drivers/kafka/utils/serialize-kafka-message.js.map +1 -1
  395. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.d.ts +1 -1
  396. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.d.ts.map +1 -1
  397. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.js +12 -20
  398. package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.js.map +1 -1
  399. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.d.ts +5 -5
  400. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.d.ts.map +1 -1
  401. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.js +9 -13
  402. package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.js.map +1 -1
  403. package/dist/internal/drivers/memory/classes/MemoryDriver.d.ts +11 -11
  404. package/dist/internal/drivers/memory/classes/MemoryDriver.d.ts.map +1 -1
  405. package/dist/internal/drivers/memory/classes/MemoryDriver.js +32 -36
  406. package/dist/internal/drivers/memory/classes/MemoryDriver.js.map +1 -1
  407. package/dist/internal/drivers/memory/classes/MemoryMessageBus.d.ts +7 -7
  408. package/dist/internal/drivers/memory/classes/MemoryMessageBus.d.ts.map +1 -1
  409. package/dist/internal/drivers/memory/classes/MemoryMessageBus.js +8 -12
  410. package/dist/internal/drivers/memory/classes/MemoryMessageBus.js.map +1 -1
  411. package/dist/internal/drivers/memory/classes/MemoryPublisher.d.ts +6 -6
  412. package/dist/internal/drivers/memory/classes/MemoryPublisher.d.ts.map +1 -1
  413. package/dist/internal/drivers/memory/classes/MemoryPublisher.js +4 -8
  414. package/dist/internal/drivers/memory/classes/MemoryPublisher.js.map +1 -1
  415. package/dist/internal/drivers/memory/classes/MemoryRpcClient.d.ts +5 -4
  416. package/dist/internal/drivers/memory/classes/MemoryRpcClient.d.ts.map +1 -1
  417. package/dist/internal/drivers/memory/classes/MemoryRpcClient.js +7 -11
  418. package/dist/internal/drivers/memory/classes/MemoryRpcClient.js.map +1 -1
  419. package/dist/internal/drivers/memory/classes/MemoryRpcServer.d.ts +5 -4
  420. package/dist/internal/drivers/memory/classes/MemoryRpcServer.d.ts.map +1 -1
  421. package/dist/internal/drivers/memory/classes/MemoryRpcServer.js +2 -6
  422. package/dist/internal/drivers/memory/classes/MemoryRpcServer.js.map +1 -1
  423. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.d.ts +3 -3
  424. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.d.ts.map +1 -1
  425. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.js +21 -25
  426. package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.js.map +1 -1
  427. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.d.ts +7 -6
  428. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.d.ts.map +1 -1
  429. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.js +5 -9
  430. package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.js.map +1 -1
  431. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.d.ts +7 -7
  432. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.d.ts.map +1 -1
  433. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.js +10 -14
  434. package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.js.map +1 -1
  435. package/dist/internal/drivers/memory/classes/index.d.ts +8 -8
  436. package/dist/internal/drivers/memory/classes/index.d.ts.map +1 -1
  437. package/dist/internal/drivers/memory/classes/index.js +8 -24
  438. package/dist/internal/drivers/memory/classes/index.js.map +1 -1
  439. package/dist/internal/drivers/memory/index.d.ts +3 -3
  440. package/dist/internal/drivers/memory/index.d.ts.map +1 -1
  441. package/dist/internal/drivers/memory/index.js +3 -19
  442. package/dist/internal/drivers/memory/index.js.map +1 -1
  443. package/dist/internal/drivers/memory/types/index.d.ts +1 -1
  444. package/dist/internal/drivers/memory/types/index.d.ts.map +1 -1
  445. package/dist/internal/drivers/memory/types/index.js +1 -17
  446. package/dist/internal/drivers/memory/types/index.js.map +1 -1
  447. package/dist/internal/drivers/memory/types/memory-store.d.ts +3 -3
  448. package/dist/internal/drivers/memory/types/memory-store.d.ts.map +1 -1
  449. package/dist/internal/drivers/memory/types/memory-store.js +1 -2
  450. package/dist/internal/drivers/memory/utils/create-store.d.ts +1 -1
  451. package/dist/internal/drivers/memory/utils/create-store.d.ts.map +1 -1
  452. package/dist/internal/drivers/memory/utils/create-store.js +1 -5
  453. package/dist/internal/drivers/memory/utils/create-store.js.map +1 -1
  454. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.d.ts +1 -1
  455. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.d.ts.map +1 -1
  456. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.js +1 -5
  457. package/dist/internal/drivers/memory/utils/dispatch-to-consumers.js.map +1 -1
  458. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.d.ts +1 -1
  459. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.d.ts.map +1 -1
  460. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.js +1 -5
  461. package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.js.map +1 -1
  462. package/dist/internal/drivers/memory/utils/index.d.ts +5 -5
  463. package/dist/internal/drivers/memory/utils/index.d.ts.map +1 -1
  464. package/dist/internal/drivers/memory/utils/index.js +5 -21
  465. package/dist/internal/drivers/memory/utils/index.js.map +1 -1
  466. package/dist/internal/drivers/memory/utils/publish-messages.d.ts +4 -4
  467. package/dist/internal/drivers/memory/utils/publish-messages.d.ts.map +1 -1
  468. package/dist/internal/drivers/memory/utils/publish-messages.js +7 -11
  469. package/dist/internal/drivers/memory/utils/publish-messages.js.map +1 -1
  470. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.d.ts +5 -5
  471. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.d.ts.map +1 -1
  472. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.js +3 -7
  473. package/dist/internal/drivers/memory/utils/wrap-consumer-callback.js.map +1 -1
  474. package/dist/internal/drivers/nats/classes/NatsDriver.d.ts +10 -10
  475. package/dist/internal/drivers/nats/classes/NatsDriver.d.ts.map +1 -1
  476. package/dist/internal/drivers/nats/classes/NatsDriver.js +39 -76
  477. package/dist/internal/drivers/nats/classes/NatsDriver.js.map +1 -1
  478. package/dist/internal/drivers/nats/classes/NatsMessageBus.d.ts +7 -7
  479. package/dist/internal/drivers/nats/classes/NatsMessageBus.d.ts.map +1 -1
  480. package/dist/internal/drivers/nats/classes/NatsMessageBus.js +19 -23
  481. package/dist/internal/drivers/nats/classes/NatsMessageBus.js.map +1 -1
  482. package/dist/internal/drivers/nats/classes/NatsPublisher.d.ts +6 -6
  483. package/dist/internal/drivers/nats/classes/NatsPublisher.d.ts.map +1 -1
  484. package/dist/internal/drivers/nats/classes/NatsPublisher.js +4 -8
  485. package/dist/internal/drivers/nats/classes/NatsPublisher.js.map +1 -1
  486. package/dist/internal/drivers/nats/classes/NatsRpcClient.d.ts +5 -4
  487. package/dist/internal/drivers/nats/classes/NatsRpcClient.d.ts.map +1 -1
  488. package/dist/internal/drivers/nats/classes/NatsRpcClient.js +15 -19
  489. package/dist/internal/drivers/nats/classes/NatsRpcClient.js.map +1 -1
  490. package/dist/internal/drivers/nats/classes/NatsRpcServer.d.ts +5 -4
  491. package/dist/internal/drivers/nats/classes/NatsRpcServer.d.ts.map +1 -1
  492. package/dist/internal/drivers/nats/classes/NatsRpcServer.js +9 -13
  493. package/dist/internal/drivers/nats/classes/NatsRpcServer.js.map +1 -1
  494. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.d.ts +3 -3
  495. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.d.ts.map +1 -1
  496. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.js +29 -33
  497. package/dist/internal/drivers/nats/classes/NatsStreamPipeline.js.map +1 -1
  498. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.d.ts +7 -6
  499. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.d.ts.map +1 -1
  500. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.js +5 -9
  501. package/dist/internal/drivers/nats/classes/NatsStreamProcessor.js.map +1 -1
  502. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.d.ts +7 -7
  503. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.d.ts.map +1 -1
  504. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.js +23 -27
  505. package/dist/internal/drivers/nats/classes/NatsWorkerQueue.js.map +1 -1
  506. package/dist/internal/drivers/nats/classes/index.d.ts +8 -8
  507. package/dist/internal/drivers/nats/classes/index.d.ts.map +1 -1
  508. package/dist/internal/drivers/nats/classes/index.js +8 -19
  509. package/dist/internal/drivers/nats/classes/index.js.map +1 -1
  510. package/dist/internal/drivers/nats/index.d.ts +3 -3
  511. package/dist/internal/drivers/nats/index.d.ts.map +1 -1
  512. package/dist/internal/drivers/nats/index.js +3 -19
  513. package/dist/internal/drivers/nats/index.js.map +1 -1
  514. package/dist/internal/drivers/nats/types/index.d.ts +1 -1
  515. package/dist/internal/drivers/nats/types/index.d.ts.map +1 -1
  516. package/dist/internal/drivers/nats/types/index.js +1 -17
  517. package/dist/internal/drivers/nats/types/index.js.map +1 -1
  518. package/dist/internal/drivers/nats/types/nats-types.d.ts +2 -2
  519. package/dist/internal/drivers/nats/types/nats-types.d.ts.map +1 -1
  520. package/dist/internal/drivers/nats/types/nats-types.js +1 -2
  521. package/dist/internal/drivers/nats/utils/create-nats-consumer.d.ts +1 -1
  522. package/dist/internal/drivers/nats/utils/create-nats-consumer.d.ts.map +1 -1
  523. package/dist/internal/drivers/nats/utils/create-nats-consumer.js +3 -7
  524. package/dist/internal/drivers/nats/utils/create-nats-consumer.js.map +1 -1
  525. package/dist/internal/drivers/nats/utils/ensure-nats-stream.d.ts +1 -1
  526. package/dist/internal/drivers/nats/utils/ensure-nats-stream.d.ts.map +1 -1
  527. package/dist/internal/drivers/nats/utils/ensure-nats-stream.js +1 -5
  528. package/dist/internal/drivers/nats/utils/ensure-nats-stream.js.map +1 -1
  529. package/dist/internal/drivers/nats/utils/index.d.ts +10 -10
  530. package/dist/internal/drivers/nats/utils/index.d.ts.map +1 -1
  531. package/dist/internal/drivers/nats/utils/index.js +10 -26
  532. package/dist/internal/drivers/nats/utils/index.js.map +1 -1
  533. package/dist/internal/drivers/nats/utils/parse-nats-message.d.ts +1 -1
  534. package/dist/internal/drivers/nats/utils/parse-nats-message.d.ts.map +1 -1
  535. package/dist/internal/drivers/nats/utils/parse-nats-message.js +1 -5
  536. package/dist/internal/drivers/nats/utils/parse-nats-message.js.map +1 -1
  537. package/dist/internal/drivers/nats/utils/publish-nats-messages.d.ts +4 -4
  538. package/dist/internal/drivers/nats/utils/publish-nats-messages.d.ts.map +1 -1
  539. package/dist/internal/drivers/nats/utils/publish-nats-messages.js +9 -13
  540. package/dist/internal/drivers/nats/utils/publish-nats-messages.js.map +1 -1
  541. package/dist/internal/drivers/nats/utils/resolve-consumer-name.d.ts +1 -1
  542. package/dist/internal/drivers/nats/utils/resolve-consumer-name.d.ts.map +1 -1
  543. package/dist/internal/drivers/nats/utils/resolve-consumer-name.js +1 -5
  544. package/dist/internal/drivers/nats/utils/resolve-consumer-name.js.map +1 -1
  545. package/dist/internal/drivers/nats/utils/resolve-stream-name.js +1 -5
  546. package/dist/internal/drivers/nats/utils/resolve-stream-name.js.map +1 -1
  547. package/dist/internal/drivers/nats/utils/resolve-subject.js +1 -5
  548. package/dist/internal/drivers/nats/utils/resolve-subject.js.map +1 -1
  549. package/dist/internal/drivers/nats/utils/serialize-nats-message.d.ts +2 -2
  550. package/dist/internal/drivers/nats/utils/serialize-nats-message.d.ts.map +1 -1
  551. package/dist/internal/drivers/nats/utils/serialize-nats-message.js +1 -5
  552. package/dist/internal/drivers/nats/utils/serialize-nats-message.js.map +1 -1
  553. package/dist/internal/drivers/nats/utils/stop-nats-consumer.d.ts +1 -1
  554. package/dist/internal/drivers/nats/utils/stop-nats-consumer.d.ts.map +1 -1
  555. package/dist/internal/drivers/nats/utils/stop-nats-consumer.js +2 -7
  556. package/dist/internal/drivers/nats/utils/stop-nats-consumer.js.map +1 -1
  557. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.d.ts +5 -5
  558. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.d.ts.map +1 -1
  559. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.js +5 -9
  560. package/dist/internal/drivers/nats/utils/wrap-nats-consumer.js.map +1 -1
  561. package/dist/internal/drivers/rabbit/classes/RabbitDriver.d.ts +8 -8
  562. package/dist/internal/drivers/rabbit/classes/RabbitDriver.d.ts.map +1 -1
  563. package/dist/internal/drivers/rabbit/classes/RabbitDriver.js +26 -33
  564. package/dist/internal/drivers/rabbit/classes/RabbitDriver.js.map +1 -1
  565. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.d.ts +5 -5
  566. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.d.ts.map +1 -1
  567. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.js +12 -16
  568. package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.js.map +1 -1
  569. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.d.ts +5 -5
  570. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.d.ts.map +1 -1
  571. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.js +4 -8
  572. package/dist/internal/drivers/rabbit/classes/RabbitPublisher.js.map +1 -1
  573. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.d.ts +5 -4
  574. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.d.ts.map +1 -1
  575. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.js +18 -22
  576. package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.js.map +1 -1
  577. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.d.ts +5 -4
  578. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.d.ts.map +1 -1
  579. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.js +13 -17
  580. package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.js.map +1 -1
  581. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.d.ts +3 -3
  582. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.d.ts.map +1 -1
  583. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.js +15 -19
  584. package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.js.map +1 -1
  585. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.d.ts +7 -6
  586. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.d.ts.map +1 -1
  587. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.js +5 -9
  588. package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.js.map +1 -1
  589. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.d.ts +5 -5
  590. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.d.ts.map +1 -1
  591. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.js +13 -17
  592. package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.js.map +1 -1
  593. package/dist/internal/drivers/rabbit/classes/index.d.ts +8 -8
  594. package/dist/internal/drivers/rabbit/classes/index.d.ts.map +1 -1
  595. package/dist/internal/drivers/rabbit/classes/index.js +8 -19
  596. package/dist/internal/drivers/rabbit/classes/index.js.map +1 -1
  597. package/dist/internal/drivers/rabbit/index.d.ts +3 -3
  598. package/dist/internal/drivers/rabbit/index.d.ts.map +1 -1
  599. package/dist/internal/drivers/rabbit/index.js +3 -19
  600. package/dist/internal/drivers/rabbit/index.js.map +1 -1
  601. package/dist/internal/drivers/rabbit/types/index.d.ts +1 -1
  602. package/dist/internal/drivers/rabbit/types/index.d.ts.map +1 -1
  603. package/dist/internal/drivers/rabbit/types/index.js +1 -17
  604. package/dist/internal/drivers/rabbit/types/index.js.map +1 -1
  605. package/dist/internal/drivers/rabbit/types/rabbit-types.d.ts +1 -1
  606. package/dist/internal/drivers/rabbit/types/rabbit-types.d.ts.map +1 -1
  607. package/dist/internal/drivers/rabbit/types/rabbit-types.js +1 -2
  608. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.d.ts +2 -2
  609. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.d.ts.map +1 -1
  610. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.js +3 -7
  611. package/dist/internal/drivers/rabbit/utils/build-amqp-headers.js.map +1 -1
  612. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.d.ts +3 -3
  613. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.d.ts.map +1 -1
  614. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.js +1 -5
  615. package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.js.map +1 -1
  616. package/dist/internal/drivers/rabbit/utils/index.d.ts +8 -8
  617. package/dist/internal/drivers/rabbit/utils/index.d.ts.map +1 -1
  618. package/dist/internal/drivers/rabbit/utils/index.js +8 -24
  619. package/dist/internal/drivers/rabbit/utils/index.js.map +1 -1
  620. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.d.ts +1 -1
  621. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.d.ts.map +1 -1
  622. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.js +1 -5
  623. package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.js.map +1 -1
  624. package/dist/internal/drivers/rabbit/utils/publish-messages.d.ts +4 -4
  625. package/dist/internal/drivers/rabbit/utils/publish-messages.d.ts.map +1 -1
  626. package/dist/internal/drivers/rabbit/utils/publish-messages.js +14 -18
  627. package/dist/internal/drivers/rabbit/utils/publish-messages.js.map +1 -1
  628. package/dist/internal/drivers/rabbit/utils/publish-to-exchange.js +4 -8
  629. package/dist/internal/drivers/rabbit/utils/publish-to-exchange.js.map +1 -1
  630. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.d.ts +1 -1
  631. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.d.ts.map +1 -1
  632. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.js +6 -10
  633. package/dist/internal/drivers/rabbit/utils/resolve-queue-name.js.map +1 -1
  634. package/dist/internal/drivers/rabbit/utils/sanitize-routing-key.js +1 -5
  635. package/dist/internal/drivers/rabbit/utils/sanitize-routing-key.js.map +1 -1
  636. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.d.ts +5 -5
  637. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.d.ts.map +1 -1
  638. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.js +16 -20
  639. package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.js.map +1 -1
  640. package/dist/internal/drivers/redis/classes/RedisDriver.d.ts +10 -10
  641. package/dist/internal/drivers/redis/classes/RedisDriver.d.ts.map +1 -1
  642. package/dist/internal/drivers/redis/classes/RedisDriver.js +42 -78
  643. package/dist/internal/drivers/redis/classes/RedisDriver.js.map +1 -1
  644. package/dist/internal/drivers/redis/classes/RedisMessageBus.d.ts +7 -7
  645. package/dist/internal/drivers/redis/classes/RedisMessageBus.d.ts.map +1 -1
  646. package/dist/internal/drivers/redis/classes/RedisMessageBus.js +19 -23
  647. package/dist/internal/drivers/redis/classes/RedisMessageBus.js.map +1 -1
  648. package/dist/internal/drivers/redis/classes/RedisPublisher.d.ts +6 -6
  649. package/dist/internal/drivers/redis/classes/RedisPublisher.d.ts.map +1 -1
  650. package/dist/internal/drivers/redis/classes/RedisPublisher.js +4 -8
  651. package/dist/internal/drivers/redis/classes/RedisPublisher.js.map +1 -1
  652. package/dist/internal/drivers/redis/classes/RedisRpcClient.d.ts +5 -4
  653. package/dist/internal/drivers/redis/classes/RedisRpcClient.d.ts.map +1 -1
  654. package/dist/internal/drivers/redis/classes/RedisRpcClient.js +18 -22
  655. package/dist/internal/drivers/redis/classes/RedisRpcClient.js.map +1 -1
  656. package/dist/internal/drivers/redis/classes/RedisRpcServer.d.ts +5 -4
  657. package/dist/internal/drivers/redis/classes/RedisRpcServer.d.ts.map +1 -1
  658. package/dist/internal/drivers/redis/classes/RedisRpcServer.js +19 -23
  659. package/dist/internal/drivers/redis/classes/RedisRpcServer.js.map +1 -1
  660. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.d.ts +3 -3
  661. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.d.ts.map +1 -1
  662. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.js +27 -31
  663. package/dist/internal/drivers/redis/classes/RedisStreamPipeline.js.map +1 -1
  664. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.d.ts +7 -6
  665. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.d.ts.map +1 -1
  666. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.js +5 -9
  667. package/dist/internal/drivers/redis/classes/RedisStreamProcessor.js.map +1 -1
  668. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.d.ts +7 -7
  669. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.d.ts.map +1 -1
  670. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.js +23 -27
  671. package/dist/internal/drivers/redis/classes/RedisWorkerQueue.js.map +1 -1
  672. package/dist/internal/drivers/redis/classes/index.d.ts +8 -8
  673. package/dist/internal/drivers/redis/classes/index.d.ts.map +1 -1
  674. package/dist/internal/drivers/redis/classes/index.js +8 -19
  675. package/dist/internal/drivers/redis/classes/index.js.map +1 -1
  676. package/dist/internal/drivers/redis/index.d.ts +3 -3
  677. package/dist/internal/drivers/redis/index.d.ts.map +1 -1
  678. package/dist/internal/drivers/redis/index.js +3 -19
  679. package/dist/internal/drivers/redis/index.js.map +1 -1
  680. package/dist/internal/drivers/redis/types/index.d.ts +1 -1
  681. package/dist/internal/drivers/redis/types/index.d.ts.map +1 -1
  682. package/dist/internal/drivers/redis/types/index.js +1 -17
  683. package/dist/internal/drivers/redis/types/index.js.map +1 -1
  684. package/dist/internal/drivers/redis/types/redis-types.d.ts +4 -4
  685. package/dist/internal/drivers/redis/types/redis-types.d.ts.map +1 -1
  686. package/dist/internal/drivers/redis/types/redis-types.js +1 -2
  687. package/dist/internal/drivers/redis/utils/create-consumer-loop.d.ts +1 -1
  688. package/dist/internal/drivers/redis/utils/create-consumer-loop.d.ts.map +1 -1
  689. package/dist/internal/drivers/redis/utils/create-consumer-loop.js +5 -9
  690. package/dist/internal/drivers/redis/utils/create-consumer-loop.js.map +1 -1
  691. package/dist/internal/drivers/redis/utils/index.d.ts +9 -9
  692. package/dist/internal/drivers/redis/utils/index.d.ts.map +1 -1
  693. package/dist/internal/drivers/redis/utils/index.js +9 -25
  694. package/dist/internal/drivers/redis/utils/index.js.map +1 -1
  695. package/dist/internal/drivers/redis/utils/parse-stream-entry.d.ts +1 -1
  696. package/dist/internal/drivers/redis/utils/parse-stream-entry.d.ts.map +1 -1
  697. package/dist/internal/drivers/redis/utils/parse-stream-entry.js +1 -5
  698. package/dist/internal/drivers/redis/utils/parse-stream-entry.js.map +1 -1
  699. package/dist/internal/drivers/redis/utils/publish-redis-messages.d.ts +4 -4
  700. package/dist/internal/drivers/redis/utils/publish-redis-messages.d.ts.map +1 -1
  701. package/dist/internal/drivers/redis/utils/publish-redis-messages.js +11 -15
  702. package/dist/internal/drivers/redis/utils/publish-redis-messages.js.map +1 -1
  703. package/dist/internal/drivers/redis/utils/resolve-group-name.d.ts +1 -1
  704. package/dist/internal/drivers/redis/utils/resolve-group-name.d.ts.map +1 -1
  705. package/dist/internal/drivers/redis/utils/resolve-group-name.js +1 -5
  706. package/dist/internal/drivers/redis/utils/resolve-group-name.js.map +1 -1
  707. package/dist/internal/drivers/redis/utils/resolve-stream-key.js +1 -5
  708. package/dist/internal/drivers/redis/utils/resolve-stream-key.js.map +1 -1
  709. package/dist/internal/drivers/redis/utils/serialize-stream-fields.d.ts +1 -1
  710. package/dist/internal/drivers/redis/utils/serialize-stream-fields.d.ts.map +1 -1
  711. package/dist/internal/drivers/redis/utils/serialize-stream-fields.js +1 -5
  712. package/dist/internal/drivers/redis/utils/serialize-stream-fields.js.map +1 -1
  713. package/dist/internal/drivers/redis/utils/stop-consumer-loop.d.ts +1 -1
  714. package/dist/internal/drivers/redis/utils/stop-consumer-loop.d.ts.map +1 -1
  715. package/dist/internal/drivers/redis/utils/stop-consumer-loop.js +2 -7
  716. package/dist/internal/drivers/redis/utils/stop-consumer-loop.js.map +1 -1
  717. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.d.ts +5 -5
  718. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.d.ts.map +1 -1
  719. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.js +9 -13
  720. package/dist/internal/drivers/redis/utils/wrap-redis-consumer.js.map +1 -1
  721. package/dist/internal/drivers/redis/utils/xadd-to-stream.d.ts +1 -1
  722. package/dist/internal/drivers/redis/utils/xadd-to-stream.d.ts.map +1 -1
  723. package/dist/internal/drivers/redis/utils/xadd-to-stream.js +1 -5
  724. package/dist/internal/drivers/redis/utils/xadd-to-stream.js.map +1 -1
  725. package/dist/internal/index.d.ts +1 -1
  726. package/dist/internal/index.d.ts.map +1 -1
  727. package/dist/internal/index.js +1 -17
  728. package/dist/internal/index.js.map +1 -1
  729. package/dist/internal/message/classes/MessageManager.d.ts +5 -4
  730. package/dist/internal/message/classes/MessageManager.d.ts.map +1 -1
  731. package/dist/internal/message/classes/MessageManager.js +28 -31
  732. package/dist/internal/message/classes/MessageManager.js.map +1 -1
  733. package/dist/internal/message/classes/MessageScanner.d.ts +3 -3
  734. package/dist/internal/message/classes/MessageScanner.d.ts.map +1 -1
  735. package/dist/internal/message/classes/MessageScanner.js +18 -22
  736. package/dist/internal/message/classes/MessageScanner.js.map +1 -1
  737. package/dist/internal/message/classes/index.d.ts +2 -2
  738. package/dist/internal/message/classes/index.d.ts.map +1 -1
  739. package/dist/internal/message/classes/index.js +2 -18
  740. package/dist/internal/message/classes/index.js.map +1 -1
  741. package/dist/internal/message/errors/IrisScannerError.d.ts +1 -1
  742. package/dist/internal/message/errors/IrisScannerError.d.ts.map +1 -1
  743. package/dist/internal/message/errors/IrisScannerError.js +1 -5
  744. package/dist/internal/message/errors/IrisScannerError.js.map +1 -1
  745. package/dist/internal/message/errors/index.d.ts +1 -1
  746. package/dist/internal/message/errors/index.d.ts.map +1 -1
  747. package/dist/internal/message/errors/index.js +1 -17
  748. package/dist/internal/message/errors/index.js.map +1 -1
  749. package/dist/internal/message/index.d.ts +5 -5
  750. package/dist/internal/message/index.d.ts.map +1 -1
  751. package/dist/internal/message/index.js +5 -21
  752. package/dist/internal/message/index.js.map +1 -1
  753. package/dist/internal/message/metadata/abstract-message.js +3 -7
  754. package/dist/internal/message/metadata/abstract-message.js.map +1 -1
  755. package/dist/internal/message/metadata/build-message-metadata.d.ts +1 -1
  756. package/dist/internal/message/metadata/build-message-metadata.d.ts.map +1 -1
  757. package/dist/internal/message/metadata/build-message-metadata.js +46 -42
  758. package/dist/internal/message/metadata/build-message-metadata.js.map +1 -1
  759. package/dist/internal/message/metadata/collect.d.ts +1 -1
  760. package/dist/internal/message/metadata/collect.d.ts.map +1 -1
  761. package/dist/internal/message/metadata/collect.js +3 -9
  762. package/dist/internal/message/metadata/collect.js.map +1 -1
  763. package/dist/internal/message/metadata/get-message-metadata.d.ts +1 -1
  764. package/dist/internal/message/metadata/get-message-metadata.d.ts.map +1 -1
  765. package/dist/internal/message/metadata/get-message-metadata.js +6 -10
  766. package/dist/internal/message/metadata/get-message-metadata.js.map +1 -1
  767. package/dist/internal/message/metadata/index.d.ts +4 -4
  768. package/dist/internal/message/metadata/index.d.ts.map +1 -1
  769. package/dist/internal/message/metadata/index.js +4 -20
  770. package/dist/internal/message/metadata/index.js.map +1 -1
  771. package/dist/internal/message/metadata/registry.d.ts +1 -1
  772. package/dist/internal/message/metadata/registry.d.ts.map +1 -1
  773. package/dist/internal/message/metadata/registry.js +7 -17
  774. package/dist/internal/message/metadata/registry.js.map +1 -1
  775. package/dist/internal/message/metadata/stage-metadata.d.ts +2 -2
  776. package/dist/internal/message/metadata/stage-metadata.d.ts.map +1 -1
  777. package/dist/internal/message/metadata/stage-metadata.js +29 -52
  778. package/dist/internal/message/metadata/stage-metadata.js.map +1 -1
  779. package/dist/internal/message/metadata/validate-fields.d.ts +1 -1
  780. package/dist/internal/message/metadata/validate-fields.d.ts.map +1 -1
  781. package/dist/internal/message/metadata/validate-fields.js +4 -8
  782. package/dist/internal/message/metadata/validate-fields.js.map +1 -1
  783. package/dist/internal/message/metadata/validate-generated.d.ts +2 -2
  784. package/dist/internal/message/metadata/validate-generated.d.ts.map +1 -1
  785. package/dist/internal/message/metadata/validate-generated.js +4 -8
  786. package/dist/internal/message/metadata/validate-generated.js.map +1 -1
  787. package/dist/internal/message/metadata/validate-headers.d.ts +1 -1
  788. package/dist/internal/message/metadata/validate-headers.d.ts.map +1 -1
  789. package/dist/internal/message/metadata/validate-headers.js +8 -12
  790. package/dist/internal/message/metadata/validate-headers.js.map +1 -1
  791. package/dist/internal/message/types/index.d.ts +5 -5
  792. package/dist/internal/message/types/index.d.ts.map +1 -1
  793. package/dist/internal/message/types/index.js +5 -21
  794. package/dist/internal/message/types/index.js.map +1 -1
  795. package/dist/internal/message/types/metadata.d.ts +5 -4
  796. package/dist/internal/message/types/metadata.d.ts.map +1 -1
  797. package/dist/internal/message/types/metadata.js +1 -2
  798. package/dist/internal/message/types/outbound-payload.js +1 -2
  799. package/dist/internal/message/types/serialized-message.js +1 -2
  800. package/dist/internal/message/types/staged.d.ts +7 -2
  801. package/dist/internal/message/types/staged.d.ts.map +1 -1
  802. package/dist/internal/message/types/staged.js +1 -2
  803. package/dist/internal/message/types/types.js +1 -2
  804. package/dist/internal/message/utils/apply-stage.d.ts +1 -1
  805. package/dist/internal/message/utils/apply-stage.d.ts.map +1 -1
  806. package/dist/internal/message/utils/apply-stage.js +1 -5
  807. package/dist/internal/message/utils/apply-stage.js.map +1 -1
  808. package/dist/internal/message/utils/build-schema.d.ts +2 -2
  809. package/dist/internal/message/utils/build-schema.d.ts.map +1 -1
  810. package/dist/internal/message/utils/build-schema.js +17 -21
  811. package/dist/internal/message/utils/build-schema.js.map +1 -1
  812. package/dist/internal/message/utils/compress.d.ts +1 -1
  813. package/dist/internal/message/utils/compress.d.ts.map +1 -1
  814. package/dist/internal/message/utils/compress.js +13 -18
  815. package/dist/internal/message/utils/compress.js.map +1 -1
  816. package/dist/internal/message/utils/deserialise.d.ts +1 -1
  817. package/dist/internal/message/utils/deserialise.d.ts.map +1 -1
  818. package/dist/internal/message/utils/deserialise.js +16 -20
  819. package/dist/internal/message/utils/deserialise.js.map +1 -1
  820. package/dist/internal/message/utils/deserialize-message.d.ts +1 -1
  821. package/dist/internal/message/utils/deserialize-message.d.ts.map +1 -1
  822. package/dist/internal/message/utils/deserialize-message.js +3 -7
  823. package/dist/internal/message/utils/deserialize-message.js.map +1 -1
  824. package/dist/internal/message/utils/encrypt.js +12 -50
  825. package/dist/internal/message/utils/encrypt.js.map +1 -1
  826. package/dist/internal/message/utils/generate-fields.d.ts +1 -1
  827. package/dist/internal/message/utils/generate-fields.d.ts.map +1 -1
  828. package/dist/internal/message/utils/generate-fields.js +6 -10
  829. package/dist/internal/message/utils/generate-fields.js.map +1 -1
  830. package/dist/internal/message/utils/index.d.ts +16 -16
  831. package/dist/internal/message/utils/index.d.ts.map +1 -1
  832. package/dist/internal/message/utils/index.js +16 -32
  833. package/dist/internal/message/utils/index.js.map +1 -1
  834. package/dist/internal/message/utils/parse-field.d.ts +1 -1
  835. package/dist/internal/message/utils/parse-field.d.ts.map +1 -1
  836. package/dist/internal/message/utils/parse-field.js +5 -9
  837. package/dist/internal/message/utils/parse-field.js.map +1 -1
  838. package/dist/internal/message/utils/prepare-inbound.d.ts +1 -1
  839. package/dist/internal/message/utils/prepare-inbound.d.ts.map +1 -1
  840. package/dist/internal/message/utils/prepare-inbound.js +11 -15
  841. package/dist/internal/message/utils/prepare-inbound.js.map +1 -1
  842. package/dist/internal/message/utils/prepare-outbound.d.ts +2 -2
  843. package/dist/internal/message/utils/prepare-outbound.d.ts.map +1 -1
  844. package/dist/internal/message/utils/prepare-outbound.js +7 -11
  845. package/dist/internal/message/utils/prepare-outbound.js.map +1 -1
  846. package/dist/internal/message/utils/resolve-default-topic.d.ts +1 -1
  847. package/dist/internal/message/utils/resolve-default-topic.d.ts.map +1 -1
  848. package/dist/internal/message/utils/resolve-default-topic.js +1 -5
  849. package/dist/internal/message/utils/resolve-default-topic.js.map +1 -1
  850. package/dist/internal/message/utils/resolve-delay.d.ts +2 -2
  851. package/dist/internal/message/utils/resolve-delay.d.ts.map +1 -1
  852. package/dist/internal/message/utils/resolve-delay.js +1 -5
  853. package/dist/internal/message/utils/resolve-delay.js.map +1 -1
  854. package/dist/internal/message/utils/resolve-expiry.d.ts +2 -2
  855. package/dist/internal/message/utils/resolve-expiry.d.ts.map +1 -1
  856. package/dist/internal/message/utils/resolve-expiry.js +1 -5
  857. package/dist/internal/message/utils/resolve-expiry.js.map +1 -1
  858. package/dist/internal/message/utils/resolve-priority.d.ts +2 -2
  859. package/dist/internal/message/utils/resolve-priority.d.ts.map +1 -1
  860. package/dist/internal/message/utils/resolve-priority.js +1 -5
  861. package/dist/internal/message/utils/resolve-priority.js.map +1 -1
  862. package/dist/internal/message/utils/resolve-topic.d.ts +2 -2
  863. package/dist/internal/message/utils/resolve-topic.d.ts.map +1 -1
  864. package/dist/internal/message/utils/resolve-topic.js +1 -5
  865. package/dist/internal/message/utils/resolve-topic.js.map +1 -1
  866. package/dist/internal/message/utils/run-hooks.d.ts +5 -4
  867. package/dist/internal/message/utils/run-hooks.d.ts.map +1 -1
  868. package/dist/internal/message/utils/run-hooks.js +6 -11
  869. package/dist/internal/message/utils/run-hooks.js.map +1 -1
  870. package/dist/internal/message/utils/serialize-message.d.ts +2 -2
  871. package/dist/internal/message/utils/serialize-message.d.ts.map +1 -1
  872. package/dist/internal/message/utils/serialize-message.js +6 -10
  873. package/dist/internal/message/utils/serialize-message.js.map +1 -1
  874. package/dist/internal/polyfill-symbol-metadata.d.ts +2 -0
  875. package/dist/internal/polyfill-symbol-metadata.d.ts.map +1 -0
  876. package/dist/internal/polyfill-symbol-metadata.js +5 -0
  877. package/dist/internal/polyfill-symbol-metadata.js.map +1 -0
  878. package/dist/internal/types/consume-strategies.d.ts +1 -1
  879. package/dist/internal/types/consume-strategies.d.ts.map +1 -1
  880. package/dist/internal/types/consume-strategies.js +1 -2
  881. package/dist/internal/types/envelope-overrides.js +1 -2
  882. package/dist/internal/types/index.d.ts +4 -4
  883. package/dist/internal/types/index.d.ts.map +1 -1
  884. package/dist/internal/types/index.js +4 -20
  885. package/dist/internal/types/index.js.map +1 -1
  886. package/dist/internal/types/iris-envelope.d.ts +1 -1
  887. package/dist/internal/types/iris-envelope.d.ts.map +1 -1
  888. package/dist/internal/types/iris-envelope.js +1 -2
  889. package/dist/internal/types/pipeline-stage.js +1 -2
  890. package/dist/internal/utils/build-envelope.d.ts +4 -4
  891. package/dist/internal/utils/build-envelope.d.ts.map +1 -1
  892. package/dist/internal/utils/build-envelope.js +1 -5
  893. package/dist/internal/utils/build-envelope.js.map +1 -1
  894. package/dist/internal/utils/check-pipeline-results.js +1 -5
  895. package/dist/internal/utils/check-pipeline-results.js.map +1 -1
  896. package/dist/internal/utils/consume-message-core.d.ts +5 -5
  897. package/dist/internal/utils/consume-message-core.d.ts.map +1 -1
  898. package/dist/internal/utils/consume-message-core.js +5 -9
  899. package/dist/internal/utils/consume-message-core.js.map +1 -1
  900. package/dist/internal/utils/create-default-envelope.d.ts +2 -2
  901. package/dist/internal/utils/create-default-envelope.d.ts.map +1 -1
  902. package/dist/internal/utils/create-default-envelope.js +1 -5
  903. package/dist/internal/utils/create-default-envelope.js.map +1 -1
  904. package/dist/internal/utils/index.d.ts +6 -6
  905. package/dist/internal/utils/index.d.ts.map +1 -1
  906. package/dist/internal/utils/index.js +6 -22
  907. package/dist/internal/utils/index.js.map +1 -1
  908. package/dist/internal/utils/is-expired.d.ts +1 -1
  909. package/dist/internal/utils/is-expired.d.ts.map +1 -1
  910. package/dist/internal/utils/is-expired.js +1 -5
  911. package/dist/internal/utils/is-expired.js.map +1 -1
  912. package/dist/internal/utils/prepare-publish-batch.d.ts +5 -5
  913. package/dist/internal/utils/prepare-publish-batch.d.ts.map +1 -1
  914. package/dist/internal/utils/prepare-publish-batch.js +13 -17
  915. package/dist/internal/utils/prepare-publish-batch.js.map +1 -1
  916. package/dist/internal/utils/resolve-identifier-value.d.ts +1 -1
  917. package/dist/internal/utils/resolve-identifier-value.d.ts.map +1 -1
  918. package/dist/internal/utils/resolve-identifier-value.js +1 -5
  919. package/dist/internal/utils/resolve-identifier-value.js.map +1 -1
  920. package/dist/internal/utils/validate-encrypted-messages.d.ts +1 -1
  921. package/dist/internal/utils/validate-encrypted-messages.d.ts.map +1 -1
  922. package/dist/internal/utils/validate-encrypted-messages.js +5 -9
  923. package/dist/internal/utils/validate-encrypted-messages.js.map +1 -1
  924. package/dist/mocks/create-mock-iris-session.d.ts +2 -3
  925. package/dist/mocks/create-mock-iris-session.d.ts.map +1 -1
  926. package/dist/mocks/create-mock-iris-session.js +32 -19
  927. package/dist/mocks/create-mock-iris-session.js.map +1 -1
  928. package/dist/mocks/create-mock-iris-source.d.ts +2 -3
  929. package/dist/mocks/create-mock-iris-source.d.ts.map +1 -1
  930. package/dist/mocks/create-mock-iris-source.js +46 -33
  931. package/dist/mocks/create-mock-iris-source.js.map +1 -1
  932. package/dist/mocks/create-mock-message-bus.d.ts +4 -4
  933. package/dist/mocks/create-mock-message-bus.d.ts.map +1 -1
  934. package/dist/mocks/create-mock-message-bus.js +14 -13
  935. package/dist/mocks/create-mock-message-bus.js.map +1 -1
  936. package/dist/mocks/create-mock-publisher.d.ts +4 -4
  937. package/dist/mocks/create-mock-publisher.d.ts.map +1 -1
  938. package/dist/mocks/create-mock-publisher.js +11 -10
  939. package/dist/mocks/create-mock-publisher.js.map +1 -1
  940. package/dist/mocks/create-mock-rpc-client.d.ts +4 -4
  941. package/dist/mocks/create-mock-rpc-client.d.ts.map +1 -1
  942. package/dist/mocks/create-mock-rpc-client.js +8 -7
  943. package/dist/mocks/create-mock-rpc-client.js.map +1 -1
  944. package/dist/mocks/create-mock-worker-queue.d.ts +4 -4
  945. package/dist/mocks/create-mock-worker-queue.d.ts.map +1 -1
  946. package/dist/mocks/create-mock-worker-queue.js +14 -13
  947. package/dist/mocks/create-mock-worker-queue.js.map +1 -1
  948. package/dist/mocks/jest.d.ts +25 -0
  949. package/dist/mocks/jest.d.ts.map +1 -0
  950. package/dist/mocks/jest.js +13 -0
  951. package/dist/mocks/jest.js.map +1 -0
  952. package/dist/mocks/vitest.d.ts +26 -0
  953. package/dist/mocks/vitest.d.ts.map +1 -0
  954. package/dist/mocks/vitest.js +14 -0
  955. package/dist/mocks/vitest.js.map +1 -0
  956. package/dist/types/compression.js +1 -2
  957. package/dist/types/connection.js +1 -2
  958. package/dist/types/consume-envelope.js +1 -2
  959. package/dist/types/dead-letter.d.ts +1 -1
  960. package/dist/types/dead-letter.d.ts.map +1 -1
  961. package/dist/types/dead-letter.js +1 -2
  962. package/dist/types/decorator-options.d.ts +0 -7
  963. package/dist/types/decorator-options.d.ts.map +1 -1
  964. package/dist/types/decorator-options.js +1 -2
  965. package/dist/types/delay.d.ts +1 -1
  966. package/dist/types/delay.d.ts.map +1 -1
  967. package/dist/types/delay.js +1 -2
  968. package/dist/types/envelope.js +1 -2
  969. package/dist/types/events.d.ts +1 -1
  970. package/dist/types/events.d.ts.map +1 -1
  971. package/dist/types/events.js +1 -2
  972. package/dist/types/hook.d.ts +4 -3
  973. package/dist/types/hook.d.ts.map +1 -1
  974. package/dist/types/hook.js +1 -2
  975. package/dist/types/index.d.ts +13 -12
  976. package/dist/types/index.d.ts.map +1 -1
  977. package/dist/types/index.js +12 -27
  978. package/dist/types/index.js.map +1 -1
  979. package/dist/types/iris-hook-meta.d.ts +7 -0
  980. package/dist/types/iris-hook-meta.d.ts.map +1 -0
  981. package/dist/types/iris-hook-meta.js +6 -0
  982. package/dist/types/iris-hook-meta.js.map +1 -0
  983. package/dist/types/message-bus.d.ts +2 -2
  984. package/dist/types/message-bus.d.ts.map +1 -1
  985. package/dist/types/message-bus.js +1 -2
  986. package/dist/types/source-options.d.ts +6 -5
  987. package/dist/types/source-options.d.ts.map +1 -1
  988. package/dist/types/source-options.js +1 -2
  989. package/dist/utils/generate-message.d.ts +6 -0
  990. package/dist/utils/generate-message.d.ts.map +1 -0
  991. package/dist/utils/generate-message.js +15 -0
  992. package/dist/utils/generate-message.js.map +1 -0
  993. package/dist/utils/generate-source.d.ts +7 -0
  994. package/dist/utils/generate-source.d.ts.map +1 -0
  995. package/dist/utils/generate-source.js +38 -0
  996. package/dist/utils/generate-source.js.map +1 -0
  997. package/dist/utils/index.d.ts +5 -0
  998. package/dist/utils/index.d.ts.map +1 -0
  999. package/dist/utils/index.js +5 -0
  1000. package/dist/utils/index.js.map +1 -0
  1001. package/dist/utils/write-message.d.ts +7 -0
  1002. package/dist/utils/write-message.d.ts.map +1 -0
  1003. package/dist/utils/write-message.js +25 -0
  1004. package/dist/utils/write-message.js.map +1 -0
  1005. package/dist/utils/write-source.d.ts +7 -0
  1006. package/dist/utils/write-source.d.ts.map +1 -0
  1007. package/dist/utils/write-source.js +43 -0
  1008. package/dist/utils/write-source.js.map +1 -0
  1009. package/package.json +39 -38
  1010. package/dist/mocks/index.d.ts +0 -7
  1011. package/dist/mocks/index.d.ts.map +0 -1
  1012. package/dist/mocks/index.js +0 -26
  1013. 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;
@@ -341,24 +256,22 @@ class FullExample {
341
256
  @Field("array") tags!: Array<string>;
342
257
  @Field("object") metadata!: Record<string, unknown>;
343
258
 
344
- @Field("string", { nullable: true }) description!: string | null;
345
- @Field("string", { optional: true }) nickname?: string;
346
- @Field("integer", { default: 0 }) retryCount!: number;
347
- @Field("string", { default: () => "generated" }) code!: string;
259
+ @Nullable() @Field("string") description!: string | null;
260
+ @Optional() @Field("string") nickname?: string;
261
+ @Default(0) @Field("integer") retryCount!: number;
262
+ @Default(() => "generated") @Field("string") code!: string;
348
263
  }
349
264
  ```
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,253 +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, options?: FieldDecoratorOptions)`.
653
-
654
- **Options:**
655
-
656
- | Field | Type | Default | Description |
657
- | ----------- | -------------------------------- | ------- | ----------------------------------------- |
658
- | `nullable` | `boolean` | `false` | Allow `null` values |
659
- | `optional` | `boolean` | `false` | Field may be omitted |
660
- | `default` | `value \| (() => value) \| null` | `null` | Default value applied on create |
661
- | `transform` | `MetaTransform \| null` | `null` | Inline serialisation/deserialisation pair |
662
-
663
- ```typescript
664
- @Field("string", { nullable: true })
665
- description!: string | null;
666
-
667
- @Field("string", { optional: true })
668
- nickname?: string;
669
-
670
- @Field("integer", { default: 0 })
671
- retryCount!: number;
672
-
673
- @Field("string", { default: () => "generated" })
674
- code!: string;
675
-
676
- @Field("float", {
677
- transform: {
678
- to: (value: number) => Math.round(value * 100),
679
- from: (raw: number) => raw / 100,
680
- },
681
- })
682
- price!: number;
683
- ```
523
+ **Argument:** `MetaFieldType` (re-exported as `IrisFieldType`).
684
524
 
685
525
  #### `@IdentifierField`
686
526
 
687
- 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.
688
528
 
689
529
  ```typescript
690
- @IdentifierField()
691
- id!: string;
530
+ @IdentifierField() id!: string;
692
531
  ```
693
532
 
694
- Equivalent to `@Field("uuid", { default: () => randomUUID() })`. Non-nullable, non-optional.
695
-
696
- No arguments.
697
-
698
533
  #### `@CorrelationField`
699
534
 
700
- 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.
701
536
 
702
537
  ```typescript
703
- @CorrelationField()
704
- correlationId!: string;
538
+ @CorrelationField() correlationId!: string;
705
539
  ```
706
540
 
707
- Equivalent to `@Field("uuid", { default: () => randomUUID() })`. Non-nullable, non-optional.
708
-
709
- No arguments.
710
-
711
541
  #### `@TimestampField`
712
542
 
713
- 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.
714
544
 
715
545
  ```typescript
716
- @TimestampField()
717
- createdAt!: Date;
546
+ @TimestampField() createdAt!: Date;
718
547
  ```
719
548
 
720
- Equivalent to `@Field("date", { default: () => new Date() })`. Non-nullable, non-optional.
721
-
722
- No arguments.
723
-
724
549
  #### `@MandatoryField`
725
550
 
726
- 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")`.
727
552
 
728
553
  ```typescript
729
- @MandatoryField()
730
- requiresApproval!: boolean;
554
+ @MandatoryField() requiresApproval!: boolean;
731
555
  ```
732
556
 
733
- Equivalent to `@Field("boolean", { default: false })`. Non-nullable, non-optional.
734
-
735
- No arguments.
736
-
737
557
  #### `@PersistentField`
738
558
 
739
- 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")`.
740
560
 
741
561
  ```typescript
742
- @PersistentField()
743
- shouldPersist!: boolean;
562
+ @PersistentField() shouldPersist!: boolean;
744
563
  ```
745
564
 
746
- Equivalent to `@Field("boolean", { default: false })`. Non-nullable, non-optional.
747
-
748
- No arguments.
749
-
750
- ---
751
-
752
565
  ### Field Modifiers
753
566
 
754
- 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.
755
568
 
756
- #### `@Generated`
757
-
758
- Marks a field for automatic value generation on message creation.
569
+ #### `@Nullable` / `@Optional`
759
570
 
760
571
  ```typescript
761
- @Generated("uuid") // UUID v4
762
- @Field("uuid")
763
- traceId!: string;
764
-
765
- @Generated("date") // current timestamp
766
- @Field("date")
767
- processedAt!: Date;
768
-
769
- @Generated("string") // random string (default length)
770
- @Field("string")
771
- token!: string;
772
-
773
- @Generated("string", { length: 12 }) // random string with custom length
774
- @Field("string")
775
- shortCode!: string;
572
+ @Nullable() @Field("string") description!: string | null;
573
+ @Optional() @Field("string") nickname?: string;
574
+ ```
776
575
 
777
- @Generated("integer", { min: 1, max: 1000 })
778
- @Field("integer")
779
- sequenceNumber!: number;
576
+ #### `@Default`
780
577
 
781
- @Generated("float", { min: 0.0, max: 1.0 })
782
- @Field("float")
783
- weight!: number;
578
+ ```typescript
579
+ @Default(0) @Field("integer") retryCount!: number;
580
+ @Default(() => "generated") @Field("string") code!: string;
784
581
  ```
785
582
 
786
- **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.
787
584
 
788
- **Strategies:**
585
+ #### `@Generated`
586
+
587
+ Marks a field for automatic value generation when an instance is created.
789
588
 
790
- | Strategy | Description |
791
- | ----------- | ---------------------------------------- |
792
- | `"uuid"` | Generate UUID v4 |
793
- | `"date"` | Current timestamp |
794
- | `"string"` | Random string with configurable `length` |
795
- | `"integer"` | Random integer in `[min, max]` range |
796
- | `"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
+ ```
797
597
 
798
- **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? }`.
799
599
 
800
600
  #### `@Header`
801
601
 
802
- 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.
803
603
 
804
604
  ```typescript
805
- @Header() // header name = property name ("source")
806
- @Field("string")
807
- source!: string;
808
-
809
- @Header("x-trace-id") // explicit header name
810
- @Field("uuid")
811
- traceId!: string;
605
+ @Header() @Field("string") source!: string;
606
+ @Header("x-trace-id") @Field("uuid") traceId!: string;
812
607
  ```
813
608
 
814
- **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.
815
610
 
816
611
  #### `@Enum`
817
612
 
818
- 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.
819
614
 
820
615
  ```typescript
821
616
  enum OrderStatus {
@@ -824,56 +619,34 @@ enum OrderStatus {
824
619
  Delivered = "delivered",
825
620
  }
826
621
 
827
- @Enum(OrderStatus)
828
- @Field("enum")
829
- status!: OrderStatus;
622
+ @Enum(OrderStatus) @Field("enum") status!: OrderStatus;
830
623
  ```
831
624
 
832
- **Argument:** `Record<string, string | number>` — the enum object or value map.
833
-
834
625
  #### `@Min` / `@Max`
835
626
 
836
- 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.
837
628
 
838
629
  ```typescript
839
- @Min(0)
840
- @Max(100)
841
- @Field("integer")
842
- score!: number;
843
-
844
- @Min(1)
845
- @Max(255)
846
- @Field("string")
847
- name!: string;
630
+ @Min(0) @Max(100) @Field("integer") score!: number;
631
+ @Min(1) @Max(255) @Field("string") name!: string;
848
632
  ```
849
633
 
850
- **Argument:** `number`.
851
-
852
634
  #### `@Schema`
853
635
 
854
- 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.
855
637
 
856
638
  ```typescript
857
639
  import { z } from "zod";
858
640
 
859
- @Schema(z.string().email())
860
- @Field("email")
861
- email!: string;
862
-
863
- @Schema(z.number().int().min(13).max(150))
864
- @Field("integer")
865
- age!: number;
866
-
867
- @Schema(z.string().regex(/^[A-Z]{2,3}$/))
868
- @Field("string")
869
- countryCode!: string;
641
+ @Schema(z.string().email()) @Field("email") email!: string;
642
+ @Schema(z.number().int().min(13).max(150)) @Field("integer") age!: number;
870
643
  ```
871
644
 
872
- **Argument:** `z.ZodType` — any Zod schema.
645
+ **Argument:** `z.ZodType`.
873
646
 
874
647
  #### `@Transform`
875
648
 
876
- 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.
877
650
 
878
651
  ```typescript
879
652
  @Transform({
@@ -882,259 +655,90 @@ Applies a bidirectional transform to a field value. `to` runs during serialisati
882
655
  })
883
656
  @Field("string")
884
657
  tags!: string[];
885
-
886
- @Transform<Date, number>({
887
- to: (date) => date.getTime(),
888
- from: (ms) => new Date(ms),
889
- })
890
- @Field("bigint")
891
- timestamp!: Date;
892
658
  ```
893
659
 
894
- **Options:** `{ to: (value: TFrom) => TTo, from: (raw: TTo) => TFrom }`.
895
-
896
- This is a standalone decorator that uses a separate staging path. For inline transforms, use the `transform` option on `@Field` instead.
897
-
898
- ---
660
+ **Options:** `{ to: (value) => unknown, from: (raw) => unknown }` (the type is re-exported as `IrisTransformFn`).
899
661
 
900
662
  ### Lifecycle Hook Decorators
901
663
 
902
- 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.
903
-
904
- 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.
905
665
 
906
- #### `@OnCreate`
907
-
908
- 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) |
909
676
 
910
677
  ```typescript
911
678
  @OnCreate((msg) => {
912
679
  msg.slug = msg.name.toLowerCase().replace(/\s+/g, "-");
913
680
  })
914
- @Message()
915
- class OrderPlaced {
916
- @Field("string") name!: string;
917
- @Field("string") slug!: string;
918
- }
919
- ```
920
-
921
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
922
-
923
- #### `@OnHydrate`
924
-
925
- 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.
926
-
927
- ```typescript
928
- @OnHydrate((msg) => {
929
- msg.displayName = `${msg.firstName} ${msg.lastName}`;
930
- })
931
- @Message()
932
- class UserEvent {
933
- @Field("string") firstName!: string;
934
- @Field("string") lastName!: string;
935
- @Field("string") displayName!: string;
936
- }
937
- ```
938
-
939
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
940
-
941
- #### `@OnValidate`
942
-
943
- Fires during message validation, after the built-in Zod schema check. Throw to reject the message.
944
-
945
- ```typescript
946
681
  @OnValidate((msg) => {
947
- if (msg.startDate >= msg.endDate) {
948
- throw new Error("startDate must be before endDate");
949
- }
682
+ if (msg.startDate >= msg.endDate) throw new Error("startDate must be before endDate");
950
683
  })
951
- @Message()
952
- class BookingRequest {
953
- @Field("date") startDate!: Date;
954
- @Field("date") endDate!: Date;
955
- }
956
- ```
957
-
958
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
959
-
960
- #### `@BeforePublish` / `@AfterPublish`
961
-
962
- Fire around publish operations. `@BeforePublish` runs before the message is handed to the transport. `@AfterPublish` runs after the transport confirms delivery.
963
-
964
- ```typescript
965
684
  @BeforePublish(async (msg) => {
966
685
  await validateExternalId(msg.externalId);
967
686
  })
968
687
  @AfterPublish(async (msg) => {
969
688
  metrics.increment("messages.published");
970
689
  })
971
- @Message()
972
- class OrderPlaced {
973
- @Field("string") externalId!: string;
974
- }
975
- ```
976
-
977
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
978
-
979
- #### `@BeforeConsume` / `@AfterConsume`
980
-
981
- Fire around consume callback execution. `@BeforeConsume` runs after deserialisation but before the consume callback. `@AfterConsume` runs after the callback completes successfully.
982
-
983
- ```typescript
984
- @BeforeConsume(async (msg, ctx) => {
690
+ @BeforeConsume(async (msg) => {
985
691
  audit.log("consuming", msg);
986
692
  })
987
693
  @AfterConsume(async (msg) => {
988
694
  metrics.increment("messages.consumed");
989
695
  })
990
- @Message()
991
- class OrderPlaced {
992
- /* ... */
993
- }
994
- ```
995
-
996
- **Argument:** `(message: M, context?: C) => void | Promise<void>`.
997
-
998
- #### `@OnConsumeError`
999
-
1000
- Fires when a consume callback throws an error. Receives the error as the **first** argument, followed by the message and context.
1001
-
1002
- ```typescript
1003
696
  @OnConsumeError(async (error, msg) => {
1004
697
  errorTracker.capture(error, { messageId: msg.id });
1005
698
  })
1006
699
  @Message()
1007
- class PaymentCharge {
1008
- @IdentifierField() id!: string;
1009
- @Field("string") chargeId!: string;
1010
- }
1011
- ```
1012
-
1013
- **Argument:** `(error: Error, message: M, context?: C) => void | Promise<void>`.
1014
-
1015
- Note the different signature: `error` is the first parameter, unlike all other hooks where the message comes first.
1016
-
1017
- ---
1018
-
1019
- ### Hook Execution Order
1020
-
1021
- | Phase | Hooks (in order) |
1022
- | ---------- | ------------------------------------------------------------------------------------------------------- |
1023
- | Creation | `@OnCreate` |
1024
- | Validation | `@OnValidate` |
1025
- | Publish | `@BeforePublish` -> subscriber.beforePublish -> transport -> `@AfterPublish` -> subscriber.afterPublish |
1026
- | Consume | `@BeforeConsume` -> subscriber.beforeConsume -> callback -> `@AfterConsume` -> subscriber.afterConsume |
1027
- | Hydration | `@OnHydrate` |
1028
- | Error | `@OnConsumeError` -> subscriber.onConsumeError (replaces AfterConsume steps) |
1029
-
1030
- Full publish + consume lifecycle:
1031
-
1032
- ```
1033
- 1. @BeforePublish hook
1034
- 2. subscriber.beforePublish
1035
- 3. (transport publishes)
1036
- 4. (transport delivers to consumer)
1037
- 5. @BeforeConsume hook
1038
- 6. subscriber.beforeConsume
1039
- 7. callback executes
1040
- 8. @AfterConsume hook
1041
- 9. subscriber.afterConsume
1042
- 10. @AfterPublish hook
1043
- 11. subscriber.afterPublish
1044
- ```
1045
-
1046
- On error at step 7, steps 8-11 are replaced by `@OnConsumeError` and `subscriber.onConsumeError`.
1047
-
1048
- ## Retry and Dead Letter
1049
-
1050
- Configure automatic retry with backoff strategies and dead letter routing for permanently failed messages.
1051
-
1052
- ```typescript
1053
- @Retry({
1054
- maxRetries: 5,
1055
- strategy: "exponential", // "constant" | "linear" | "exponential"
1056
- delay: 1000, // initial delay in ms
1057
- delayMax: 30000, // maximum delay cap
1058
- multiplier: 2, // exponential multiplier
1059
- jitter: true, // add randomness to prevent thundering herd
1060
- })
1061
- @DeadLetter()
1062
- @Message()
1063
- class PaymentCharge {
1064
- @Field("string") chargeId!: string;
1065
- @Field("float") amount!: number;
1066
- }
1067
- ```
1068
-
1069
- ## Dynamic Topics
1070
-
1071
- Route messages to different topics based on their content:
1072
-
1073
- ```typescript
1074
- @Topic((msg: any) => `events.${msg.region}.${msg.type}`)
1075
- @Message()
1076
- class RegionalEvent {
1077
- @Field("string") region!: string;
1078
- @Field("string") type!: string;
1079
- @Field("object") data!: Record<string, unknown>;
700
+ class BookingRequest {
701
+ /* ... */
1080
702
  }
1081
-
1082
- const bus = source.messageBus(RegionalEvent);
1083
- const msg = bus.create({ region: "eu-west", type: "signup", data: {} });
1084
- await bus.publish(msg); // Published to "events.eu-west.signup"
1085
703
  ```
1086
704
 
1087
- ## Encryption and Compression
1088
-
1089
- ```typescript
1090
- import { Encrypted, Compressed } from "@lindorm/iris";
1091
-
1092
- @Encrypted() // Encrypt payload via amphora
1093
- @Compressed("brotli") // Then compress ("gzip" | "deflate" | "brotli")
1094
- @Message()
1095
- class SensitivePayload {
1096
- @Field("string") ssn!: string;
1097
- @Field("string") name!: string;
1098
- }
705
+ ## Hook Execution Order
1099
706
 
1100
- // Source must be configured with an amphora instance
1101
- const source = new IrisSource({
1102
- driver: "rabbit",
1103
- url: "amqp://localhost",
1104
- logger: myLogger,
1105
- amphora: myAmphora,
1106
- messages: [SensitivePayload],
1107
- });
1108
- ```
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) |
1109
715
 
1110
- ## Message Subscribers
716
+ ## Subscribers
1111
717
 
1112
- Observe message lifecycle events across all messages in a source:
718
+ Observe message lifecycle events across every message in a source.
1113
719
 
1114
720
  ```typescript
1115
721
  import type { IMessageSubscriber } from "@lindorm/iris";
1116
722
 
1117
- const auditSubscriber: IMessageSubscriber = {
723
+ const audit: IMessageSubscriber = {
1118
724
  beforePublish: async (msg) => {
1119
- audit.log("publishing", msg);
725
+ auditLog.log("publishing", msg);
1120
726
  },
1121
727
  afterConsume: async (msg) => {
1122
- audit.log("consumed", msg);
728
+ auditLog.log("consumed", msg);
1123
729
  },
1124
- onConsumeError: async (error, msg) => {
1125
- audit.log("consume-failed", { error: error.message, msg });
730
+ onConsumeError: async (err, msg) => {
731
+ auditLog.log("consume-failed", { error: err.message, msg });
1126
732
  },
1127
733
  };
1128
734
 
1129
- source.addSubscriber(auditSubscriber);
1130
-
1131
- // Remove later
1132
- source.removeSubscriber(auditSubscriber);
735
+ source.addSubscriber(audit);
736
+ source.removeSubscriber(audit);
1133
737
  ```
1134
738
 
1135
739
  ## Consume Envelope
1136
740
 
1137
- Every subscribe/consume callback receives the message and an envelope with routing metadata:
741
+ Every subscribe/consume callback receives the message and a `ConsumeEnvelope`:
1138
742
 
1139
743
  ```typescript
1140
744
  import type { ConsumeEnvelope } from "@lindorm/iris";
@@ -1142,128 +746,94 @@ import type { ConsumeEnvelope } from "@lindorm/iris";
1142
746
  await bus.subscribe({
1143
747
  topic: "OrderPlaced",
1144
748
  callback: async (msg: OrderPlaced, envelope: ConsumeEnvelope) => {
1145
- console.log(envelope.topic); // "OrderPlaced"
1146
- console.log(envelope.messageName); // "OrderPlaced"
1147
- console.log(envelope.namespace); // "orders" | null
1148
- console.log(envelope.version); // 1
1149
- console.log(envelope.headers); // Record<string, string>
1150
- console.log(envelope.attempt); // 1 (increments on retry)
1151
- console.log(envelope.correlationId); // string | null
1152
- 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)
1153
757
  },
1154
758
  });
1155
759
  ```
1156
760
 
1157
761
  ## Message Manipulation
1158
762
 
1159
- 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:
1160
764
 
1161
765
  ```typescript
1162
766
  const bus = source.messageBus(OrderPlaced);
1163
767
 
1164
- // Create: new instance with auto-generated fields and defaults
1165
768
  const msg = bus.create({ orderId: "abc-123", total: 59.99 });
1166
-
1167
- // Hydrate: reconstruct from raw data (no auto-generation)
1168
- const hydrated = bus.hydrate({ orderId: "abc-123", total: 59.99, id: "existing-uuid" });
1169
-
1170
- // Copy: deep clone with a fresh identifier
1171
- const copied = bus.copy(msg);
1172
- // copied.orderId === msg.orderId, but copied.id !== msg.id
1173
-
1174
- // Validate: throws IrisValidationError if invalid
1175
- 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
1176
772
  ```
1177
773
 
774
+ `create()` runs default value generation and `@OnCreate` hooks. `hydrate()` reconstructs from raw transport data without regenerating defaults and runs `@OnHydrate` hooks.
775
+
1178
776
  ## Publish Options
1179
777
 
1180
- Override message-level defaults per publish call:
778
+ Per-publish overrides for `publish(message, options)`:
1181
779
 
1182
780
  ```typescript
1183
781
  await bus.publish(msg, {
1184
- delay: 5000, // delay delivery by 5 seconds
1185
- priority: 8, // override @Priority
1186
- 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
1187
785
  key: "partition-key", // routing/partition key
1188
786
  headers: { "x-source": "api" }, // additional headers
1189
787
  });
1190
788
  ```
1191
789
 
1192
- ## Zod Validation
790
+ ## Sessions
1193
791
 
1194
- Use `@Schema()` with Zod for fine-grained field validation:
1195
-
1196
- ```typescript
1197
- import { z } from "zod";
1198
- import { Schema, Field, Message } from "@lindorm/iris";
1199
-
1200
- @Message()
1201
- class UserCreated {
1202
- @Schema(z.string().email())
1203
- @Field("email")
1204
- email!: string;
1205
-
1206
- @Schema(z.number().int().min(13).max(150))
1207
- @Field("integer")
1208
- age!: number;
1209
-
1210
- @Schema(z.string().regex(/^[A-Z]{2,3}$/))
1211
- @Field("string")
1212
- countryCode!: string;
1213
- }
1214
- ```
1215
-
1216
- ## Cloning
1217
-
1218
- 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.
1219
793
 
1220
794
  ```typescript
1221
795
  const source = new IrisSource({
1222
796
  driver: "rabbit",
1223
797
  url: "amqp://localhost",
1224
- logger: mainLogger,
798
+ logger: appLogger,
1225
799
  messages: [OrderPlaced],
1226
800
  });
1227
801
 
1228
802
  await source.connect();
1229
803
  await source.setup();
1230
804
 
1231
- // Clone shares the connection but has its own logger and subscriber registry
1232
- 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
+ });
1233
809
 
1234
810
  const pub = scoped.publisher(OrderPlaced);
1235
- await pub.publish(pub.create({ orderId: "abc-123", total: 59.99 }));
811
+ await pub.publish(pub.create({ orderId: "abc", total: 10 }));
1236
812
  ```
1237
813
 
814
+ A session exposes the same `messageBus`, `publisher`, `workerQueue`, `stream`, `rpcClient`, `rpcServer`, `hasMessage`, `ping`, and `driver` surface as the source.
815
+
1238
816
  ## Driver Configuration
1239
817
 
1240
818
  ### Memory
1241
819
 
1242
820
  ```typescript
1243
- const source = new IrisSource({
1244
- driver: "memory",
1245
- logger,
1246
- messages: [OrderPlaced],
1247
- });
821
+ new IrisSource({ driver: "memory", logger, messages: [OrderPlaced] });
1248
822
  ```
1249
823
 
1250
824
  ### RabbitMQ
1251
825
 
1252
826
  ```typescript
1253
- const source = new IrisSource({
827
+ new IrisSource({
1254
828
  driver: "rabbit",
1255
829
  url: "amqp://localhost",
1256
830
  logger,
1257
831
  messages: [OrderPlaced],
1258
- exchange: "my-exchange", // optional
1259
- prefetch: 10, // optional
832
+ exchange: "my-exchange",
833
+ prefetch: 10,
1260
834
  connection: {
1261
- // optional
1262
835
  heartbeat: 60,
1263
- socketOptions: {
1264
- timeout: 30000,
1265
- keepAlive: true,
1266
- },
836
+ socketOptions: { timeout: 30000, keepAlive: true },
1267
837
  },
1268
838
  });
1269
839
  ```
@@ -1271,30 +841,22 @@ const source = new IrisSource({
1271
841
  ### Kafka
1272
842
 
1273
843
  ```typescript
1274
- const source = new IrisSource({
844
+ new IrisSource({
1275
845
  driver: "kafka",
1276
846
  brokers: ["localhost:9092"],
1277
847
  logger,
1278
848
  messages: [OrderPlaced],
1279
- prefix: "my-app", // optional topic prefix
1280
- prefetch: 100, // optional
1281
- acks: -1, // optional: -1 (all), 0 (none), 1 (leader)
1282
- sessionTimeoutMs: 30000, // optional
849
+ prefix: "my-app",
850
+ prefetch: 100,
851
+ acks: -1, // -1 = all, 0 = none, 1 = leader
852
+ sessionTimeoutMs: 30000,
1283
853
  connection: {
1284
- // optional
1285
854
  clientId: "my-service",
1286
855
  ssl: true,
1287
- sasl: {
1288
- mechanism: "scram-sha-256",
1289
- username: "user",
1290
- password: "pass",
1291
- },
856
+ sasl: { mechanism: "scram-sha-256", username: "user", password: "pass" },
1292
857
  connectionTimeout: 10000,
1293
858
  requestTimeout: 30000,
1294
- retry: {
1295
- retries: 5,
1296
- initialRetryTime: 300,
1297
- },
859
+ retry: { retries: 5, initialRetryTime: 300 },
1298
860
  },
1299
861
  });
1300
862
  ```
@@ -1302,15 +864,14 @@ const source = new IrisSource({
1302
864
  ### NATS
1303
865
 
1304
866
  ```typescript
1305
- const source = new IrisSource({
867
+ new IrisSource({
1306
868
  driver: "nats",
1307
869
  servers: "nats://localhost:4222", // string or Array<string>
1308
870
  logger,
1309
871
  messages: [OrderPlaced],
1310
- prefix: "my-app", // optional
1311
- prefetch: 50, // optional
872
+ prefix: "my-app",
873
+ prefetch: 50,
1312
874
  connection: {
1313
- // optional
1314
875
  user: "nats-user",
1315
876
  pass: "nats-pass",
1316
877
  tls: true,
@@ -1326,17 +887,16 @@ const source = new IrisSource({
1326
887
  ### Redis Streams
1327
888
 
1328
889
  ```typescript
1329
- const source = new IrisSource({
890
+ new IrisSource({
1330
891
  driver: "redis",
1331
892
  url: "redis://localhost:6379",
1332
893
  logger,
1333
894
  messages: [OrderPlaced],
1334
- prefix: "my-app", // optional
1335
- prefetch: 50, // optional
1336
- blockMs: 5000, // optional: XREAD block time
1337
- 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
1338
899
  connection: {
1339
- // optional
1340
900
  host: "redis.internal",
1341
901
  port: 6379,
1342
902
  password: "secret",
@@ -1352,87 +912,83 @@ const source = new IrisSource({
1352
912
 
1353
913
  ## Persistence (Delay and Dead Letter Stores)
1354
914
 
1355
- 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.
1356
916
 
1357
917
  ```typescript
1358
- const source = new IrisSource({
1359
- driver: "rabbit",
1360
- url: "amqp://localhost",
918
+ new IrisSource({
919
+ driver: "kafka",
920
+ brokers: ["localhost:9092"],
1361
921
  logger,
1362
922
  messages: [OrderPlaced],
1363
923
  persistence: {
1364
- // Delay store: holds messages until their scheduled delivery time
1365
- delay: { type: "memory" },
1366
- // or: { type: "redis", url: "redis://localhost:6379" },
1367
- // 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 },
1368
927
 
1369
- // Dead letter store: holds messages that exhausted all retries
1370
928
  deadLetter: { type: "memory" },
1371
- // or: { type: "redis", url: "redis://localhost:6379" },
1372
- // or: { type: "custom", store: myDeadLetterStore },
929
+ // deadLetter: { type: "redis", url: "redis://localhost:6379" },
930
+ // deadLetter: { type: "custom", store: myDeadLetterStore },
1373
931
  },
1374
932
  });
1375
933
  ```
1376
934
 
1377
935
  ### Custom Stores
1378
936
 
1379
- Implement `IDelayStore` and/or `IDeadLetterStore` for custom persistence:
937
+ Implement `IDelayStore` and/or `IDeadLetterStore` for bespoke persistence:
1380
938
 
1381
939
  ```typescript
1382
940
  import type {
1383
- IDelayStore,
1384
- IDeadLetterStore,
1385
- DelayedEntry,
1386
941
  DeadLetterEntry,
942
+ DeadLetterFilterOptions,
943
+ DeadLetterListOptions,
944
+ DelayedEntry,
945
+ IDeadLetterStore,
946
+ IDelayStore,
1387
947
  } from "@lindorm/iris";
1388
948
 
1389
949
  class MyDelayStore implements IDelayStore {
1390
- async schedule(entry: DelayedEntry): Promise<void> {
950
+ schedule = async (entry: DelayedEntry): Promise<void> => {
1391
951
  /* ... */
1392
- }
1393
- async poll(now: number): Promise<Array<DelayedEntry>> {
952
+ };
953
+ poll = async (now: number): Promise<Array<DelayedEntry>> => {
1394
954
  /* ... */
1395
- }
1396
- async cancel(id: string): Promise<boolean> {
955
+ };
956
+ cancel = async (id: string): Promise<boolean> => {
1397
957
  /* ... */
1398
- }
1399
- async size(): Promise<number> {
958
+ };
959
+ size = async (): Promise<number> => {
1400
960
  /* ... */
1401
- }
1402
- async clear(): Promise<void> {
961
+ };
962
+ clear = async (): Promise<void> => {
1403
963
  /* ... */
1404
- }
1405
- async close(): Promise<void> {
964
+ };
965
+ close = async (): Promise<void> => {
1406
966
  /* ... */
1407
- }
967
+ };
1408
968
  }
1409
969
 
1410
970
  class MyDeadLetterStore implements IDeadLetterStore {
1411
- async add(entry: DeadLetterEntry): Promise<void> {
971
+ add = async (entry: DeadLetterEntry): Promise<void> => {
1412
972
  /* ... */
1413
- }
1414
- async list(options?: {
1415
- topic?: string;
1416
- limit?: number;
1417
- offset?: number;
1418
- }): Promise<Array<DeadLetterEntry>> {
973
+ };
974
+ list = async (options?: DeadLetterListOptions): Promise<Array<DeadLetterEntry>> => {
1419
975
  /* ... */
1420
- }
1421
- async get(id: string): Promise<DeadLetterEntry | null> {
976
+ };
977
+ get = async (id: string): Promise<DeadLetterEntry | null> => {
1422
978
  /* ... */
1423
- }
1424
- async remove(id: string): Promise<boolean> {
979
+ };
980
+ remove = async (id: string): Promise<boolean> => {
1425
981
  /* ... */
1426
- }
1427
- async purge(options?: { topic?: string }): Promise<number> {
982
+ };
983
+ purge = async (options?: DeadLetterFilterOptions): Promise<number> => {
1428
984
  /* ... */
1429
- }
1430
- async count(options?: { topic?: string }): Promise<number> {
985
+ };
986
+ count = async (options?: DeadLetterFilterOptions): Promise<number> => {
1431
987
  /* ... */
1432
- }
1433
- async close(): Promise<void> {
988
+ };
989
+ close = async (): Promise<void> => {
1434
990
  /* ... */
1435
- }
991
+ };
1436
992
  }
1437
993
  ```
1438
994
 
@@ -1442,129 +998,106 @@ class MyDeadLetterStore implements IDeadLetterStore {
1442
998
  const state = source.getConnectionState();
1443
999
  // "disconnected" | "connecting" | "connected" | "reconnecting" | "draining"
1444
1000
 
1445
- source.onConnectionStateChange((state) => {
1446
- console.log(`Connection state: ${state}`);
1001
+ source.on("connection:state", (next) => {
1002
+ console.log(`connection state -> ${next}`);
1447
1003
  });
1448
1004
 
1449
- // Health check
1005
+ source.once("connection:state", (next) => {
1006
+ /* ... */
1007
+ });
1008
+ source.off("connection:state", listener);
1009
+
1450
1010
  const healthy = await source.ping();
1451
1011
  ```
1452
1012
 
1453
1013
  ## Testing with Mocks
1454
1014
 
1455
- 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:
1456
1016
 
1457
1017
  ```typescript
1018
+ // Jest
1458
1019
  import {
1459
1020
  createMockIrisSource,
1460
- createMockPublisher,
1021
+ createMockIrisSession,
1461
1022
  createMockMessageBus,
1023
+ createMockPublisher,
1024
+ createMockRpcClient,
1462
1025
  createMockWorkerQueue,
1026
+ } from "@lindorm/iris/mocks/jest";
1027
+
1028
+ // Vitest
1029
+ import {
1030
+ createMockIrisSource,
1031
+ createMockIrisSession,
1032
+ createMockMessageBus,
1033
+ createMockPublisher,
1463
1034
  createMockRpcClient,
1464
- } from "@lindorm/iris/mocks";
1035
+ createMockWorkerQueue,
1036
+ } from "@lindorm/iris/mocks/vitest";
1465
1037
  ```
1466
1038
 
1467
- ### Mock Source
1468
-
1469
1039
  ```typescript
1470
1040
  const source = createMockIrisSource();
1471
1041
 
1472
- // All methods are jest.fn() mocks
1473
- expect(source.connect).not.toHaveBeenCalled();
1474
-
1475
1042
  await source.connect();
1476
1043
  expect(source.connect).toHaveBeenCalledTimes(1);
1477
1044
 
1478
- // Factory methods return mocks by default
1479
1045
  const bus = source.messageBus(OrderPlaced);
1480
1046
  const pub = source.publisher(OrderPlaced);
1481
1047
  const queue = source.workerQueue(OrderPlaced);
1482
1048
  const rpc = source.rpcClient(GetPrice, PriceResponse);
1483
1049
  ```
1484
1050
 
1485
- ### 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()`.
1486
1052
 
1487
1053
  ```typescript
1488
1054
  const pub = createMockPublisher<OrderPlaced>();
1489
-
1490
- const msg = pub.create({ orderId: "abc", total: 10 });
1491
- await pub.publish(msg);
1492
-
1493
- // Inspect published messages
1055
+ await pub.publish(pub.create({ orderId: "abc", total: 10 }));
1494
1056
  expect(pub.published).toHaveLength(1);
1495
-
1496
- // Reset
1497
1057
  pub.clearPublished();
1498
- expect(pub.published).toHaveLength(0);
1499
- ```
1500
-
1501
- ### Mock Message Bus
1502
-
1503
- ```typescript
1504
- const bus = createMockMessageBus<OrderPlaced>();
1505
-
1506
- await bus.publish(bus.create({ orderId: "abc", total: 10 }));
1507
-
1508
- expect(bus.published).toHaveLength(1);
1509
- expect(bus.subscribe).not.toHaveBeenCalled();
1510
-
1511
- bus.clearPublished();
1512
- ```
1513
-
1514
- ### Mock Worker Queue
1515
-
1516
- ```typescript
1517
- const queue = createMockWorkerQueue<OrderPlaced>();
1518
-
1519
- await queue.publish(queue.create({ orderId: "abc", total: 10 }));
1520
-
1521
- expect(queue.published).toHaveLength(1);
1522
- expect(queue.consume).not.toHaveBeenCalled();
1523
-
1524
- queue.clearPublished();
1525
- ```
1526
-
1527
- ### Mock RPC Client
1528
1058
 
1529
- ```typescript
1530
- // Provide a response factory
1531
1059
  const client = createMockRpcClient<GetPrice, PriceResponse>((req) => {
1532
1060
  const res = new PriceResponse();
1533
1061
  res.price = 42.0;
1534
1062
  res.currency = "USD";
1535
1063
  return res;
1536
1064
  });
1065
+ const res = await client.request(new GetPrice());
1066
+ expect(client.requests).toHaveLength(1);
1067
+ client.clearRequests();
1068
+ ```
1537
1069
 
1538
- const req = new GetPrice();
1539
- req.sku = "WIDGET-42";
1070
+ ## CLI
1540
1071
 
1541
- const res = await client.request(req);
1542
- expect(res.price).toBe(42.0);
1543
- expect(client.requests).toHaveLength(1);
1072
+ The package ships an `iris` binary for scaffolding:
1544
1073
 
1545
- client.clearRequests();
1074
+ ```bash
1075
+ npx iris init --driver rabbit --directory ./src/iris
1076
+ npx iris generate message OrderPlaced --directory ./src/iris/messages
1546
1077
  ```
1547
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
+
1548
1081
  ## Error Classes
1549
1082
 
1550
- All errors extend `IrisError`, which extends `LindormError`:
1551
-
1552
- | Error Class | When |
1553
- | ------------------------ | ----------------------------------------- |
1554
- | `IrisError` | Base class for all iris errors |
1555
- | `IrisDriverError` | Driver connection or operation failure |
1556
- | `IrisMetadataError` | Invalid decorator configuration |
1557
- | `IrisNotSupportedError` | Unsupported feature for the active driver |
1558
- | `IrisPublishError` | Message publishing failure |
1559
- | `IrisScannerError` | Message class scanning failure |
1560
- | `IrisSerializationError` | Serialisation or deserialisation failure |
1561
- | `IrisSourceError` | Source setup or configuration error |
1562
- | `IrisTimeoutError` | Operation exceeded timeout |
1563
- | `IrisTransportError` | Transport layer failure |
1564
- | `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 |
1565
1098
 
1566
1099
  ```typescript
1567
- import { IrisTimeoutError, IrisValidationError } from "@lindorm/iris";
1100
+ import { IrisTimeoutError } from "@lindorm/iris";
1568
1101
 
1569
1102
  try {
1570
1103
  await client.request(req, { timeout: 1000 });
@@ -1575,110 +1108,6 @@ try {
1575
1108
  }
1576
1109
  ```
1577
1110
 
1578
- ## Full Example
1579
-
1580
- ```typescript
1581
- import {
1582
- IrisSource,
1583
- Message,
1584
- Namespace,
1585
- Version,
1586
- Field,
1587
- IdentifierField,
1588
- TimestampField,
1589
- Retry,
1590
- DeadLetter,
1591
- } from "@lindorm/iris";
1592
- import type { IMessage, IMessageSubscriber } from "@lindorm/iris";
1593
-
1594
- // --- Define messages ---
1595
-
1596
- @Message()
1597
- @Namespace("payments")
1598
- @Version(1)
1599
- @Retry({ maxRetries: 3, strategy: "exponential", delay: 1000 })
1600
- @DeadLetter()
1601
- class ChargeRequested {
1602
- @IdentifierField() id!: string;
1603
- @TimestampField() createdAt!: Date;
1604
- @Field("string") paymentId!: string;
1605
- @Field("float") amount!: number;
1606
- @Field("string") currency!: string;
1607
- }
1608
-
1609
- @Message()
1610
- @Namespace("payments")
1611
- @Version(1)
1612
- class ChargeCompleted {
1613
- @IdentifierField() id!: string;
1614
- @TimestampField() completedAt!: Date;
1615
- @Field("string") paymentId!: string;
1616
- @Field("boolean") success!: boolean;
1617
- }
1618
-
1619
- // --- Set up source ---
1620
-
1621
- const source = new IrisSource({
1622
- driver: "kafka",
1623
- brokers: ["kafka-1:9092", "kafka-2:9092"],
1624
- logger: appLogger,
1625
- messages: [ChargeRequested, ChargeCompleted],
1626
- persistence: {
1627
- deadLetter: { type: "redis", url: "redis://localhost:6379" },
1628
- },
1629
- });
1630
-
1631
- await source.connect();
1632
- await source.setup();
1633
-
1634
- // --- Observe lifecycle ---
1635
-
1636
- const metricsSubscriber: IMessageSubscriber = {
1637
- afterPublish: async (msg) => metrics.increment("messages.published"),
1638
- afterConsume: async (msg) => metrics.increment("messages.consumed"),
1639
- onConsumeError: async (err) => metrics.increment("messages.errors"),
1640
- };
1641
-
1642
- source.addSubscriber(metricsSubscriber);
1643
-
1644
- // --- Worker: process charges ---
1645
-
1646
- const queue = source.workerQueue(ChargeRequested);
1647
- const completedPub = source.publisher(ChargeCompleted);
1648
-
1649
- await queue.consume("payment-workers", async (msg, envelope) => {
1650
- const result = await paymentGateway.charge(msg.paymentId, msg.amount, msg.currency);
1651
-
1652
- const completed = completedPub.create({
1653
- paymentId: msg.paymentId,
1654
- success: result.ok,
1655
- });
1656
-
1657
- await completedPub.publish(completed);
1658
- });
1659
-
1660
- // --- Notify on completion ---
1661
-
1662
- const completedBus = source.messageBus(ChargeCompleted);
1663
-
1664
- await completedBus.subscribe({
1665
- topic: "ChargeCompleted",
1666
- queue: "notification-service",
1667
- callback: async (msg) => {
1668
- if (msg.success) {
1669
- await emailService.sendReceipt(msg.paymentId);
1670
- }
1671
- },
1672
- });
1673
-
1674
- // --- Shutdown ---
1675
-
1676
- process.on("SIGTERM", async () => {
1677
- await source.drain();
1678
- await source.disconnect();
1679
- });
1680
- ```
1681
-
1682
1111
  ## License
1683
1112
 
1684
1113
  AGPL-3.0-or-later