@warlock.js/herald 4.0.100
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.
- package/README.md +364 -0
- package/cjs/communicators/communicator-registry.d.ts +155 -0
- package/cjs/communicators/communicator-registry.d.ts.map +1 -0
- package/cjs/communicators/communicator-registry.js +206 -0
- package/cjs/communicators/communicator-registry.js.map +1 -0
- package/cjs/communicators/communicator.d.ts +90 -0
- package/cjs/communicators/communicator.d.ts.map +1 -0
- package/cjs/communicators/communicator.js +93 -0
- package/cjs/communicators/communicator.js.map +1 -0
- package/cjs/communicators/index.d.ts +3 -0
- package/cjs/communicators/index.d.ts.map +1 -0
- package/cjs/contracts/channel.contract.d.ts +175 -0
- package/cjs/contracts/channel.contract.d.ts.map +1 -0
- package/cjs/contracts/communicator-driver.contract.d.ts +168 -0
- package/cjs/contracts/communicator-driver.contract.d.ts.map +1 -0
- package/cjs/contracts/index.d.ts +3 -0
- package/cjs/contracts/index.d.ts.map +1 -0
- package/cjs/drivers/index.d.ts +2 -0
- package/cjs/drivers/index.d.ts.map +1 -0
- package/cjs/drivers/rabbitmq/index.d.ts +3 -0
- package/cjs/drivers/rabbitmq/index.d.ts.map +1 -0
- package/cjs/drivers/rabbitmq/rabbitmq-channel.d.ts +70 -0
- package/cjs/drivers/rabbitmq/rabbitmq-channel.d.ts.map +1 -0
- package/cjs/drivers/rabbitmq/rabbitmq-channel.js +400 -0
- package/cjs/drivers/rabbitmq/rabbitmq-channel.js.map +1 -0
- package/cjs/drivers/rabbitmq/rabbitmq-driver.d.ts +100 -0
- package/cjs/drivers/rabbitmq/rabbitmq-driver.d.ts.map +1 -0
- package/cjs/drivers/rabbitmq/rabbitmq-driver.js +299 -0
- package/cjs/drivers/rabbitmq/rabbitmq-driver.js.map +1 -0
- package/cjs/index.d.ts +45 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +1 -0
- package/cjs/index.js.map +1 -0
- package/cjs/types.d.ts +396 -0
- package/cjs/types.d.ts.map +1 -0
- package/cjs/utils/connect-to-communicator.d.ts +86 -0
- package/cjs/utils/connect-to-communicator.d.ts.map +1 -0
- package/cjs/utils/connect-to-communicator.js +122 -0
- package/cjs/utils/connect-to-communicator.js.map +1 -0
- package/cjs/utils/index.d.ts +2 -0
- package/cjs/utils/index.d.ts.map +1 -0
- package/esm/communicators/communicator-registry.d.ts +155 -0
- package/esm/communicators/communicator-registry.d.ts.map +1 -0
- package/esm/communicators/communicator-registry.js +206 -0
- package/esm/communicators/communicator-registry.js.map +1 -0
- package/esm/communicators/communicator.d.ts +90 -0
- package/esm/communicators/communicator.d.ts.map +1 -0
- package/esm/communicators/communicator.js +93 -0
- package/esm/communicators/communicator.js.map +1 -0
- package/esm/communicators/index.d.ts +3 -0
- package/esm/communicators/index.d.ts.map +1 -0
- package/esm/contracts/channel.contract.d.ts +175 -0
- package/esm/contracts/channel.contract.d.ts.map +1 -0
- package/esm/contracts/communicator-driver.contract.d.ts +168 -0
- package/esm/contracts/communicator-driver.contract.d.ts.map +1 -0
- package/esm/contracts/index.d.ts +3 -0
- package/esm/contracts/index.d.ts.map +1 -0
- package/esm/drivers/index.d.ts +2 -0
- package/esm/drivers/index.d.ts.map +1 -0
- package/esm/drivers/rabbitmq/index.d.ts +3 -0
- package/esm/drivers/rabbitmq/index.d.ts.map +1 -0
- package/esm/drivers/rabbitmq/rabbitmq-channel.d.ts +70 -0
- package/esm/drivers/rabbitmq/rabbitmq-channel.d.ts.map +1 -0
- package/esm/drivers/rabbitmq/rabbitmq-channel.js +400 -0
- package/esm/drivers/rabbitmq/rabbitmq-channel.js.map +1 -0
- package/esm/drivers/rabbitmq/rabbitmq-driver.d.ts +100 -0
- package/esm/drivers/rabbitmq/rabbitmq-driver.d.ts.map +1 -0
- package/esm/drivers/rabbitmq/rabbitmq-driver.js +299 -0
- package/esm/drivers/rabbitmq/rabbitmq-driver.js.map +1 -0
- package/esm/index.d.ts +45 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -0
- package/esm/types.d.ts +396 -0
- package/esm/types.d.ts.map +1 -0
- package/esm/utils/connect-to-communicator.d.ts +86 -0
- package/esm/utils/connect-to-communicator.d.ts.map +1 -0
- package/esm/utils/connect-to-communicator.js +122 -0
- package/esm/utils/connect-to-communicator.js.map +1 -0
- package/esm/utils/index.d.ts +2 -0
- package/esm/utils/index.d.ts.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import {EventEmitter}from'node:events';import {RabbitMQChannel}from'./rabbitmq-channel.js';// ============================================================
|
|
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 import('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 CommunicatorDriverContract 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
|
+
options;
|
|
69
|
+
events = new EventEmitter();
|
|
70
|
+
channels = new Map();
|
|
71
|
+
connection = null;
|
|
72
|
+
amqpChannel = null;
|
|
73
|
+
_isConnected = false;
|
|
74
|
+
/**
|
|
75
|
+
* Create a new RabbitMQ driver
|
|
76
|
+
*
|
|
77
|
+
* @param options - RabbitMQ connection options
|
|
78
|
+
*/
|
|
79
|
+
constructor(options) {
|
|
80
|
+
this.options = options;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Whether connected to RabbitMQ
|
|
84
|
+
*/
|
|
85
|
+
get isConnected() {
|
|
86
|
+
return this._isConnected;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Connect to RabbitMQ
|
|
90
|
+
*/
|
|
91
|
+
async connect() {
|
|
92
|
+
// Check if amqplib is installed
|
|
93
|
+
if (isModuleExists === false) {
|
|
94
|
+
throw new Error(`amqplib is not installed.\n\n${AMQPLIB_INSTALL_INSTRUCTIONS}`);
|
|
95
|
+
}
|
|
96
|
+
// Wait for module to load if still loading
|
|
97
|
+
if (isModuleExists === null) {
|
|
98
|
+
await loadAmqplibModule();
|
|
99
|
+
if (!isModuleExists) {
|
|
100
|
+
throw new Error(`amqplib is not installed.\n\n${AMQPLIB_INSTALL_INSTRUCTIONS}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
// Build connection URL
|
|
105
|
+
const url = this.buildConnectionUrl();
|
|
106
|
+
// Build connection options merging our options with native client options
|
|
107
|
+
const connectOptions = {
|
|
108
|
+
heartbeat: this.options.heartbeat ?? 60,
|
|
109
|
+
timeout: this.options.connectionTimeout,
|
|
110
|
+
// Merge native amqplib client options
|
|
111
|
+
...this.options.clientOptions,
|
|
112
|
+
};
|
|
113
|
+
// Connect using cached module
|
|
114
|
+
this.connection = await amqplibModule.connect(url, connectOptions);
|
|
115
|
+
// Create channel
|
|
116
|
+
this.amqpChannel = await this.connection.createChannel();
|
|
117
|
+
// Set prefetch if specified
|
|
118
|
+
if (this.options.prefetch) {
|
|
119
|
+
await this.amqpChannel.prefetch(this.options.prefetch);
|
|
120
|
+
}
|
|
121
|
+
this._isConnected = true;
|
|
122
|
+
this.events.emit("connected");
|
|
123
|
+
// Handle connection close
|
|
124
|
+
this.connection.on("close", () => {
|
|
125
|
+
this._isConnected = false;
|
|
126
|
+
this.events.emit("disconnected");
|
|
127
|
+
if (this.options.reconnect !== false) {
|
|
128
|
+
this.handleReconnect();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
// Handle errors
|
|
132
|
+
this.connection.on("error", (error) => {
|
|
133
|
+
this.events.emit("error", error);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
this._isConnected = false;
|
|
138
|
+
throw new Error(`Failed to connect to RabbitMQ: ${error instanceof Error ? error.message : String(error)}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Build connection URL from options
|
|
143
|
+
*/
|
|
144
|
+
buildConnectionUrl() {
|
|
145
|
+
if (this.options.uri) {
|
|
146
|
+
return this.options.uri;
|
|
147
|
+
}
|
|
148
|
+
const protocol = "amqp";
|
|
149
|
+
const host = this.options.host ?? "localhost";
|
|
150
|
+
const port = this.options.port ?? 5672;
|
|
151
|
+
const vhost = this.options.vhost ?? "/";
|
|
152
|
+
const username = this.options.username ?? "guest";
|
|
153
|
+
const password = this.options.password ?? "guest";
|
|
154
|
+
const encodedVhost = encodeURIComponent(vhost);
|
|
155
|
+
return `${protocol}://${username}:${password}@${host}:${port}/${encodedVhost}`;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Handle reconnection
|
|
159
|
+
*/
|
|
160
|
+
async handleReconnect() {
|
|
161
|
+
const delay = this.options.reconnectDelay ?? 5000;
|
|
162
|
+
let attempt = 0;
|
|
163
|
+
const tryReconnect = async () => {
|
|
164
|
+
attempt++;
|
|
165
|
+
this.events.emit("reconnecting", attempt);
|
|
166
|
+
try {
|
|
167
|
+
await this.connect();
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
setTimeout(tryReconnect, delay);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
setTimeout(tryReconnect, delay);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Disconnect from RabbitMQ
|
|
177
|
+
*/
|
|
178
|
+
async disconnect() {
|
|
179
|
+
if (this.amqpChannel) {
|
|
180
|
+
try {
|
|
181
|
+
await this.amqpChannel.close();
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Ignore close errors
|
|
185
|
+
}
|
|
186
|
+
this.amqpChannel = null;
|
|
187
|
+
}
|
|
188
|
+
if (this.connection) {
|
|
189
|
+
try {
|
|
190
|
+
await this.connection.close();
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Ignore close errors
|
|
194
|
+
}
|
|
195
|
+
this.connection = null;
|
|
196
|
+
}
|
|
197
|
+
this._isConnected = false;
|
|
198
|
+
this.events.emit("disconnected");
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Register event listener
|
|
202
|
+
*/
|
|
203
|
+
on(event, listener) {
|
|
204
|
+
this.events.on(event, listener);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Remove event listener
|
|
208
|
+
*/
|
|
209
|
+
off(event, listener) {
|
|
210
|
+
this.events.off(event, listener);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get or create a channel
|
|
214
|
+
*/
|
|
215
|
+
channel(name, options) {
|
|
216
|
+
// Check cache
|
|
217
|
+
const existing = this.channels.get(name);
|
|
218
|
+
if (existing) {
|
|
219
|
+
return existing;
|
|
220
|
+
}
|
|
221
|
+
// Create new channel
|
|
222
|
+
const channel = new RabbitMQChannel(name, this.amqpChannel, options);
|
|
223
|
+
this.channels.set(name, channel);
|
|
224
|
+
return channel;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Start consuming messages
|
|
228
|
+
*/
|
|
229
|
+
async startConsuming() {
|
|
230
|
+
// Channels start consuming when subscribe() is called
|
|
231
|
+
// This method is for batch start if needed
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Stop consuming messages
|
|
235
|
+
*/
|
|
236
|
+
async stopConsuming() {
|
|
237
|
+
// Cancel all consumers
|
|
238
|
+
for (const channel of this.channels.values()) {
|
|
239
|
+
// Channel implementations should handle this
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Health check
|
|
244
|
+
*/
|
|
245
|
+
async healthCheck() {
|
|
246
|
+
if (!this._isConnected || !this.connection) {
|
|
247
|
+
return {
|
|
248
|
+
healthy: false,
|
|
249
|
+
error: "Not connected to RabbitMQ",
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const start = Date.now();
|
|
253
|
+
try {
|
|
254
|
+
// Simple check - verify channel is open
|
|
255
|
+
await this.amqpChannel.checkQueue("amq.rabbitmq.reply-to").catch(() => {
|
|
256
|
+
// Queue might not exist, but if we get here, connection is alive
|
|
257
|
+
});
|
|
258
|
+
return {
|
|
259
|
+
healthy: true,
|
|
260
|
+
latency: Date.now() - start,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
return {
|
|
265
|
+
healthy: false,
|
|
266
|
+
error: error instanceof Error ? error.message : String(error),
|
|
267
|
+
latency: Date.now() - start,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get all channel names
|
|
273
|
+
*/
|
|
274
|
+
getChannelNames() {
|
|
275
|
+
return Array.from(this.channels.keys());
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Close a specific channel
|
|
279
|
+
*/
|
|
280
|
+
async closeChannel(name) {
|
|
281
|
+
const channel = this.channels.get(name);
|
|
282
|
+
if (channel) {
|
|
283
|
+
await channel.delete();
|
|
284
|
+
this.channels.delete(name);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Get the raw AMQP channel (for advanced use)
|
|
289
|
+
*/
|
|
290
|
+
getRawChannel() {
|
|
291
|
+
return this.amqpChannel;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get the raw connection (for advanced use)
|
|
295
|
+
*/
|
|
296
|
+
getRawConnection() {
|
|
297
|
+
return this.connection;
|
|
298
|
+
}
|
|
299
|
+
}export{RabbitMQDriver};//# sourceMappingURL=rabbitmq-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq-driver.js","sources":["../../../src/drivers/rabbitmq/rabbitmq-driver.ts"],"sourcesContent":[null],"names":[],"mappings":"2FAWA;AACA;AACA;AAEA;;AAEG;AACH,IAAI,aAAuC,CAAC;AAE5C;;AAEG;AACH,IAAI,cAAc,GAAmB,IAAI,CAAC;AAE1C;;AAEG;AACH,MAAM,4BAA4B,GAAG,CAAA;;;;;;;;;;;CAWpC,CAAC,IAAI,EAAE,CAAC;AAET;;AAEG;AACH,eAAe,iBAAiB,GAAA;IAC9B,IAAI;AACF,QAAA,aAAa,GAAG,MAAM,OAAO,SAAS,CAAC,CAAC;QACxC,cAAc,GAAG,IAAI,CAAC;AACvB,KAAA;IAAC,MAAM;QACN,cAAc,GAAG,KAAK,CAAC;AACxB,KAAA;AACH,CAAC;AAED;AACA,iBAAiB,EAAE,CAAC;AAEpB;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBG;MACU,cAAc,CAAA;IACT,IAAI,GAAG,UAAmB,CAAC;AAE1B,IAAA,OAAO,CAA4B;AACnC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AAC5B,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE5D,UAAU,GAAQ,IAAI,CAAC;IACvB,WAAW,GAAQ,IAAI,CAAC;IACxB,YAAY,GAAG,KAAK,CAAC;AAE7B;;;;AAIG;AACH,IAAA,WAAA,CAAmB,OAAkC,EAAA;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACxB;AAED;;AAEG;AACH,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAED;;AAEG;AACI,IAAA,MAAM,OAAO,GAAA;;QAElB,IAAI,cAAc,KAAK,KAAK,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,4BAA4B,CAAA,CAAE,CAAC,CAAC;AACjF,SAAA;;QAGD,IAAI,cAAc,KAAK,IAAI,EAAE;YAC3B,MAAM,iBAAiB,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE;AACnB,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,4BAA4B,CAAA,CAAE,CAAC,CAAC;AACjF,aAAA;AACF,SAAA;QAED,IAAI;;AAEF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;;AAGtC,YAAA,MAAM,cAAc,GAAG;AACrB,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;AACvC,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;;AAEvC,gBAAA,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;aAC9B,CAAC;;AAGF,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;;YAGnE,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;;AAGzD,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxD,aAAA;AAED,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;YAG9B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AAC/B,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAEjC,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;oBACpC,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,iBAAA;AACH,aAAC,CAAC,CAAC;;YAGH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,KAAI;gBAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnC,aAAC,CAAC,CAAC;AACJ,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,CAAA,+BAAA,EAAkC,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAE,CAAA,CAC3F,CAAC;AACH,SAAA;KACF;AAED;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACzB,SAAA;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;AAElD,QAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE/C,QAAA,OAAO,CAAG,EAAA,QAAQ,CAAM,GAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAI,CAAA,EAAA,YAAY,EAAE,CAAC;KAChF;AAED;;AAEG;AACK,IAAA,MAAM,eAAe,GAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QAClD,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,QAAA,MAAM,YAAY,GAAG,YAAW;AAC9B,YAAA,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAE1C,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACtB,aAAA;YAAC,MAAM;AACN,gBAAA,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACjC,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;KACjC;AAED;;AAEG;AACI,IAAA,MAAM,UAAU,GAAA;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAChC,aAAA;YAAC,MAAM;;AAEP,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC/B,aAAA;YAAC,MAAM;;AAEP,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACxB,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAClC;AAED;;AAEG;IACI,EAAE,CAAC,KAAwB,EAAE,QAAmC,EAAA;QACrE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAe,CAAC,CAAC;KACxC;AAED;;AAEG;IACI,GAAG,CAAC,KAAwB,EAAE,QAAmC,EAAA;QACtE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAe,CAAC,CAAC;KACzC;AAED;;AAEG;IACI,OAAO,CACZ,IAAY,EACZ,OAAkC,EAAA;;QAGlC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAqC,CAAC;AAC9C,SAAA;;AAGD,QAAA,MAAM,OAAO,GAAG,IAAI,eAAe,CAAW,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE/E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,QAAA,OAAO,OAAO,CAAC;KAChB;AAED;;AAEG;AACI,IAAA,MAAM,cAAc,GAAA;;;KAG1B;AAED;;AAEG;AACI,IAAA,MAAM,aAAa,GAAA;;QAExB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;;AAE7C,SAAA;KACF;AAED;;AAEG;AACI,IAAA,MAAM,WAAW,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1C,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,2BAA2B;aACnC,CAAC;AACH,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI;;AAEF,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,MAAK;;AAEtE,aAAC,CAAC,CAAC;YAEH,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC5B,CAAC;AACH,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;YACd,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7D,gBAAA,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC5B,CAAC;AACH,SAAA;KACF;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;KACzC;AAED;;AAEG;IACI,MAAM,YAAY,CAAC,IAAY,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5B,SAAA;KACF;AAED;;AAEG;IACI,aAAa,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AAED;;AAEG;IACI,gBAAgB,GAAA;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;AACF"}
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Warlock Herald - Message Bus / Communicators
|
|
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
|
+
* - communicators/ - Communicator and registry
|
|
13
|
+
* - drivers/ - RabbitMQ, Kafka implementations
|
|
14
|
+
* - types/ - TypeScript type definitions
|
|
15
|
+
* - utils/ - Connection helpers
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { connectToCommunicator, communicators } from "@warlock.js/herald";
|
|
20
|
+
*
|
|
21
|
+
* // Connect to RabbitMQ
|
|
22
|
+
* await connectToCommunicator({
|
|
23
|
+
* driver: "rabbitmq",
|
|
24
|
+
* host: "localhost",
|
|
25
|
+
* port: 5672,
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Publish a message
|
|
29
|
+
* await communicators().channel("user.created").publish({ userId: 1 });
|
|
30
|
+
*
|
|
31
|
+
* // Subscribe to messages
|
|
32
|
+
* communicators()
|
|
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";
|
|
41
|
+
export * from "./contracts";
|
|
42
|
+
export * from "./communicators";
|
|
43
|
+
export * from "./drivers";
|
|
44
|
+
export * from "./utils";
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC"}
|
package/esm/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Communicator}from'./communicators/communicator.js';export{MissingCommunicatorError,communicatorRegistry}from'./communicators/communicator-registry.js';export{RabbitMQDriver}from'./drivers/rabbitmq/rabbitmq-driver.js';export{RabbitMQChannel}from'./drivers/rabbitmq/rabbitmq-channel.js';export{communicators,connectToCommunicator}from'./utils/connect-to-communicator.js';//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|