@warlock.js/herald 4.0.174 → 4.1.2

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 (236) hide show
  1. package/README.md +36 -33
  2. package/cjs/index.cjs +1355 -0
  3. package/cjs/index.cjs.map +1 -0
  4. package/esm/communicators/broker-registry.d.mts +157 -0
  5. package/esm/communicators/broker-registry.d.mts.map +1 -0
  6. package/esm/communicators/broker-registry.mjs +204 -0
  7. package/esm/communicators/broker-registry.mjs.map +1 -0
  8. package/esm/communicators/broker.d.mts +104 -0
  9. package/esm/communicators/broker.d.mts.map +1 -0
  10. package/esm/communicators/broker.mjs +104 -0
  11. package/esm/communicators/broker.mjs.map +1 -0
  12. package/esm/communicators/index.d.mts +2 -0
  13. package/esm/communicators/index.mjs +4 -0
  14. package/esm/contracts/broker-driver.contract.d.mts +200 -0
  15. package/esm/contracts/broker-driver.contract.d.mts.map +1 -0
  16. package/esm/contracts/channel.contract.d.mts +197 -0
  17. package/esm/contracts/channel.contract.d.mts.map +1 -0
  18. package/esm/contracts/index.d.mts +2 -0
  19. package/esm/decorators/consumable.d.mts +17 -0
  20. package/esm/decorators/consumable.d.mts.map +1 -0
  21. package/esm/decorators/consumable.mjs +36 -0
  22. package/esm/decorators/consumable.mjs.map +1 -0
  23. package/esm/decorators/index.d.mts +1 -0
  24. package/esm/decorators/index.mjs +3 -0
  25. package/esm/drivers/index.d.mts +2 -0
  26. package/esm/drivers/index.mjs +5 -0
  27. package/esm/drivers/rabbitmq/index.d.mts +2 -0
  28. package/esm/drivers/rabbitmq/index.mjs +4 -0
  29. package/esm/drivers/rabbitmq/rabbitmq-channel.d.mts +85 -0
  30. package/esm/drivers/rabbitmq/rabbitmq-channel.d.mts.map +1 -0
  31. package/esm/drivers/rabbitmq/rabbitmq-channel.mjs +352 -0
  32. package/esm/drivers/rabbitmq/rabbitmq-channel.mjs.map +1 -0
  33. package/esm/drivers/rabbitmq/rabbitmq-driver.d.mts +130 -0
  34. package/esm/drivers/rabbitmq/rabbitmq-driver.d.mts.map +1 -0
  35. package/esm/drivers/rabbitmq/rabbitmq-driver.mjs +291 -0
  36. package/esm/drivers/rabbitmq/rabbitmq-driver.mjs.map +1 -0
  37. package/esm/index.d.mts +20 -0
  38. package/esm/index.mjs +16 -0
  39. package/esm/message-managers/event-consumer.d.mts +61 -0
  40. package/esm/message-managers/event-consumer.d.mts.map +1 -0
  41. package/esm/message-managers/event-consumer.mjs +63 -0
  42. package/esm/message-managers/event-consumer.mjs.map +1 -0
  43. package/esm/message-managers/event-message.d.mts +87 -0
  44. package/esm/message-managers/event-message.d.mts.map +1 -0
  45. package/esm/message-managers/event-message.mjs +68 -0
  46. package/esm/message-managers/event-message.mjs.map +1 -0
  47. package/esm/message-managers/index.d.mts +3 -0
  48. package/esm/message-managers/index.mjs +4 -0
  49. package/esm/message-managers/prepare-consumer-subscription.mjs +42 -0
  50. package/esm/message-managers/prepare-consumer-subscription.mjs.map +1 -0
  51. package/esm/message-managers/types.d.mts +23 -0
  52. package/esm/message-managers/types.d.mts.map +1 -0
  53. package/esm/types/channel.types.d.mts +23 -0
  54. package/esm/types/channel.types.d.mts.map +1 -0
  55. package/esm/types/connection.types.d.mts +67 -0
  56. package/esm/types/connection.types.d.mts.map +1 -0
  57. package/esm/types/driver.types.d.mts +13 -0
  58. package/esm/types/driver.types.d.mts.map +1 -0
  59. package/esm/types/index.d.mts +7 -0
  60. package/esm/types/message.types.d.mts +37 -0
  61. package/esm/types/message.types.d.mts.map +1 -0
  62. package/esm/types/publish.types.d.mts +16 -0
  63. package/esm/types/publish.types.d.mts.map +1 -0
  64. package/esm/types/registry.types.d.mts +8 -0
  65. package/esm/types/registry.types.d.mts.map +1 -0
  66. package/esm/types/subscribe.types.d.mts +21 -0
  67. package/esm/types/subscribe.types.d.mts.map +1 -0
  68. package/esm/use-case-broadcast.d.mts +41 -0
  69. package/esm/use-case-broadcast.d.mts.map +1 -0
  70. package/esm/use-case-broadcast.mjs +30 -0
  71. package/esm/use-case-broadcast.mjs.map +1 -0
  72. package/esm/utils/{connect-to-broker.d.ts → connect-to-broker.d.mts} +15 -10
  73. package/esm/utils/connect-to-broker.d.mts.map +1 -0
  74. package/esm/utils/connect-to-broker.mjs +168 -0
  75. package/esm/utils/connect-to-broker.mjs.map +1 -0
  76. package/esm/utils/index.d.mts +1 -0
  77. package/esm/utils/index.mjs +3 -0
  78. package/llms-full.txt +581 -0
  79. package/llms.txt +12 -0
  80. package/package.json +46 -46
  81. package/skills/README.md +21 -0
  82. package/skills/consume-message/SKILL.md +217 -0
  83. package/skills/herald-basics/SKILL.md +96 -0
  84. package/skills/publish-message/SKILL.md +172 -0
  85. package/skills/request-and-respond/SKILL.md +74 -0
  86. package/cjs/communicators/broker-registry.d.ts +0 -155
  87. package/cjs/communicators/broker-registry.d.ts.map +0 -1
  88. package/cjs/communicators/broker-registry.js +0 -206
  89. package/cjs/communicators/broker-registry.js.map +0 -1
  90. package/cjs/communicators/broker.d.ts +0 -100
  91. package/cjs/communicators/broker.d.ts.map +0 -1
  92. package/cjs/communicators/broker.js +0 -105
  93. package/cjs/communicators/broker.js.map +0 -1
  94. package/cjs/communicators/index.d.ts +0 -3
  95. package/cjs/communicators/index.d.ts.map +0 -1
  96. package/cjs/contracts/broker-driver.contract.d.ts +0 -196
  97. package/cjs/contracts/broker-driver.contract.d.ts.map +0 -1
  98. package/cjs/contracts/channel.contract.d.ts +0 -191
  99. package/cjs/contracts/channel.contract.d.ts.map +0 -1
  100. package/cjs/contracts/index.d.ts +0 -3
  101. package/cjs/contracts/index.d.ts.map +0 -1
  102. package/cjs/decorators/consumable.d.ts +0 -13
  103. package/cjs/decorators/consumable.d.ts.map +0 -1
  104. package/cjs/decorators/consumable.js +0 -33
  105. package/cjs/decorators/consumable.js.map +0 -1
  106. package/cjs/decorators/index.d.ts +0 -2
  107. package/cjs/decorators/index.d.ts.map +0 -1
  108. package/cjs/drivers/index.d.ts +0 -2
  109. package/cjs/drivers/index.d.ts.map +0 -1
  110. package/cjs/drivers/rabbitmq/index.d.ts +0 -3
  111. package/cjs/drivers/rabbitmq/index.d.ts.map +0 -1
  112. package/cjs/drivers/rabbitmq/rabbitmq-channel.d.ts +0 -79
  113. package/cjs/drivers/rabbitmq/rabbitmq-channel.d.ts.map +0 -1
  114. package/cjs/drivers/rabbitmq/rabbitmq-channel.js +0 -414
  115. package/cjs/drivers/rabbitmq/rabbitmq-channel.js.map +0 -1
  116. package/cjs/drivers/rabbitmq/rabbitmq-driver.d.ts +0 -124
  117. package/cjs/drivers/rabbitmq/rabbitmq-driver.d.ts.map +0 -1
  118. package/cjs/drivers/rabbitmq/rabbitmq-driver.js +0 -347
  119. package/cjs/drivers/rabbitmq/rabbitmq-driver.js.map +0 -1
  120. package/cjs/index.d.ts +0 -47
  121. package/cjs/index.d.ts.map +0 -1
  122. package/cjs/index.js +0 -1
  123. package/cjs/index.js.map +0 -1
  124. package/cjs/message-managers/event-consumer.d.ts +0 -64
  125. package/cjs/message-managers/event-consumer.d.ts.map +0 -1
  126. package/cjs/message-managers/event-consumer.js +0 -71
  127. package/cjs/message-managers/event-consumer.js.map +0 -1
  128. package/cjs/message-managers/event-message.d.ts +0 -90
  129. package/cjs/message-managers/event-message.d.ts.map +0 -1
  130. package/cjs/message-managers/event-message.js +0 -84
  131. package/cjs/message-managers/event-message.js.map +0 -1
  132. package/cjs/message-managers/index.d.ts +0 -4
  133. package/cjs/message-managers/index.d.ts.map +0 -1
  134. package/cjs/message-managers/prepare-consumer-subscription.d.ts +0 -4
  135. package/cjs/message-managers/prepare-consumer-subscription.d.ts.map +0 -1
  136. package/cjs/message-managers/prepare-consumer-subscription.js +0 -40
  137. package/cjs/message-managers/prepare-consumer-subscription.js.map +0 -1
  138. package/cjs/message-managers/types.d.ts +0 -20
  139. package/cjs/message-managers/types.d.ts.map +0 -1
  140. package/cjs/types/channel.types.d.ts +0 -19
  141. package/cjs/types/channel.types.d.ts.map +0 -1
  142. package/cjs/types/connection.types.d.ts +0 -65
  143. package/cjs/types/connection.types.d.ts.map +0 -1
  144. package/cjs/types/driver.types.d.ts +0 -10
  145. package/cjs/types/driver.types.d.ts.map +0 -1
  146. package/cjs/types/index.d.ts +0 -8
  147. package/cjs/types/index.d.ts.map +0 -1
  148. package/cjs/types/message.types.d.ts +0 -34
  149. package/cjs/types/message.types.d.ts.map +0 -1
  150. package/cjs/types/publish.types.d.ts +0 -13
  151. package/cjs/types/publish.types.d.ts.map +0 -1
  152. package/cjs/types/registry.types.d.ts +0 -4
  153. package/cjs/types/registry.types.d.ts.map +0 -1
  154. package/cjs/types/subscribe.types.d.ts +0 -18
  155. package/cjs/types/subscribe.types.d.ts.map +0 -1
  156. package/cjs/utils/connect-to-broker.d.ts +0 -131
  157. package/cjs/utils/connect-to-broker.d.ts.map +0 -1
  158. package/cjs/utils/connect-to-broker.js +0 -171
  159. package/cjs/utils/connect-to-broker.js.map +0 -1
  160. package/cjs/utils/index.d.ts +0 -2
  161. package/cjs/utils/index.d.ts.map +0 -1
  162. package/esm/communicators/broker-registry.d.ts +0 -155
  163. package/esm/communicators/broker-registry.d.ts.map +0 -1
  164. package/esm/communicators/broker-registry.js +0 -206
  165. package/esm/communicators/broker-registry.js.map +0 -1
  166. package/esm/communicators/broker.d.ts +0 -100
  167. package/esm/communicators/broker.d.ts.map +0 -1
  168. package/esm/communicators/broker.js +0 -105
  169. package/esm/communicators/broker.js.map +0 -1
  170. package/esm/communicators/index.d.ts +0 -3
  171. package/esm/communicators/index.d.ts.map +0 -1
  172. package/esm/contracts/broker-driver.contract.d.ts +0 -196
  173. package/esm/contracts/broker-driver.contract.d.ts.map +0 -1
  174. package/esm/contracts/channel.contract.d.ts +0 -191
  175. package/esm/contracts/channel.contract.d.ts.map +0 -1
  176. package/esm/contracts/index.d.ts +0 -3
  177. package/esm/contracts/index.d.ts.map +0 -1
  178. package/esm/decorators/consumable.d.ts +0 -13
  179. package/esm/decorators/consumable.d.ts.map +0 -1
  180. package/esm/decorators/consumable.js +0 -33
  181. package/esm/decorators/consumable.js.map +0 -1
  182. package/esm/decorators/index.d.ts +0 -2
  183. package/esm/decorators/index.d.ts.map +0 -1
  184. package/esm/drivers/index.d.ts +0 -2
  185. package/esm/drivers/index.d.ts.map +0 -1
  186. package/esm/drivers/rabbitmq/index.d.ts +0 -3
  187. package/esm/drivers/rabbitmq/index.d.ts.map +0 -1
  188. package/esm/drivers/rabbitmq/rabbitmq-channel.d.ts +0 -79
  189. package/esm/drivers/rabbitmq/rabbitmq-channel.d.ts.map +0 -1
  190. package/esm/drivers/rabbitmq/rabbitmq-channel.js +0 -414
  191. package/esm/drivers/rabbitmq/rabbitmq-channel.js.map +0 -1
  192. package/esm/drivers/rabbitmq/rabbitmq-driver.d.ts +0 -124
  193. package/esm/drivers/rabbitmq/rabbitmq-driver.d.ts.map +0 -1
  194. package/esm/drivers/rabbitmq/rabbitmq-driver.js +0 -347
  195. package/esm/drivers/rabbitmq/rabbitmq-driver.js.map +0 -1
  196. package/esm/index.d.ts +0 -47
  197. package/esm/index.d.ts.map +0 -1
  198. package/esm/index.js +0 -1
  199. package/esm/index.js.map +0 -1
  200. package/esm/message-managers/event-consumer.d.ts +0 -64
  201. package/esm/message-managers/event-consumer.d.ts.map +0 -1
  202. package/esm/message-managers/event-consumer.js +0 -71
  203. package/esm/message-managers/event-consumer.js.map +0 -1
  204. package/esm/message-managers/event-message.d.ts +0 -90
  205. package/esm/message-managers/event-message.d.ts.map +0 -1
  206. package/esm/message-managers/event-message.js +0 -84
  207. package/esm/message-managers/event-message.js.map +0 -1
  208. package/esm/message-managers/index.d.ts +0 -4
  209. package/esm/message-managers/index.d.ts.map +0 -1
  210. package/esm/message-managers/prepare-consumer-subscription.d.ts +0 -4
  211. package/esm/message-managers/prepare-consumer-subscription.d.ts.map +0 -1
  212. package/esm/message-managers/prepare-consumer-subscription.js +0 -40
  213. package/esm/message-managers/prepare-consumer-subscription.js.map +0 -1
  214. package/esm/message-managers/types.d.ts +0 -20
  215. package/esm/message-managers/types.d.ts.map +0 -1
  216. package/esm/types/channel.types.d.ts +0 -19
  217. package/esm/types/channel.types.d.ts.map +0 -1
  218. package/esm/types/connection.types.d.ts +0 -65
  219. package/esm/types/connection.types.d.ts.map +0 -1
  220. package/esm/types/driver.types.d.ts +0 -10
  221. package/esm/types/driver.types.d.ts.map +0 -1
  222. package/esm/types/index.d.ts +0 -8
  223. package/esm/types/index.d.ts.map +0 -1
  224. package/esm/types/message.types.d.ts +0 -34
  225. package/esm/types/message.types.d.ts.map +0 -1
  226. package/esm/types/publish.types.d.ts +0 -13
  227. package/esm/types/publish.types.d.ts.map +0 -1
  228. package/esm/types/registry.types.d.ts +0 -4
  229. package/esm/types/registry.types.d.ts.map +0 -1
  230. package/esm/types/subscribe.types.d.ts +0 -18
  231. package/esm/types/subscribe.types.d.ts.map +0 -1
  232. package/esm/utils/connect-to-broker.d.ts.map +0 -1
  233. package/esm/utils/connect-to-broker.js +0 -171
  234. package/esm/utils/connect-to-broker.js.map +0 -1
  235. package/esm/utils/index.d.ts +0 -2
  236. package/esm/utils/index.d.ts.map +0 -1
@@ -1,347 +0,0 @@
1
- 'use strict';var node_events=require('node:events'),prepareConsumerSubscription=require('../../message-managers/prepare-consumer-subscription.js'),rabbitmqChannel=require('./rabbitmq-channel.js');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}// ============================================================
2
- // Lazy-loaded amqplib Module
3
- // ============================================================
4
- /**
5
- * Cached amqplib module (loaded once, reused)
6
- */
7
- let amqplibModule;
8
- /**
9
- * Module availability flag
10
- */
11
- let isModuleExists = null;
12
- /**
13
- * Installation instructions for amqplib
14
- */
15
- const AMQPLIB_INSTALL_INSTRUCTIONS = `
16
- RabbitMQ driver requires the amqplib package.
17
- Install it with:
18
-
19
- npx warlock add herald --driver=rabbitmq
20
-
21
- Or manually:
22
-
23
- npm install amqplib
24
- pnpm add amqplib
25
- yarn add amqplib
26
- `.trim();
27
- /**
28
- * Load amqplib module
29
- */
30
- async function loadAmqplibModule() {
31
- try {
32
- amqplibModule = await Promise.resolve().then(function(){return /*#__PURE__*/_interopNamespace(require('amqplib'))});
33
- isModuleExists = true;
34
- }
35
- catch {
36
- isModuleExists = false;
37
- }
38
- }
39
- // Kick off eager loading immediately
40
- loadAmqplibModule();
41
- // ============================================================
42
- // RabbitMQ Driver
43
- // ============================================================
44
- /**
45
- * RabbitMQ Driver
46
- *
47
- * Implementation of BrokerDriverContract for RabbitMQ/AMQP.
48
- *
49
- * **Important:** This driver requires the `amqplib` package to be installed.
50
- * Install it with: `npx warlock add herald --driver=rabbitmq` or `npm install amqplib`
51
- *
52
- * @example
53
- * ```typescript
54
- * const driver = new RabbitMQDriver({
55
- * driver: "rabbitmq",
56
- * host: "localhost",
57
- * port: 5672,
58
- * username: "guest",
59
- * password: "guest",
60
- * });
61
- *
62
- * await driver.connect();
63
- * const channel = driver.channel("user.created");
64
- * ```
65
- */
66
- class RabbitMQDriver {
67
- name = "rabbitmq";
68
- consumers = [];
69
- options;
70
- events = new node_events.EventEmitter();
71
- channels = new Map();
72
- connection = null;
73
- amqpChannel = null;
74
- _isConnected = false;
75
- /**
76
- * Create a new RabbitMQ driver
77
- *
78
- * @param options - RabbitMQ connection options
79
- */
80
- constructor(options) {
81
- this.options = options;
82
- }
83
- /**
84
- * Whether connected to RabbitMQ
85
- */
86
- get isConnected() {
87
- return this._isConnected;
88
- }
89
- /**
90
- * Subscribe the given consumer class to the driver
91
- *
92
- * @param consumer - Consumer class to subscribe
93
- *
94
- * @example
95
- * ```typescript
96
- * driver.subscribe(UserUpdatedConsumer);
97
- * ```
98
- */
99
- subscribe(Consumer) {
100
- if (this.isConnected) {
101
- this.channel(Consumer.eventName).subscribe(prepareConsumerSubscription.prepareConsumerSubscription(Consumer, (error, eventName) => {
102
- this.events.emit("error", error, eventName);
103
- }), {
104
- consumerId: Consumer.consumerId,
105
- });
106
- }
107
- else {
108
- this.consumers.push(Consumer);
109
- }
110
- return () => {
111
- this.unsubscribe(Consumer);
112
- };
113
- }
114
- /**
115
- * Unsubscribe the given consumer
116
- */
117
- unsubscribe(Consumer) {
118
- if (this.isConnected) {
119
- this.channel(Consumer.eventName).unsubscribeById(Consumer.consumerId);
120
- }
121
- const index = this.consumers.indexOf(Consumer);
122
- if (index > -1) {
123
- this.consumers.splice(index, 1);
124
- }
125
- }
126
- /**
127
- * Publish the given event message.
128
- * Auto-creates the channel if it hasn't been accessed before.
129
- */
130
- publish(event) {
131
- this.channel(event.eventName).publish(event.serialize());
132
- }
133
- /**
134
- * Connect to RabbitMQ
135
- */
136
- async connect() {
137
- // Check if amqplib is installed
138
- if (isModuleExists === false) {
139
- throw new Error(`amqplib is not installed.\n\n${AMQPLIB_INSTALL_INSTRUCTIONS}`);
140
- }
141
- // Wait for module to load if still loading
142
- if (isModuleExists === null) {
143
- await loadAmqplibModule();
144
- if (!isModuleExists) {
145
- throw new Error(`amqplib is not installed.\n\n${AMQPLIB_INSTALL_INSTRUCTIONS}`);
146
- }
147
- }
148
- try {
149
- // Build connection URL
150
- const url = this.buildConnectionUrl();
151
- // Build connection options merging our options with native client options
152
- const connectOptions = {
153
- heartbeat: this.options.heartbeat ?? 60,
154
- timeout: this.options.connectionTimeout,
155
- // Merge native amqplib client options
156
- ...this.options.clientOptions,
157
- };
158
- // Connect using cached module
159
- this.connection = await amqplibModule.connect(url, connectOptions);
160
- // Create channel
161
- this.amqpChannel = await this.connection.createChannel();
162
- // Set prefetch if specified
163
- if (this.options.prefetch) {
164
- await this.amqpChannel.prefetch(this.options.prefetch);
165
- }
166
- this._isConnected = true;
167
- this.events.emit("connected");
168
- for (const consumer of this.consumers) {
169
- this.subscribe(consumer);
170
- }
171
- this.consumers.length = 0;
172
- // Handle connection close
173
- this.connection.on("close", () => {
174
- this._isConnected = false;
175
- this.events.emit("disconnected");
176
- if (this.options.reconnect !== false) {
177
- this.handleReconnect();
178
- }
179
- });
180
- // Handle errors
181
- this.connection.on("error", (error) => {
182
- this.events.emit("error", error);
183
- });
184
- }
185
- catch (error) {
186
- this._isConnected = false;
187
- throw new Error(`Failed to connect to RabbitMQ: ${error instanceof Error ? error.message : String(error)}`);
188
- }
189
- }
190
- /**
191
- * Build connection URL from options
192
- */
193
- buildConnectionUrl() {
194
- if (this.options.uri) {
195
- return this.options.uri;
196
- }
197
- const protocol = "amqp";
198
- const host = this.options.host ?? "localhost";
199
- const port = this.options.port ?? 5672;
200
- const vhost = this.options.vhost ?? "/";
201
- const username = this.options.username ?? "guest";
202
- const password = this.options.password ?? "guest";
203
- const encodedVhost = encodeURIComponent(vhost);
204
- return `${protocol}://${username}:${password}@${host}:${port}/${encodedVhost}`;
205
- }
206
- /**
207
- * Handle reconnection
208
- */
209
- async handleReconnect() {
210
- const delay = this.options.reconnectDelay ?? 5000;
211
- let attempt = 0;
212
- const tryReconnect = async () => {
213
- attempt++;
214
- this.events.emit("reconnecting", attempt);
215
- try {
216
- await this.connect();
217
- }
218
- catch {
219
- setTimeout(tryReconnect, delay);
220
- }
221
- };
222
- setTimeout(tryReconnect, delay);
223
- }
224
- /**
225
- * Disconnect from RabbitMQ
226
- */
227
- async disconnect() {
228
- if (this.amqpChannel) {
229
- try {
230
- await this.amqpChannel.close();
231
- }
232
- catch {
233
- // Ignore close errors
234
- }
235
- this.amqpChannel = null;
236
- }
237
- if (this.connection) {
238
- try {
239
- await this.connection.close();
240
- }
241
- catch {
242
- // Ignore close errors
243
- }
244
- this.connection = null;
245
- }
246
- this._isConnected = false;
247
- this.events.emit("disconnected");
248
- }
249
- /**
250
- * Register event listener
251
- */
252
- on(event, listener) {
253
- this.events.on(event, listener);
254
- }
255
- /**
256
- * Remove event listener
257
- */
258
- off(event, listener) {
259
- this.events.off(event, listener);
260
- }
261
- /**
262
- * Get or create a channel
263
- */
264
- channel(name, options) {
265
- // Check cache
266
- const existing = this.channels.get(name);
267
- if (existing) {
268
- return existing;
269
- }
270
- // Create new channel
271
- const channel = new rabbitmqChannel.RabbitMQChannel(name, this.amqpChannel, options);
272
- this.channels.set(name, channel);
273
- return channel;
274
- }
275
- /**
276
- * Start consuming messages
277
- */
278
- async startConsuming() {
279
- // Channels start consuming when subscribe() is called
280
- // This method is for batch start if needed
281
- }
282
- /**
283
- * Stop consuming messages from all subscribed channels.
284
- * Gracefully cancels all active consumers.
285
- */
286
- async stopConsuming() {
287
- const stops = Array.from(this.channels.values()).map(channel => channel.stopConsuming());
288
- await Promise.all(stops);
289
- }
290
- /**
291
- * Health check
292
- */
293
- async healthCheck() {
294
- if (!this._isConnected || !this.connection) {
295
- return {
296
- healthy: false,
297
- error: "Not connected to RabbitMQ",
298
- };
299
- }
300
- const start = Date.now();
301
- try {
302
- // Simple check - verify channel is open
303
- await this.amqpChannel.checkQueue("amq.rabbitmq.reply-to").catch(() => {
304
- // Queue might not exist, but if we get here, connection is alive
305
- });
306
- return {
307
- healthy: true,
308
- latency: Date.now() - start,
309
- };
310
- }
311
- catch (error) {
312
- return {
313
- healthy: false,
314
- error: error instanceof Error ? error.message : String(error),
315
- latency: Date.now() - start,
316
- };
317
- }
318
- }
319
- /**
320
- * Get all channel names
321
- */
322
- getChannelNames() {
323
- return Array.from(this.channels.keys());
324
- }
325
- /**
326
- * Close a specific channel
327
- */
328
- async closeChannel(name) {
329
- const channel = this.channels.get(name);
330
- if (channel) {
331
- await channel.delete();
332
- this.channels.delete(name);
333
- }
334
- }
335
- /**
336
- * Get the raw AMQP channel (for advanced use)
337
- */
338
- getRawChannel() {
339
- return this.amqpChannel;
340
- }
341
- /**
342
- * Get the raw connection (for advanced use)
343
- */
344
- getRawConnection() {
345
- return this.connection;
346
- }
347
- }exports.RabbitMQDriver=RabbitMQDriver;//# sourceMappingURL=rabbitmq-driver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rabbitmq-driver.js","sources":["../../../src/drivers/rabbitmq/rabbitmq-driver.ts"],"sourcesContent":[null],"names":["EventEmitter","prepareConsumerSubscription","RabbitMQChannel"],"mappings":"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"}
package/cjs/index.d.ts DELETED
@@ -1,47 +0,0 @@
1
- /**
2
- * Warlock Herald - Message Bus
3
- *
4
- * A powerful, type-safe message bus library for RabbitMQ, Kafka, and more.
5
- *
6
- * Package: @warlock.js/herald
7
- *
8
- * Let heralds carry your messages across services!
9
- *
10
- * Structure:
11
- * - contracts/ - Core interfaces
12
- * - brokers/ - Broker and registry
13
- * - drivers/ - RabbitMQ, Kafka implementations
14
- * - types/ - TypeScript type definitions
15
- * - utils/ - Connection helpers
16
- *
17
- * @example
18
- * ```typescript
19
- * import { connectToBroker, herald } from "@warlock.js/herald";
20
- *
21
- * // Connect to RabbitMQ
22
- * await connectToBroker({
23
- * driver: "rabbitmq",
24
- * host: "localhost",
25
- * port: 5672,
26
- * });
27
- *
28
- * // Publish a message
29
- * await herald().channel("user.created").publish({ userId: 1 });
30
- *
31
- * // Subscribe to messages
32
- * herald()
33
- * .channel<UserPayload>("user.created")
34
- * .subscribe(async (message, ctx) => {
35
- * console.log(message.payload);
36
- * await ctx.ack();
37
- * });
38
- * ```
39
- */
40
- export * from "./types/index";
41
- export * from "./contracts";
42
- export * from "./communicators";
43
- export * from "./drivers";
44
- export * from "./utils";
45
- export * from "./message-managers";
46
- export * from "./decorators";
47
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,cAAc,oBAAoB,CAAC;AAGnC,cAAc,cAAc,CAAC"}
package/cjs/index.js DELETED
@@ -1 +0,0 @@
1
- 'use strict';var broker=require('./communicators/broker.js'),brokerRegistry=require('./communicators/broker-registry.js'),rabbitmqDriver=require('./drivers/rabbitmq/rabbitmq-driver.js'),rabbitmqChannel=require('./drivers/rabbitmq/rabbitmq-channel.js'),connectToBroker=require('./utils/connect-to-broker.js'),eventConsumer=require('./message-managers/event-consumer.js'),eventMessage=require('./message-managers/event-message.js'),consumable=require('./decorators/consumable.js');exports.Broker=broker.Broker;exports.MissingBrokerError=brokerRegistry.MissingBrokerError;exports.brokerRegistry=brokerRegistry.brokerRegistry;exports.RabbitMQDriver=rabbitmqDriver.RabbitMQDriver;exports.RabbitMQChannel=rabbitmqChannel.RabbitMQChannel;exports.connectToBroker=connectToBroker.connectToBroker;exports.herald=connectToBroker.herald;exports.heraldChannel=connectToBroker.heraldChannel;exports.publishEvent=connectToBroker.publishEvent;exports.subscribeConsumer=connectToBroker.subscribeConsumer;exports.EventConsumer=eventConsumer.EventConsumer;exports.defineConsumer=eventConsumer.defineConsumer;exports.EventMessage=eventMessage.EventMessage;exports.defineEvent=eventMessage.defineEvent;exports.Consumable=consumable.Consumable;exports.pendingSubscribers=consumable.pendingSubscribers;//# sourceMappingURL=index.js.map
package/cjs/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,64 +0,0 @@
1
- /**
2
- * This class is used to be part of the Herald Event Consumer Manager.
3
- * It should be used to consume events from Either RabbitMQ or Kafka through Herald
4
- *
5
- * It's highly recommended using it instead of declaring manual channel namd and subscribing to event
6
- */
7
- import { ValidationResult, type ObjectValidator } from "@warlock.js/seal";
8
- import { ConsumedEventMessage, EventConsumerClass } from "./types";
9
- export declare abstract class EventConsumer<Payload = Record<string, any>> {
10
- /**
11
- * Event name
12
- */
13
- static eventName: string;
14
- private static _consumerId?;
15
- static get consumerId(): string;
16
- get eventName(): string;
17
- /**
18
- * Min version accepted to be consumed by this class
19
- */
20
- static minVersion?: number;
21
- /**
22
- * Max version accepted to be consumed by this class
23
- */
24
- static maxVersion?: number;
25
- /**
26
- * Payload validation to auto reject the received event before accessing it in the handle method
27
- */
28
- schema?: ObjectValidator;
29
- /**
30
- * The method that will be called when the event is received
31
- */
32
- abstract handle(payload: Payload, event: ConsumedEventMessage): Promise<void>;
33
- /**
34
- * Determine whether this is accepted version to be used by this consumer
35
- */
36
- static isAcceptedVersion(version: number): boolean;
37
- /**
38
- * Validate the given data
39
- */
40
- validate(data: Payload): Promise<ValidationResult | void>;
41
- }
42
- /**
43
- * Define Consumer options
44
- */
45
- type ConsumerOptions<Payload> = {
46
- /**
47
- * Payload validation to auto reject the received event before accessing it in the handle method
48
- */
49
- schema?: ObjectValidator;
50
- /**
51
- * Handle data
52
- */
53
- handle: (payload: Payload, event: ConsumedEventMessage) => Promise<void>;
54
- /**
55
- * Validate the payload before executing `handle`
56
- */
57
- validate?: (payload: Payload) => Promise<ValidationResult | boolean>;
58
- };
59
- /**
60
- * A shorthand to define an event consumer without declaring an entire class
61
- */
62
- export declare function defineConsumer<Payload = Record<string, any>>(eventName: string, options: ConsumerOptions<Payload>): EventConsumerClass;
63
- export {};
64
- //# sourceMappingURL=event-consumer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-consumer.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEnE,8BAAsB,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC/D;;OAEG;IACH,OAAc,SAAS,EAAE,MAAM,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAS;IAEpC,WAAkB,UAAU,IAAI,MAAM,CAKrC;IAED,IAAW,SAAS,WAEnB;IAED;;OAEG;IACH,OAAc,UAAU,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,OAAc,UAAU,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACI,MAAM,CAAC,EAAE,eAAe,CAAC;IAEhC;;OAEG;aACa,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpF;;OAEG;WACW,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD;;OAEG;IACU,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAKvE;AAED;;GAEG;AACH,KAAK,eAAe,CAAC,OAAO,IAAI;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC;CACtE,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,GAChC,kBAAkB,CAkBpB"}
@@ -1,71 +0,0 @@
1
- 'use strict';var seal=require('@warlock.js/seal'),crypto=require('crypto'),consumable=require('../decorators/consumable.js');/**
2
- * This class is used to be part of the Herald Event Consumer Manager.
3
- * It should be used to consume events from Either RabbitMQ or Kafka through Herald
4
- *
5
- * It's highly recommended using it instead of declaring manual channel namd and subscribing to event
6
- */
7
- class EventConsumer {
8
- /**
9
- * Event name
10
- */
11
- static eventName;
12
- static _consumerId;
13
- static get consumerId() {
14
- if (!this._consumerId) {
15
- this._consumerId = crypto.randomUUID();
16
- }
17
- return this._consumerId;
18
- }
19
- get eventName() {
20
- return this.constructor.eventName;
21
- }
22
- /**
23
- * Min version accepted to be consumed by this class
24
- */
25
- static minVersion;
26
- /**
27
- * Max version accepted to be consumed by this class
28
- */
29
- static maxVersion;
30
- /**
31
- * Payload validation to auto reject the received event before accessing it in the handle method
32
- */
33
- schema;
34
- /**
35
- * Determine whether this is accepted version to be used by this consumer
36
- */
37
- static isAcceptedVersion(version) {
38
- if (this.minVersion && version < this.minVersion)
39
- return false;
40
- if (this.maxVersion && version > this.maxVersion)
41
- return false;
42
- return true;
43
- }
44
- /**
45
- * Validate the given data
46
- */
47
- async validate(data) {
48
- if (!this.schema)
49
- return;
50
- return await seal.v.validate(this.schema, data);
51
- }
52
- }
53
- /**
54
- * A shorthand to define an event consumer without declaring an entire class
55
- */
56
- function defineConsumer(eventName, options) {
57
- const Class = class AnnouncedConsumer extends EventConsumer {
58
- static eventName = eventName;
59
- schema = options.schema;
60
- async handle(payload, event) {
61
- if (options.validate) {
62
- const result = await options.validate(payload);
63
- if (!result || !result.isValid)
64
- return;
65
- }
66
- return options.handle(payload, event);
67
- }
68
- };
69
- consumable.Consumable()(Class);
70
- return Class;
71
- }exports.EventConsumer=EventConsumer;exports.defineConsumer=defineConsumer;//# sourceMappingURL=event-consumer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-consumer.js","sources":["../../src/message-managers/event-consumer.ts"],"sourcesContent":[null],"names":["randomUUID","v","Consumable"],"mappings":"6HAAA;;;;;AAKG;MAMmB,aAAa,CAAA;AACjC;;AAEG;IACI,OAAO,SAAS,CAAS;IAExB,OAAO,WAAW,CAAU;AAE7B,IAAA,WAAW,UAAU,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,GAAGA,iBAAU,EAAE,CAAC;AACjC,SAAA;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AAED,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAQ,IAAI,CAAC,WAAoC,CAAC,SAAS,CAAC;KAC7D;AAED;;AAEG;IACI,OAAO,UAAU,CAAU;AAElC;;AAEG;IACI,OAAO,UAAU,CAAU;AAElC;;AAEG;AACI,IAAA,MAAM,CAAmB;AAOhC;;AAEG;IACI,OAAO,iBAAiB,CAAC,OAAe,EAAA;QAC7C,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK,CAAC;AAE/D,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,MAAM,QAAQ,CAAC,IAAa,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,OAAO,MAAMC,MAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC5C;AACF,CAAA;AAoBD;;AAEG;AACa,SAAA,cAAc,CAC5B,SAAiB,EACjB,OAAiC,EAAA;AAEjC,IAAA,MAAM,KAAK,GAAG,MAAM,iBAAkB,SAAQ,aAAsB,CAAA;AAC3D,QAAA,OAAO,SAAS,GAAG,SAAS,CAAC;AAC7B,QAAA,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAExB,QAAA,MAAM,MAAM,CAAC,OAAgB,EAAE,KAA2B,EAAA;YAC/D,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,MAAM,IAAI,CAAE,MAA2B,CAAC,OAAO;oBAAE,OAAO;AAC9D,aAAA;YAED,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACvC;KACF,CAAC;AAEF,IAAAC,qBAAU,EAAE,CAAC,KAA2B,CAAC,CAAC;AAE1C,IAAA,OAAO,KAA2B,CAAC;AACrC"}
@@ -1,90 +0,0 @@
1
- /**
2
- * This class is used to be part of the Herald Event Message Manager.
3
- * It should be used to trigger events to Either RabbitMQ or Kafka through Herald
4
- *
5
- * It's highly recommended using it instead of declaring manual channel namd and publishing data
6
- */
7
- import { GenericObject } from "@mongez/reinforcements";
8
- import { type ObjectValidator } from "@warlock.js/seal";
9
- export declare abstract class EventMessage<TPayload = Record<string, any>> {
10
- protected data?: TPayload;
11
- /**
12
- * Event Name
13
- */
14
- abstract eventName: string;
15
- /**
16
- * Event version
17
- */
18
- version?: number;
19
- /**
20
- * Additional metadata (if any)
21
- */
22
- metadata?: Record<string, any>;
23
- /**
24
- * Event Message id
25
- */
26
- messageId?: string;
27
- /**
28
- * Schema of payload that will be used to determine whether this event should be published
29
- */
30
- schema?: ObjectValidator;
31
- /**
32
- * Data that will be sent with the event (Payload)
33
- */
34
- toJSON(): TPayload;
35
- constructor(data?: TPayload);
36
- /**
37
- * Serialize the event to be ready for publishing.
38
- * Delegates payload resolution to toJSON() — override toJSON() to customize.
39
- *
40
- * @throws Error if toJSON() throws (e.g. no data provided)
41
- */
42
- serialize(): {
43
- payload: TPayload;
44
- metadata: Record<string, any>;
45
- messageId: string;
46
- eventName: string;
47
- version: number;
48
- occurredAt: Date;
49
- __through: string;
50
- };
51
- }
52
- type EventOptions<T> = {
53
- /**
54
- * Shapen the data that will be used
55
- */
56
- toJSON?: (data: T) => GenericObject;
57
- /**
58
- * Validation schema
59
- */
60
- schema?: ObjectValidator;
61
- };
62
- /**
63
- * Represents an EventMessage class constructor.
64
- *
65
- * @template TIncoming - The type of data accepted by the constructor
66
- * @template TOutgoing - The type of data returned by toJSON() (defaults to TIncoming)
67
- */
68
- type EventMessageClass<TIncoming = Record<string, any>, TOutgoing = TIncoming> = new (data?: TIncoming) => EventMessage<TOutgoing>;
69
- /**
70
- * A shorthand to define an event without declaring an entire class.
71
- *
72
- * This factory function creates an EventMessage subclass that transforms
73
- * input data (IncomingData) into a different output format (OutgoingData).
74
- *
75
- * @template IncomingData - The type of data passed to the constructor
76
- * @template OutgoingData - The type of data returned by toJSON()
77
- *
78
- * @example
79
- * ```typescript
80
- * const UserCreatedEvent = defineEvent<User, { id: number; name: string }>(
81
- * "user.created",
82
- * { toJSON: (user) => user.only(["id", "name"]) }
83
- * );
84
- *
85
- * publishEvent(new UserCreatedEvent(user));
86
- * ```
87
- */
88
- export declare function defineEvent<IncomingData = unknown, OutgoingData = unknown>(eventName: string, options?: EventOptions<IncomingData>): EventMessageClass<IncomingData, OutgoingData>;
89
- export {};
90
- //# sourceMappingURL=event-message.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-message.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,8BAAsB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqC5C,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ;IApC5C;;OAEG;IACH,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC;;OAEG;IACI,OAAO,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACI,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEtC;;OAEG;IACI,SAAS,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACI,MAAM,CAAC,EAAE,eAAe,CAAC;IAEhC;;OAEG;IACI,MAAM,IAAI,QAAQ;gBAQI,IAAI,CAAC,EAAE,QAAQ;IAE5C;;;;;OAKG;IACI,SAAS;;;;;;;;;CAajB;AAED,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,aAAa,CAAC;IACpC;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF;;;;;GAKG;AACH,KAAK,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,IAAI,KAC/E,IAAI,CAAC,EAAE,SAAS,KACb,YAAY,CAAC,SAAS,CAAC,CAAC;AAE7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,GAAG,OAAO,EACxE,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,YAAY,CAAC,YAAY,CAAM,GACvC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,CAiB/C"}