@amqp-contract/core 0.20.0 → 0.21.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.
- package/README.md +2 -2
- package/dist/index.cjs +28 -29
- package/dist/index.d.cts +82 -61
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +80 -59
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +20 -16
- package/dist/index.mjs.map +1 -1
- package/docs/index.md +347 -80
- package/package.json +25 -25
package/README.md
CHANGED
|
@@ -41,8 +41,8 @@ import {
|
|
|
41
41
|
import { z } from "zod";
|
|
42
42
|
|
|
43
43
|
// Define resources
|
|
44
|
-
const ordersExchange = defineExchange("orders"
|
|
45
|
-
const orderProcessingQueue = defineQueue("order-processing"
|
|
44
|
+
const ordersExchange = defineExchange("orders");
|
|
45
|
+
const orderProcessingQueue = defineQueue("order-processing");
|
|
46
46
|
const orderMessage = defineMessage(z.object({ orderId: z.string() }));
|
|
47
47
|
|
|
48
48
|
const orderCreatedEvent = defineEventPublisher(ordersExchange, orderMessage, {
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region \0rolldown/runtime.js
|
|
3
3
|
var __create = Object.create;
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -7,16 +7,12 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
9
|
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
}
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
|
+
key = keys[i];
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
|
+
get: ((k) => from[k]).bind(null, key),
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
});
|
|
20
16
|
}
|
|
21
17
|
return to;
|
|
22
18
|
};
|
|
@@ -24,13 +20,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
20
|
value: mod,
|
|
25
21
|
enumerable: true
|
|
26
22
|
}) : target, mod));
|
|
27
|
-
|
|
28
23
|
//#endregion
|
|
29
24
|
let _swan_io_boxed = require("@swan-io/boxed");
|
|
30
25
|
let amqp_connection_manager = require("amqp-connection-manager");
|
|
31
|
-
amqp_connection_manager = __toESM(amqp_connection_manager);
|
|
26
|
+
amqp_connection_manager = __toESM(amqp_connection_manager, 1);
|
|
32
27
|
let _amqp_contract_contract = require("@amqp-contract/contract");
|
|
33
|
-
|
|
34
28
|
//#region src/connection-manager.ts
|
|
35
29
|
/**
|
|
36
30
|
* Connection manager singleton for sharing AMQP connections across clients.
|
|
@@ -155,7 +149,6 @@ var ConnectionManagerSingleton = class ConnectionManagerSingleton {
|
|
|
155
149
|
this.refCounts.clear();
|
|
156
150
|
}
|
|
157
151
|
};
|
|
158
|
-
|
|
159
152
|
//#endregion
|
|
160
153
|
//#region src/errors.ts
|
|
161
154
|
/**
|
|
@@ -192,7 +185,6 @@ var MessageValidationError = class extends Error {
|
|
|
192
185
|
if (typeof ErrorConstructor.captureStackTrace === "function") ErrorConstructor.captureStackTrace(this, this.constructor);
|
|
193
186
|
}
|
|
194
187
|
};
|
|
195
|
-
|
|
196
188
|
//#endregion
|
|
197
189
|
//#region src/setup.ts
|
|
198
190
|
/**
|
|
@@ -238,14 +230,11 @@ async function setupAmqpTopology(channel, contract) {
|
|
|
238
230
|
queueArguments["x-dead-letter-exchange"] = queue.deadLetter.exchange.name;
|
|
239
231
|
if (queue.deadLetter.routingKey) queueArguments["x-dead-letter-routing-key"] = queue.deadLetter.routingKey;
|
|
240
232
|
}
|
|
241
|
-
if (queue.type === "quorum") {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
arguments: queueArguments
|
|
247
|
-
});
|
|
248
|
-
}
|
|
233
|
+
if (queue.type === "quorum") return channel.assertQueue(queue.name, {
|
|
234
|
+
durable: true,
|
|
235
|
+
arguments: queueArguments
|
|
236
|
+
});
|
|
237
|
+
if (queue.maxPriority !== void 0) queueArguments["x-max-priority"] = queue.maxPriority;
|
|
249
238
|
return channel.assertQueue(queue.name, {
|
|
250
239
|
durable: queue.durable,
|
|
251
240
|
exclusive: queue.exclusive,
|
|
@@ -260,7 +249,6 @@ async function setupAmqpTopology(channel, contract) {
|
|
|
260
249
|
}))).filter((result) => result.status === "rejected");
|
|
261
250
|
if (bindingErrors.length > 0) throw new AggregateError(bindingErrors.map(({ reason }) => reason), "Failed to setup bindings");
|
|
262
251
|
}
|
|
263
|
-
|
|
264
252
|
//#endregion
|
|
265
253
|
//#region src/amqp-client.ts
|
|
266
254
|
/**
|
|
@@ -325,10 +313,12 @@ var AmqpClient = class {
|
|
|
325
313
|
this.contract = contract;
|
|
326
314
|
this.urls = options.urls;
|
|
327
315
|
if (options.connectionOptions !== void 0) this.connectionOptions = options.connectionOptions;
|
|
328
|
-
|
|
316
|
+
const singleton = ConnectionManagerSingleton.getInstance();
|
|
317
|
+
this.connection = singleton.getConnection(options.urls, options.connectionOptions);
|
|
329
318
|
const defaultSetup = (channel) => setupAmqpTopology(channel, this.contract);
|
|
330
319
|
const { setup: userSetup, ...otherChannelOptions } = options.channelOptions ?? {};
|
|
331
320
|
const channelOpts = {
|
|
321
|
+
confirm: true,
|
|
332
322
|
json: true,
|
|
333
323
|
setup: defaultSetup,
|
|
334
324
|
...otherChannelOptions
|
|
@@ -372,6 +362,17 @@ var AmqpClient = class {
|
|
|
372
362
|
return _swan_io_boxed.Future.fromPromise(this.channelWrapper.publish(exchange, routingKey, content, options)).mapError((error) => new TechnicalError("Failed to publish message", error));
|
|
373
363
|
}
|
|
374
364
|
/**
|
|
365
|
+
* Publish a message directly to a queue.
|
|
366
|
+
*
|
|
367
|
+
* @param queue - The queue name
|
|
368
|
+
* @param content - The message content (will be JSON serialized if json: true)
|
|
369
|
+
* @param options - Optional publish options
|
|
370
|
+
* @returns A Future with `Result<boolean>` - true if message was sent, false if channel buffer is full
|
|
371
|
+
*/
|
|
372
|
+
sendToQueue(queue, content, options) {
|
|
373
|
+
return _swan_io_boxed.Future.fromPromise(this.channelWrapper.sendToQueue(queue, content, options)).mapError((error) => new TechnicalError("Failed to publish message to queue", error));
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
375
376
|
* Start consuming messages from a queue.
|
|
376
377
|
*
|
|
377
378
|
* @param queue - The queue name
|
|
@@ -455,7 +456,6 @@ var AmqpClient = class {
|
|
|
455
456
|
await ConnectionManagerSingleton.getInstance()._resetForTesting();
|
|
456
457
|
}
|
|
457
458
|
};
|
|
458
|
-
|
|
459
459
|
//#endregion
|
|
460
460
|
//#region src/telemetry.ts
|
|
461
461
|
/**
|
|
@@ -679,7 +679,6 @@ function _resetTelemetryCacheForTesting() {
|
|
|
679
679
|
cachedPublishLatencyHistogram = void 0;
|
|
680
680
|
cachedConsumeLatencyHistogram = void 0;
|
|
681
681
|
}
|
|
682
|
-
|
|
683
682
|
//#endregion
|
|
684
683
|
exports.AmqpClient = AmqpClient;
|
|
685
684
|
exports.ConnectionManagerSingleton = ConnectionManagerSingleton;
|
|
@@ -694,4 +693,4 @@ exports.recordConsumeMetric = recordConsumeMetric;
|
|
|
694
693
|
exports.recordPublishMetric = recordPublishMetric;
|
|
695
694
|
exports.setupAmqpTopology = setupAmqpTopology;
|
|
696
695
|
exports.startConsumeSpan = startConsumeSpan;
|
|
697
|
-
exports.startPublishSpan = startPublishSpan;
|
|
696
|
+
exports.startPublishSpan = startPublishSpan;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,65 +1,9 @@
|
|
|
1
|
+
import { ContractDefinition } from "@amqp-contract/contract";
|
|
2
|
+
import { Future, Result } from "@swan-io/boxed";
|
|
1
3
|
import { AmqpConnectionManager, AmqpConnectionManagerOptions, ConnectionUrl, CreateChannelOpts } from "amqp-connection-manager";
|
|
2
4
|
import { Channel, ConsumeMessage, Options } from "amqplib";
|
|
3
|
-
import { Future, Result } from "@swan-io/boxed";
|
|
4
|
-
import { ContractDefinition } from "@amqp-contract/contract";
|
|
5
5
|
import { Attributes, Counter, Histogram, Span, Tracer } from "@opentelemetry/api";
|
|
6
6
|
|
|
7
|
-
//#region src/logger.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* Context object for logger methods.
|
|
10
|
-
*
|
|
11
|
-
* This type includes reserved keys that provide consistent naming
|
|
12
|
-
* for common logging context properties.
|
|
13
|
-
*
|
|
14
|
-
* @property error - Error object or error details
|
|
15
|
-
*/
|
|
16
|
-
type LoggerContext = Record<string, unknown> & {
|
|
17
|
-
error?: unknown;
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Logger interface for amqp-contract packages.
|
|
21
|
-
*
|
|
22
|
-
* Provides a simple logging abstraction that can be implemented by users
|
|
23
|
-
* to integrate with their preferred logging framework.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* // Simple console logger implementation
|
|
28
|
-
* const logger: Logger = {
|
|
29
|
-
* debug: (message, context) => console.debug(message, context),
|
|
30
|
-
* info: (message, context) => console.info(message, context),
|
|
31
|
-
* warn: (message, context) => console.warn(message, context),
|
|
32
|
-
* error: (message, context) => console.error(message, context),
|
|
33
|
-
* };
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
type Logger = {
|
|
37
|
-
/**
|
|
38
|
-
* Log debug level messages
|
|
39
|
-
* @param message - The log message
|
|
40
|
-
* @param context - Optional context to include with the log
|
|
41
|
-
*/
|
|
42
|
-
debug(message: string, context?: LoggerContext): void;
|
|
43
|
-
/**
|
|
44
|
-
* Log info level messages
|
|
45
|
-
* @param message - The log message
|
|
46
|
-
* @param context - Optional context to include with the log
|
|
47
|
-
*/
|
|
48
|
-
info(message: string, context?: LoggerContext): void;
|
|
49
|
-
/**
|
|
50
|
-
* Log warning level messages
|
|
51
|
-
* @param message - The log message
|
|
52
|
-
* @param context - Optional context to include with the log
|
|
53
|
-
*/
|
|
54
|
-
warn(message: string, context?: LoggerContext): void;
|
|
55
|
-
/**
|
|
56
|
-
* Log error level messages
|
|
57
|
-
* @param message - The log message
|
|
58
|
-
* @param context - Optional context to include with the log
|
|
59
|
-
*/
|
|
60
|
-
error(message: string, context?: LoggerContext): void;
|
|
61
|
-
};
|
|
62
|
-
//#endregion
|
|
63
7
|
//#region src/errors.d.ts
|
|
64
8
|
/**
|
|
65
9
|
* Error for technical/runtime failures that cannot be prevented by TypeScript.
|
|
@@ -103,6 +47,18 @@ type AmqpClientOptions = {
|
|
|
103
47
|
* Callback type for consuming messages.
|
|
104
48
|
*/
|
|
105
49
|
type ConsumeCallback = (msg: ConsumeMessage | null) => void | Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Publish options that extend amqplib's Options.Publish with optional timeout support.
|
|
52
|
+
*/
|
|
53
|
+
type PublishOptions = Options.Publish & {
|
|
54
|
+
/** Message will be rejected after timeout ms */timeout?: number;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Consume options that extend amqplib's Options.Consume with optional prefetch support.
|
|
58
|
+
*/
|
|
59
|
+
type ConsumerOptions = Options.Consume & {
|
|
60
|
+
/** Number of messages to prefetch */prefetch?: number;
|
|
61
|
+
};
|
|
106
62
|
/**
|
|
107
63
|
* AMQP client that manages connections and channels with automatic topology setup.
|
|
108
64
|
*
|
|
@@ -174,7 +130,16 @@ declare class AmqpClient {
|
|
|
174
130
|
* @param options - Optional publish options
|
|
175
131
|
* @returns A Future with `Result<boolean>` - true if message was sent, false if channel buffer is full
|
|
176
132
|
*/
|
|
177
|
-
publish(exchange: string, routingKey: string, content: Buffer | unknown, options?:
|
|
133
|
+
publish(exchange: string, routingKey: string, content: Buffer | unknown, options?: PublishOptions): Future<Result<boolean, TechnicalError>>;
|
|
134
|
+
/**
|
|
135
|
+
* Publish a message directly to a queue.
|
|
136
|
+
*
|
|
137
|
+
* @param queue - The queue name
|
|
138
|
+
* @param content - The message content (will be JSON serialized if json: true)
|
|
139
|
+
* @param options - Optional publish options
|
|
140
|
+
* @returns A Future with `Result<boolean>` - true if message was sent, false if channel buffer is full
|
|
141
|
+
*/
|
|
142
|
+
sendToQueue(queue: string, content: Buffer | unknown, options?: PublishOptions): Future<Result<boolean, TechnicalError>>;
|
|
178
143
|
/**
|
|
179
144
|
* Start consuming messages from a queue.
|
|
180
145
|
*
|
|
@@ -183,7 +148,7 @@ declare class AmqpClient {
|
|
|
183
148
|
* @param options - Optional consume options
|
|
184
149
|
* @returns A Future with `Result<string>` - the consumer tag
|
|
185
150
|
*/
|
|
186
|
-
consume(queue: string, callback: ConsumeCallback, options?:
|
|
151
|
+
consume(queue: string, callback: ConsumeCallback, options?: ConsumerOptions): Future<Result<string, TechnicalError>>;
|
|
187
152
|
/**
|
|
188
153
|
* Cancel a consumer by its consumer tag.
|
|
189
154
|
*
|
|
@@ -326,6 +291,62 @@ declare class ConnectionManagerSingleton {
|
|
|
326
291
|
_resetForTesting(): Promise<void>;
|
|
327
292
|
}
|
|
328
293
|
//#endregion
|
|
294
|
+
//#region src/logger.d.ts
|
|
295
|
+
/**
|
|
296
|
+
* Context object for logger methods.
|
|
297
|
+
*
|
|
298
|
+
* This type includes reserved keys that provide consistent naming
|
|
299
|
+
* for common logging context properties.
|
|
300
|
+
*
|
|
301
|
+
* @property error - Error object or error details
|
|
302
|
+
*/
|
|
303
|
+
type LoggerContext = Record<string, unknown> & {
|
|
304
|
+
error?: unknown;
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* Logger interface for amqp-contract packages.
|
|
308
|
+
*
|
|
309
|
+
* Provides a simple logging abstraction that can be implemented by users
|
|
310
|
+
* to integrate with their preferred logging framework.
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* ```typescript
|
|
314
|
+
* // Simple console logger implementation
|
|
315
|
+
* const logger: Logger = {
|
|
316
|
+
* debug: (message, context) => console.debug(message, context),
|
|
317
|
+
* info: (message, context) => console.info(message, context),
|
|
318
|
+
* warn: (message, context) => console.warn(message, context),
|
|
319
|
+
* error: (message, context) => console.error(message, context),
|
|
320
|
+
* };
|
|
321
|
+
* ```
|
|
322
|
+
*/
|
|
323
|
+
type Logger = {
|
|
324
|
+
/**
|
|
325
|
+
* Log debug level messages
|
|
326
|
+
* @param message - The log message
|
|
327
|
+
* @param context - Optional context to include with the log
|
|
328
|
+
*/
|
|
329
|
+
debug(message: string, context?: LoggerContext): void;
|
|
330
|
+
/**
|
|
331
|
+
* Log info level messages
|
|
332
|
+
* @param message - The log message
|
|
333
|
+
* @param context - Optional context to include with the log
|
|
334
|
+
*/
|
|
335
|
+
info(message: string, context?: LoggerContext): void;
|
|
336
|
+
/**
|
|
337
|
+
* Log warning level messages
|
|
338
|
+
* @param message - The log message
|
|
339
|
+
* @param context - Optional context to include with the log
|
|
340
|
+
*/
|
|
341
|
+
warn(message: string, context?: LoggerContext): void;
|
|
342
|
+
/**
|
|
343
|
+
* Log error level messages
|
|
344
|
+
* @param message - The log message
|
|
345
|
+
* @param context - Optional context to include with the log
|
|
346
|
+
*/
|
|
347
|
+
error(message: string, context?: LoggerContext): void;
|
|
348
|
+
};
|
|
349
|
+
//#endregion
|
|
329
350
|
//#region src/setup.d.ts
|
|
330
351
|
/**
|
|
331
352
|
* Setup AMQP topology (exchanges, queues, and bindings) from a contract definition.
|
|
@@ -438,5 +459,5 @@ declare function recordConsumeMetric(provider: TelemetryProvider, queueName: str
|
|
|
438
459
|
*/
|
|
439
460
|
declare function _resetTelemetryCacheForTesting(): void;
|
|
440
461
|
//#endregion
|
|
441
|
-
export { AmqpClient, type AmqpClientOptions, ConnectionManagerSingleton, type ConsumeCallback, type Logger, type LoggerContext, MessageValidationError, MessagingSemanticConventions, TechnicalError, type TelemetryProvider, _resetTelemetryCacheForTesting, defaultTelemetryProvider, endSpanError, endSpanSuccess, recordConsumeMetric, recordPublishMetric, setupAmqpTopology, startConsumeSpan, startPublishSpan };
|
|
462
|
+
export { AmqpClient, type AmqpClientOptions, ConnectionManagerSingleton, type ConsumeCallback, type ConsumerOptions, type Logger, type LoggerContext, MessageValidationError, MessagingSemanticConventions, type PublishOptions, TechnicalError, type TelemetryProvider, _resetTelemetryCacheForTesting, defaultTelemetryProvider, endSpanError, endSpanSuccess, recordConsumeMetric, recordPublishMetric, setupAmqpTopology, startConsumeSpan, startPublishSpan };
|
|
442
463
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors.ts","../src/amqp-client.ts","../src/connection-manager.ts","../src/logger.ts","../src/setup.ts","../src/telemetry.ts"],"mappings":";;;;;;;;;;;;;cAMa,cAAA,SAAuB,KAAA;EAAA,SAGP,KAAA;cADzB,OAAA,UACyB,KAAA;AAAA;;;;;;;;;AAuB7B;cAAa,sBAAA,SAA+B,KAAA;EAAA,SAExB,MAAA;EAAA,SACA,MAAA;cADA,MAAA,UACA,MAAA;AAAA;;;;;AA7BpB;;;;;KCsCY,iBAAA;EACV,IAAA,EAAM,aAAA;EACN,iBAAA,GAAoB,4BAAA;EACpB,cAAA,GAAiB,OAAA,CAAQ,iBAAA;AAAA;;ADf3B;;KCqBY,eAAA,IAAmB,GAAA,EAAK,cAAA,mBAAiC,OAAA;;;;KAKzD,cAAA,GAAiB,OAAA,CAAQ,OAAA;kDAEnC,OAAA;AAAA;;;;KAMU,eAAA,GAAkB,OAAA,CAAQ,OAAA;uCAEpC,QAAA;AAAA;;;;;;;;;;;;;;;;;AAfF;;;;;;;;;AAKA;;;cAyCa,UAAA;EAAA,iBAkBQ,QAAA;EAAA,iBAjBF,UAAA;EAAA,iBACA,cAAA;EAAA,iBACA,IAAA;EAAA,iBACA,iBAAA;EArCP;;;;;;;;;AAiCZ;;cAkBqB,QAAA,EAAU,kBAAA,EAC3B,OAAA,EAAS,iBAAA;EADkB;;;;;;;;;EA+C7B,aAAA,CAAA,GAAiB,qBAAA;EA6Bd;;;;;EApBH,cAAA,CAAA,GAAkB,MAAA,CAAO,MAAA,OAAa,cAAA;EAsD1B;;;;;;;;;EAvCZ,OAAA,CACE,QAAA,UACA,UAAA,UACA,OAAA,EAAS,MAAA,YACT,OAAA,GAAU,cAAA,GACT,MAAA,CAAO,MAAA,UAAgB,cAAA;EAkFA;;;;;;;;EApE1B,WAAA,CACE,KAAA,UACA,OAAA,EAAS,MAAA,YACT,OAAA,GAAU,cAAA,GACT,MAAA,CAAO,MAAA,UAAgB,cAAA;EA/GT;;;;;;;;EA6HjB,OAAA,CACE,KAAA,UACA,QAAA,EAAU,eAAA,EACV,OAAA,GAAU,eAAA,GACT,MAAA,CAAO,MAAA,SAAe,cAAA;EAjEzB;;;;;;EA6EA,MAAA,CAAO,WAAA,WAAsB,MAAA,CAAO,MAAA,OAAa,cAAA;EApD/C;;;;;;EAgEF,GAAA,CAAI,GAAA,EAAK,cAAA,EAAgB,OAAA;EA5Df;;;;;;;EAuEV,IAAA,CAAK,GAAA,EAAK,cAAA,EAAgB,OAAA,YAAiB,OAAA;EArDxC;;;;;;;EAgEH,QAAA,CAAS,KAAA,GAAQ,OAAA,EAAS,OAAA,YAAmB,OAAA;EA/C3C;;;;;;;;;;;EA8DF,EAAA,CAAG,KAAA,UAAe,QAAA,MAAc,IAAA;EArCP;;;;;;;;;;EAmDzB,KAAA,CAAA,GAAS,MAAA,CAAO,MAAA,OAAa,cAAA;EAd7B;;;;EAAA,OAgCa,+BAAA,CAAA,GAAmC,OAAA;AAAA;;;;;;;;;AD5TlD;;;;;;;;;;cEgBa,0BAAA;EAAA,eACI,QAAA;EAAA,QACP,WAAA;EAAA,QACA,SAAA;EAAA,QAED,WAAA,CAAA;EFKmC;;;;;EAAA,OEEnC,WAAA,CAAA,GAAe,0BAAA;EFCW;;;;;ACSnC;;;;;ECOE,aAAA,CACE,IAAA,EAAM,aAAA,IACN,iBAAA,GAAoB,4BAAA,GACnB,qBAAA;EDPc;;;;;;;;;;ECiCX,iBAAA,CACJ,IAAA,EAAM,aAAA,IACN,iBAAA,GAAoB,4BAAA,GACnB,OAAA;EDpCuC;AAM5C;;;;;;;;;EAN4C,QCgElC,mBAAA;EDrDgB;;;;;;EAAA,QCuEhB,gBAAA;EDrED;AAMT;;;;;EANS,QCiFC,QAAA;EDzER;;;AA+BF;ECkEQ,gBAAA,CAAA,GAAoB,OAAA;AAAA;;;;;;;;;;AF/J5B;KGEY,aAAA,GAAgB,MAAA;EAC1B,KAAA;AAAA;;;;;;;;AHuBF;;;;;;;;;;KGHY,MAAA;EHMuB;;;;ACSnC;EETE,KAAA,CAAM,OAAA,UAAiB,OAAA,GAAU,aAAA;;;;;;EAOjC,IAAA,CAAK,OAAA,UAAiB,OAAA,GAAU,aAAA;EFKR;;;;;EEExB,IAAA,CAAK,OAAA,UAAiB,OAAA,GAAU,aAAA;EFFf;;;;AAMnB;EEGE,KAAA,CAAM,OAAA,UAAiB,OAAA,GAAU,aAAA;AAAA;;;;;;;;AHlDnC;;;;;;;;;;;AA0BA;;;;iBIPsB,iBAAA,CACpB,OAAA,EAAS,OAAA,EACT,QAAA,EAAU,kBAAA,GACT,OAAA;;;;;;;cCJU,4BAAA;EAAA;;;;;;;;;;;;;;;;;;;KA4BD,iBAAA;ELlBQ;;;;EKuBlB,SAAA,QAAiB,MAAA;;;AJbnB;;EImBE,iBAAA,QAAyB,OAAA;EJlBnB;;;;EIwBN,iBAAA,QAAyB,OAAA;EJtBD;;;;EI4BxB,0BAAA,QAAkC,SAAA;EJ5BlC;;;;EIkCA,0BAAA,QAAkC,SAAA;AAAA;;;;cAgHvB,wBAAA,EAA0B,iBAAA;;;;;iBAYvB,gBAAA,CACd,QAAA,EAAU,iBAAA,EACV,YAAA,UACA,UAAA,sBACA,UAAA,GAAa,UAAA,GACZ,IAAA;;;;;iBA8Ba,gBAAA,CACd,QAAA,EAAU,iBAAA,EACV,SAAA,UACA,YAAA,UACA,UAAA,GAAa,UAAA,GACZ,IAAA;;;;iBA2Ba,cAAA,CAAe,IAAA,EAAM,IAAA;;;;iBAerB,YAAA,CAAa,IAAA,EAAM,IAAA,cAAkB,KAAA,EAAO,KAAA;;;;iBAiB5C,mBAAA,CACd,QAAA,EAAU,iBAAA,EACV,YAAA,UACA,UAAA,sBACA,OAAA,WACA,UAAA;AJlNF;;;AAAA,iBIwOgB,mBAAA,CACd,QAAA,EAAU,iBAAA,EACV,SAAA,UACA,YAAA,UACA,OAAA,WACA,UAAA;;;;;;iBAsBc,8BAAA,CAAA"}
|
package/dist/index.d.mts
CHANGED
|
@@ -4,62 +4,6 @@ import { ContractDefinition } from "@amqp-contract/contract";
|
|
|
4
4
|
import { Attributes, Counter, Histogram, Span, Tracer } from "@opentelemetry/api";
|
|
5
5
|
import { Channel, ConsumeMessage, Options } from "amqplib";
|
|
6
6
|
|
|
7
|
-
//#region src/logger.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* Context object for logger methods.
|
|
10
|
-
*
|
|
11
|
-
* This type includes reserved keys that provide consistent naming
|
|
12
|
-
* for common logging context properties.
|
|
13
|
-
*
|
|
14
|
-
* @property error - Error object or error details
|
|
15
|
-
*/
|
|
16
|
-
type LoggerContext = Record<string, unknown> & {
|
|
17
|
-
error?: unknown;
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Logger interface for amqp-contract packages.
|
|
21
|
-
*
|
|
22
|
-
* Provides a simple logging abstraction that can be implemented by users
|
|
23
|
-
* to integrate with their preferred logging framework.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* // Simple console logger implementation
|
|
28
|
-
* const logger: Logger = {
|
|
29
|
-
* debug: (message, context) => console.debug(message, context),
|
|
30
|
-
* info: (message, context) => console.info(message, context),
|
|
31
|
-
* warn: (message, context) => console.warn(message, context),
|
|
32
|
-
* error: (message, context) => console.error(message, context),
|
|
33
|
-
* };
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
type Logger = {
|
|
37
|
-
/**
|
|
38
|
-
* Log debug level messages
|
|
39
|
-
* @param message - The log message
|
|
40
|
-
* @param context - Optional context to include with the log
|
|
41
|
-
*/
|
|
42
|
-
debug(message: string, context?: LoggerContext): void;
|
|
43
|
-
/**
|
|
44
|
-
* Log info level messages
|
|
45
|
-
* @param message - The log message
|
|
46
|
-
* @param context - Optional context to include with the log
|
|
47
|
-
*/
|
|
48
|
-
info(message: string, context?: LoggerContext): void;
|
|
49
|
-
/**
|
|
50
|
-
* Log warning level messages
|
|
51
|
-
* @param message - The log message
|
|
52
|
-
* @param context - Optional context to include with the log
|
|
53
|
-
*/
|
|
54
|
-
warn(message: string, context?: LoggerContext): void;
|
|
55
|
-
/**
|
|
56
|
-
* Log error level messages
|
|
57
|
-
* @param message - The log message
|
|
58
|
-
* @param context - Optional context to include with the log
|
|
59
|
-
*/
|
|
60
|
-
error(message: string, context?: LoggerContext): void;
|
|
61
|
-
};
|
|
62
|
-
//#endregion
|
|
63
7
|
//#region src/errors.d.ts
|
|
64
8
|
/**
|
|
65
9
|
* Error for technical/runtime failures that cannot be prevented by TypeScript.
|
|
@@ -103,6 +47,18 @@ type AmqpClientOptions = {
|
|
|
103
47
|
* Callback type for consuming messages.
|
|
104
48
|
*/
|
|
105
49
|
type ConsumeCallback = (msg: ConsumeMessage | null) => void | Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Publish options that extend amqplib's Options.Publish with optional timeout support.
|
|
52
|
+
*/
|
|
53
|
+
type PublishOptions = Options.Publish & {
|
|
54
|
+
/** Message will be rejected after timeout ms */timeout?: number;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Consume options that extend amqplib's Options.Consume with optional prefetch support.
|
|
58
|
+
*/
|
|
59
|
+
type ConsumerOptions = Options.Consume & {
|
|
60
|
+
/** Number of messages to prefetch */prefetch?: number;
|
|
61
|
+
};
|
|
106
62
|
/**
|
|
107
63
|
* AMQP client that manages connections and channels with automatic topology setup.
|
|
108
64
|
*
|
|
@@ -174,7 +130,16 @@ declare class AmqpClient {
|
|
|
174
130
|
* @param options - Optional publish options
|
|
175
131
|
* @returns A Future with `Result<boolean>` - true if message was sent, false if channel buffer is full
|
|
176
132
|
*/
|
|
177
|
-
publish(exchange: string, routingKey: string, content: Buffer | unknown, options?:
|
|
133
|
+
publish(exchange: string, routingKey: string, content: Buffer | unknown, options?: PublishOptions): Future<Result<boolean, TechnicalError>>;
|
|
134
|
+
/**
|
|
135
|
+
* Publish a message directly to a queue.
|
|
136
|
+
*
|
|
137
|
+
* @param queue - The queue name
|
|
138
|
+
* @param content - The message content (will be JSON serialized if json: true)
|
|
139
|
+
* @param options - Optional publish options
|
|
140
|
+
* @returns A Future with `Result<boolean>` - true if message was sent, false if channel buffer is full
|
|
141
|
+
*/
|
|
142
|
+
sendToQueue(queue: string, content: Buffer | unknown, options?: PublishOptions): Future<Result<boolean, TechnicalError>>;
|
|
178
143
|
/**
|
|
179
144
|
* Start consuming messages from a queue.
|
|
180
145
|
*
|
|
@@ -183,7 +148,7 @@ declare class AmqpClient {
|
|
|
183
148
|
* @param options - Optional consume options
|
|
184
149
|
* @returns A Future with `Result<string>` - the consumer tag
|
|
185
150
|
*/
|
|
186
|
-
consume(queue: string, callback: ConsumeCallback, options?:
|
|
151
|
+
consume(queue: string, callback: ConsumeCallback, options?: ConsumerOptions): Future<Result<string, TechnicalError>>;
|
|
187
152
|
/**
|
|
188
153
|
* Cancel a consumer by its consumer tag.
|
|
189
154
|
*
|
|
@@ -326,6 +291,62 @@ declare class ConnectionManagerSingleton {
|
|
|
326
291
|
_resetForTesting(): Promise<void>;
|
|
327
292
|
}
|
|
328
293
|
//#endregion
|
|
294
|
+
//#region src/logger.d.ts
|
|
295
|
+
/**
|
|
296
|
+
* Context object for logger methods.
|
|
297
|
+
*
|
|
298
|
+
* This type includes reserved keys that provide consistent naming
|
|
299
|
+
* for common logging context properties.
|
|
300
|
+
*
|
|
301
|
+
* @property error - Error object or error details
|
|
302
|
+
*/
|
|
303
|
+
type LoggerContext = Record<string, unknown> & {
|
|
304
|
+
error?: unknown;
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* Logger interface for amqp-contract packages.
|
|
308
|
+
*
|
|
309
|
+
* Provides a simple logging abstraction that can be implemented by users
|
|
310
|
+
* to integrate with their preferred logging framework.
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* ```typescript
|
|
314
|
+
* // Simple console logger implementation
|
|
315
|
+
* const logger: Logger = {
|
|
316
|
+
* debug: (message, context) => console.debug(message, context),
|
|
317
|
+
* info: (message, context) => console.info(message, context),
|
|
318
|
+
* warn: (message, context) => console.warn(message, context),
|
|
319
|
+
* error: (message, context) => console.error(message, context),
|
|
320
|
+
* };
|
|
321
|
+
* ```
|
|
322
|
+
*/
|
|
323
|
+
type Logger = {
|
|
324
|
+
/**
|
|
325
|
+
* Log debug level messages
|
|
326
|
+
* @param message - The log message
|
|
327
|
+
* @param context - Optional context to include with the log
|
|
328
|
+
*/
|
|
329
|
+
debug(message: string, context?: LoggerContext): void;
|
|
330
|
+
/**
|
|
331
|
+
* Log info level messages
|
|
332
|
+
* @param message - The log message
|
|
333
|
+
* @param context - Optional context to include with the log
|
|
334
|
+
*/
|
|
335
|
+
info(message: string, context?: LoggerContext): void;
|
|
336
|
+
/**
|
|
337
|
+
* Log warning level messages
|
|
338
|
+
* @param message - The log message
|
|
339
|
+
* @param context - Optional context to include with the log
|
|
340
|
+
*/
|
|
341
|
+
warn(message: string, context?: LoggerContext): void;
|
|
342
|
+
/**
|
|
343
|
+
* Log error level messages
|
|
344
|
+
* @param message - The log message
|
|
345
|
+
* @param context - Optional context to include with the log
|
|
346
|
+
*/
|
|
347
|
+
error(message: string, context?: LoggerContext): void;
|
|
348
|
+
};
|
|
349
|
+
//#endregion
|
|
329
350
|
//#region src/setup.d.ts
|
|
330
351
|
/**
|
|
331
352
|
* Setup AMQP topology (exchanges, queues, and bindings) from a contract definition.
|
|
@@ -438,5 +459,5 @@ declare function recordConsumeMetric(provider: TelemetryProvider, queueName: str
|
|
|
438
459
|
*/
|
|
439
460
|
declare function _resetTelemetryCacheForTesting(): void;
|
|
440
461
|
//#endregion
|
|
441
|
-
export { AmqpClient, type AmqpClientOptions, ConnectionManagerSingleton, type ConsumeCallback, type Logger, type LoggerContext, MessageValidationError, MessagingSemanticConventions, TechnicalError, type TelemetryProvider, _resetTelemetryCacheForTesting, defaultTelemetryProvider, endSpanError, endSpanSuccess, recordConsumeMetric, recordPublishMetric, setupAmqpTopology, startConsumeSpan, startPublishSpan };
|
|
462
|
+
export { AmqpClient, type AmqpClientOptions, ConnectionManagerSingleton, type ConsumeCallback, type ConsumerOptions, type Logger, type LoggerContext, MessageValidationError, MessagingSemanticConventions, type PublishOptions, TechnicalError, type TelemetryProvider, _resetTelemetryCacheForTesting, defaultTelemetryProvider, endSpanError, endSpanSuccess, recordConsumeMetric, recordPublishMetric, setupAmqpTopology, startConsumeSpan, startPublishSpan };
|
|
442
463
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors.ts","../src/amqp-client.ts","../src/connection-manager.ts","../src/logger.ts","../src/setup.ts","../src/telemetry.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -2,10 +2,8 @@ import { createRequire } from "node:module";
|
|
|
2
2
|
import { Future } from "@swan-io/boxed";
|
|
3
3
|
import amqp from "amqp-connection-manager";
|
|
4
4
|
import { extractQueue } from "@amqp-contract/contract";
|
|
5
|
-
|
|
6
5
|
//#region \0rolldown/runtime.js
|
|
7
6
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
8
|
-
|
|
9
7
|
//#endregion
|
|
10
8
|
//#region src/connection-manager.ts
|
|
11
9
|
/**
|
|
@@ -131,7 +129,6 @@ var ConnectionManagerSingleton = class ConnectionManagerSingleton {
|
|
|
131
129
|
this.refCounts.clear();
|
|
132
130
|
}
|
|
133
131
|
};
|
|
134
|
-
|
|
135
132
|
//#endregion
|
|
136
133
|
//#region src/errors.ts
|
|
137
134
|
/**
|
|
@@ -168,7 +165,6 @@ var MessageValidationError = class extends Error {
|
|
|
168
165
|
if (typeof ErrorConstructor.captureStackTrace === "function") ErrorConstructor.captureStackTrace(this, this.constructor);
|
|
169
166
|
}
|
|
170
167
|
};
|
|
171
|
-
|
|
172
168
|
//#endregion
|
|
173
169
|
//#region src/setup.ts
|
|
174
170
|
/**
|
|
@@ -214,14 +210,11 @@ async function setupAmqpTopology(channel, contract) {
|
|
|
214
210
|
queueArguments["x-dead-letter-exchange"] = queue.deadLetter.exchange.name;
|
|
215
211
|
if (queue.deadLetter.routingKey) queueArguments["x-dead-letter-routing-key"] = queue.deadLetter.routingKey;
|
|
216
212
|
}
|
|
217
|
-
if (queue.type === "quorum") {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
arguments: queueArguments
|
|
223
|
-
});
|
|
224
|
-
}
|
|
213
|
+
if (queue.type === "quorum") return channel.assertQueue(queue.name, {
|
|
214
|
+
durable: true,
|
|
215
|
+
arguments: queueArguments
|
|
216
|
+
});
|
|
217
|
+
if (queue.maxPriority !== void 0) queueArguments["x-max-priority"] = queue.maxPriority;
|
|
225
218
|
return channel.assertQueue(queue.name, {
|
|
226
219
|
durable: queue.durable,
|
|
227
220
|
exclusive: queue.exclusive,
|
|
@@ -236,7 +229,6 @@ async function setupAmqpTopology(channel, contract) {
|
|
|
236
229
|
}))).filter((result) => result.status === "rejected");
|
|
237
230
|
if (bindingErrors.length > 0) throw new AggregateError(bindingErrors.map(({ reason }) => reason), "Failed to setup bindings");
|
|
238
231
|
}
|
|
239
|
-
|
|
240
232
|
//#endregion
|
|
241
233
|
//#region src/amqp-client.ts
|
|
242
234
|
/**
|
|
@@ -301,10 +293,12 @@ var AmqpClient = class {
|
|
|
301
293
|
this.contract = contract;
|
|
302
294
|
this.urls = options.urls;
|
|
303
295
|
if (options.connectionOptions !== void 0) this.connectionOptions = options.connectionOptions;
|
|
304
|
-
|
|
296
|
+
const singleton = ConnectionManagerSingleton.getInstance();
|
|
297
|
+
this.connection = singleton.getConnection(options.urls, options.connectionOptions);
|
|
305
298
|
const defaultSetup = (channel) => setupAmqpTopology(channel, this.contract);
|
|
306
299
|
const { setup: userSetup, ...otherChannelOptions } = options.channelOptions ?? {};
|
|
307
300
|
const channelOpts = {
|
|
301
|
+
confirm: true,
|
|
308
302
|
json: true,
|
|
309
303
|
setup: defaultSetup,
|
|
310
304
|
...otherChannelOptions
|
|
@@ -348,6 +342,17 @@ var AmqpClient = class {
|
|
|
348
342
|
return Future.fromPromise(this.channelWrapper.publish(exchange, routingKey, content, options)).mapError((error) => new TechnicalError("Failed to publish message", error));
|
|
349
343
|
}
|
|
350
344
|
/**
|
|
345
|
+
* Publish a message directly to a queue.
|
|
346
|
+
*
|
|
347
|
+
* @param queue - The queue name
|
|
348
|
+
* @param content - The message content (will be JSON serialized if json: true)
|
|
349
|
+
* @param options - Optional publish options
|
|
350
|
+
* @returns A Future with `Result<boolean>` - true if message was sent, false if channel buffer is full
|
|
351
|
+
*/
|
|
352
|
+
sendToQueue(queue, content, options) {
|
|
353
|
+
return Future.fromPromise(this.channelWrapper.sendToQueue(queue, content, options)).mapError((error) => new TechnicalError("Failed to publish message to queue", error));
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
351
356
|
* Start consuming messages from a queue.
|
|
352
357
|
*
|
|
353
358
|
* @param queue - The queue name
|
|
@@ -431,7 +436,6 @@ var AmqpClient = class {
|
|
|
431
436
|
await ConnectionManagerSingleton.getInstance()._resetForTesting();
|
|
432
437
|
}
|
|
433
438
|
};
|
|
434
|
-
|
|
435
439
|
//#endregion
|
|
436
440
|
//#region src/telemetry.ts
|
|
437
441
|
/**
|
|
@@ -655,7 +659,7 @@ function _resetTelemetryCacheForTesting() {
|
|
|
655
659
|
cachedPublishLatencyHistogram = void 0;
|
|
656
660
|
cachedConsumeLatencyHistogram = void 0;
|
|
657
661
|
}
|
|
658
|
-
|
|
659
662
|
//#endregion
|
|
660
663
|
export { AmqpClient, ConnectionManagerSingleton, MessageValidationError, MessagingSemanticConventions, TechnicalError, _resetTelemetryCacheForTesting, defaultTelemetryProvider, endSpanError, endSpanSuccess, recordConsumeMetric, recordPublishMetric, setupAmqpTopology, startConsumeSpan, startPublishSpan };
|
|
664
|
+
|
|
661
665
|
//# sourceMappingURL=index.mjs.map
|