@ido_kawaz/amqp-client 7.2.0 → 7.3.1
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 +26 -21
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/consumer.d.ts +2 -2
- package/dist/consumer.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,20 +43,19 @@ const config: AmqpConfig = {
|
|
|
43
43
|
};
|
|
44
44
|
|
|
45
45
|
async function bootstrap() {
|
|
46
|
-
const consumer = new Consumer<OrderCreatedPayload>(
|
|
47
|
-
|
|
48
|
-
isOrderCreatedPayload
|
|
49
|
-
async (payload) => {
|
|
46
|
+
const consumer = new Consumer<OrderCreatedPayload, typeof binding>('orders-created-consumer', binding);
|
|
47
|
+
consumer
|
|
48
|
+
.on('validateMessage', isOrderCreatedPayload)
|
|
49
|
+
.on('handleMessage', async (payload) => {
|
|
50
50
|
if (payload.total <= 0) {
|
|
51
|
-
throw new AmqpRetriableError(
|
|
51
|
+
throw new AmqpRetriableError(payload, 'Amount not ready yet', undefined, 5);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
console.log('received order:', payload.orderId);
|
|
55
|
-
}
|
|
56
|
-
);
|
|
55
|
+
});
|
|
57
56
|
|
|
58
57
|
const client = new AmqpClient(config, [consumer]);
|
|
59
|
-
await client.start();
|
|
58
|
+
await client.start('my-service');
|
|
60
59
|
|
|
61
60
|
client.publish('orders.exchange', 'orders.created', {
|
|
62
61
|
orderId: '123',
|
|
@@ -79,17 +78,19 @@ bootstrap().catch(console.error);
|
|
|
79
78
|
|
|
80
79
|
`createAmqpConfig(): AmqpConfig`
|
|
81
80
|
|
|
82
|
-
- Validates `AMQP_CONNECTION_STRING` from `process.env` using
|
|
81
|
+
- Validates `AMQP_CONNECTION_STRING` from `process.env` using Zod
|
|
83
82
|
- Requires URI scheme `amqp` or `amqps`
|
|
84
|
-
- Throws
|
|
83
|
+
- Throws Zod validation error for invalid or missing env value
|
|
85
84
|
|
|
86
85
|
## API
|
|
87
86
|
|
|
88
87
|
### `AmqpClient`
|
|
89
88
|
|
|
90
|
-
- `new AmqpClient(config: AmqpConfig, consumers
|
|
91
|
-
- `start(): Promise<void>`
|
|
89
|
+
- `new AmqpClient(config: AmqpConfig, consumers?: Consumer[])`
|
|
90
|
+
- `start(serviceName: string): Promise<void>`
|
|
92
91
|
- Connects to RabbitMQ and starts all consumer registrations.
|
|
92
|
+
- `registerConsumers(consumers: Consumer[]): void`
|
|
93
|
+
- Adds consumers after construction.
|
|
93
94
|
- `publish<T>(exchange: string, topic: string, message: T): void`
|
|
94
95
|
- Serializes payload to JSON and publishes it.
|
|
95
96
|
- Throws `AmqpUninitializedError` if `start()` has not been called.
|
|
@@ -99,11 +100,14 @@ bootstrap().catch(console.error);
|
|
|
99
100
|
|
|
100
101
|
### `Consumer`
|
|
101
102
|
|
|
102
|
-
- `new Consumer<Payload>(
|
|
103
|
-
- Generic `Payload` type
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
- `new Consumer<Payload, Binding>(consumerName: string, binding: Binding)`
|
|
104
|
+
- Generic `Payload` type must be provided; `Binding` is inferred from the binding parameter.
|
|
105
|
+
- Wire handlers with `.on(event, handler)` (chainable):
|
|
106
|
+
- `validateMessage`: type guard `(payload: object) => payload is Payload`
|
|
107
|
+
- `handleMessage`: `(payload: Payload) => Promise<Output>`
|
|
108
|
+
- `handleSuccess`: `(payload: Payload, response: Output) => Promise<void>`
|
|
109
|
+
- `handleRetriableError`: `(error: AmqpRetriableError, payload: Payload) => Promise<void>`
|
|
110
|
+
- `handleFatalError`: `(error: AmqpFatalError, payload: any) => Promise<void>`
|
|
107
111
|
- `ack`s on success.
|
|
108
112
|
- `nack`s invalid payloads without requeue.
|
|
109
113
|
- `nack`s with requeue for `AmqpRetriableError` while `x-delivery-count < retryLimit`.
|
|
@@ -116,13 +120,14 @@ bootstrap().catch(console.error);
|
|
|
116
120
|
|
|
117
121
|
## Errors
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
Exported error classes:
|
|
124
|
+
|
|
125
|
+
- `AmqpError` (base)
|
|
120
126
|
- `AmqpConnectionError`
|
|
121
|
-
- `AmqpUninitializedError`
|
|
122
127
|
- `AmqpPublisherError`
|
|
123
128
|
- `AmqpConsumerError`
|
|
124
|
-
- `AmqpRetriableError`
|
|
125
|
-
- `AmqpFatalError`
|
|
129
|
+
- `AmqpRetriableError` — has `retryLimit: number`; triggers requeue up to that limit
|
|
130
|
+
- `AmqpFatalError` — triggers nack without requeue
|
|
126
131
|
|
|
127
132
|
## Development
|
|
128
133
|
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACvB,oBAAoB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AASD,eAAO,MAAM,gBAAgB,QAAO,UAMnC,CAAA"}
|
package/dist/config.js
CHANGED
|
@@ -4,11 +4,13 @@ exports.createAmqpConfig = void 0;
|
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const amqpEnvSchema = zod_1.z.object({
|
|
6
6
|
AMQP_CONNECTION_STRING: zod_1.z.url({ protocol: /^amqp(s)?$/ }),
|
|
7
|
+
AMQP_PREFETCH_COUNT: zod_1.z.coerce.number().optional(),
|
|
7
8
|
});
|
|
8
9
|
const createAmqpConfig = () => {
|
|
9
10
|
const amqpEnv = amqpEnvSchema.parse(process.env);
|
|
10
11
|
return {
|
|
11
|
-
amqpConnectionString: amqpEnv.AMQP_CONNECTION_STRING
|
|
12
|
+
amqpConnectionString: amqpEnv.AMQP_CONNECTION_STRING,
|
|
13
|
+
amqpPrefetchCount: amqpEnv.AMQP_PREFETCH_COUNT
|
|
12
14
|
};
|
|
13
15
|
};
|
|
14
16
|
exports.createAmqpConfig = createAmqpConfig;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAQxB,MAAM,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,sBAAsB,EAAE,OAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzD,mBAAmB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAEpD,CAAC,CAAC;AAEI,MAAM,gBAAgB,GAAG,GAAe,EAAE;IAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO;QACH,oBAAoB,EAAE,OAAO,CAAC,sBAAsB;QACpD,iBAAiB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC;AACN,CAAC,CAAA;AANY,QAAA,gBAAgB,oBAM5B"}
|
package/dist/consumer.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ interface ConsumerBinding {
|
|
|
8
8
|
interface ConsumerEvents<Payload extends object, Output = any> {
|
|
9
9
|
validateMessage: (payload: object) => payload is Payload;
|
|
10
10
|
handleMessage: (payload: Payload) => Promise<Output>;
|
|
11
|
-
handleRetriableError:
|
|
12
|
-
handleFatalError: (error:
|
|
11
|
+
handleRetriableError: <T extends AmqpRetriableError<Payload>>(error: T, payload: Payload) => Promise<void>;
|
|
12
|
+
handleFatalError: <T extends AmqpFatalError>(error: T, payload: any) => Promise<void>;
|
|
13
13
|
handleSuccess: (payload: Payload, response: Output) => Promise<void>;
|
|
14
14
|
}
|
|
15
15
|
export declare class Consumer<Payload extends object, Binding extends ConsumerBinding, Output = any> {
|
package/dist/consumer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAyD,MAAM,UAAU,CAAC;AAErH,UAAU,eAAe;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,cAAc,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,GAAG,GAAG;IACzD,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC;IACzD,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,oBAAoB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAyD,MAAM,UAAU,CAAC;AAErH,UAAU,eAAe;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,cAAc,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,GAAG,GAAG;IACzD,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC;IACzD,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,oBAAoB,EAAE,CAAC,CAAC,SAAS,kBAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3G,gBAAgB,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,qBAAa,QAAQ,CAAC,OAAO,SAAS,MAAM,EAAE,OAAO,SAAS,eAAe,EAAE,MAAM,GAAG,GAAG;IAInF,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ5B,OAAO,CAAC,QAAQ,CAAgD;gBAG3C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO;IAG/B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjE,EAAE,CAAC,CAAC,SAAS,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAKhH,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,aAAa;YAOP,aAAa;YAMb,oBAAoB;YAmBpB,gBAAgB;YAgBhB,WAAW;YAiBX,aAAa;IAgB3B,OAAO,CAAC,gBAAgB;YAYV,wBAAwB;YAMxB,WAAW;YAIX,cAAc;YAId,SAAS;CAG1B"}
|