@ido_kawaz/amqp-client 2.0.0 → 3.0.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 +52 -24
- package/dist/__tests__/amqpClient.test.js +38 -24
- package/dist/__tests__/amqpClient.test.js.map +1 -1
- package/dist/__tests__/consumer.test.js +73 -19
- package/dist/__tests__/consumer.test.js.map +1 -1
- package/dist/amqpClient.d.ts +1 -1
- package/dist/amqpClient.d.ts.map +1 -1
- package/dist/amqpClient.js.map +1 -1
- package/dist/binding.d.ts +6 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/binding.js +10 -0
- package/dist/binding.js.map +1 -0
- package/dist/consumer.d.ts +8 -8
- package/dist/consumer.d.ts.map +1 -1
- package/dist/consumer.js +16 -12
- package/dist/consumer.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/kawaz-video-streaming/amqp-client/actions/workflows/ci.yml)
|
|
4
4
|
|
|
5
|
-
TypeScript
|
|
5
|
+
TypeScript AMQP client for RabbitMQ publishers and consumers.
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -10,28 +10,48 @@ TypeScript Amqp client for RabbitMQ publishers and consumers.
|
|
|
10
10
|
npm install @ido_kawaz/amqp-client
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
## Quick
|
|
13
|
+
## Quick Start
|
|
14
14
|
|
|
15
15
|
```ts
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
AmqpClient,
|
|
18
|
+
Consumer,
|
|
19
|
+
createConsumerBinding,
|
|
20
|
+
type AmqpConfig,
|
|
21
|
+
AmqpRetriableError,
|
|
22
|
+
} from '@ido_kawaz/amqp-client';
|
|
23
|
+
|
|
24
|
+
type OrderCreatedPayload = {
|
|
25
|
+
orderId: string;
|
|
26
|
+
total: number;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const binding = createConsumerBinding(
|
|
30
|
+
'orders.created.queue',
|
|
31
|
+
'orders.exchange',
|
|
32
|
+
'orders.created',
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
const isOrderCreatedPayload = (payload: object): payload is OrderCreatedPayload => {
|
|
36
|
+
const candidate = payload as Partial<OrderCreatedPayload>;
|
|
37
|
+
return typeof candidate.orderId === 'string' && typeof candidate.total === 'number';
|
|
38
|
+
};
|
|
17
39
|
|
|
18
40
|
const config: AmqpConfig = {
|
|
19
41
|
amqpConnectionString: 'amqp://guest:guest@localhost:5672',
|
|
20
42
|
};
|
|
21
43
|
|
|
22
44
|
async function bootstrap() {
|
|
23
|
-
const consumer = new Consumer(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return;
|
|
45
|
+
const consumer = new Consumer<OrderCreatedPayload>(
|
|
46
|
+
binding,
|
|
47
|
+
isOrderCreatedPayload,
|
|
48
|
+
async (payload) => {
|
|
49
|
+
if (payload.total <= 0) {
|
|
50
|
+
throw new AmqpRetriableError(new Error('Amount not ready yet'), 5);
|
|
30
51
|
}
|
|
31
52
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
},
|
|
53
|
+
console.log('received order:', payload.orderId);
|
|
54
|
+
}
|
|
35
55
|
);
|
|
36
56
|
|
|
37
57
|
const client = new AmqpClient(config, [consumer]);
|
|
@@ -54,8 +74,7 @@ bootstrap().catch(console.error);
|
|
|
54
74
|
|
|
55
75
|
`AmqpConfig`
|
|
56
76
|
|
|
57
|
-
- `amqpConnectionString`: RabbitMQ
|
|
58
|
-
- Full RabbitMQ connection URL (for example `amqp://guest:guest@localhost:5672`)
|
|
77
|
+
- `amqpConnectionString`: Full RabbitMQ connection URL (for example `amqp://guest:guest@localhost:5672`)
|
|
59
78
|
|
|
60
79
|
## API
|
|
61
80
|
|
|
@@ -65,21 +84,29 @@ bootstrap().catch(console.error);
|
|
|
65
84
|
- `start(): Promise<void>`
|
|
66
85
|
- Connects to RabbitMQ and starts all consumer registrations.
|
|
67
86
|
- `publish<T>(exchange: string, topic: string, message: T): void`
|
|
68
|
-
-
|
|
87
|
+
- Serializes payload to JSON and publishes it.
|
|
69
88
|
- Throws `AmqpUninitializedError` if `start()` has not been called.
|
|
70
|
-
- Throws `AmqpPublisherError` if publish returns false
|
|
89
|
+
- Throws `AmqpPublisherError` if publish returns `false`.
|
|
71
90
|
- `stop(): Promise<void>`
|
|
72
|
-
- Closes channel and connection.
|
|
91
|
+
- Closes channel and connection (if initialized).
|
|
73
92
|
|
|
74
93
|
### `Consumer`
|
|
75
94
|
|
|
76
|
-
- `new Consumer(
|
|
77
|
-
-
|
|
78
|
-
-
|
|
95
|
+
- `new Consumer<Payload>(binding, validatePayload, handlePayload)`
|
|
96
|
+
- Generic `Payload` type is required; binding type is inferred from the binding parameter.
|
|
97
|
+
- `binding: ConsumerBinding` contains `queue`, `exchange`, `topic`.
|
|
98
|
+
- `validatePayload(payload): payload is Payload` validates parsed JSON before handling.
|
|
99
|
+
- `handlePayload(payload)` runs only for valid payloads.
|
|
79
100
|
- `ack`s on success.
|
|
80
|
-
- `nack`s
|
|
101
|
+
- `nack`s invalid payloads without requeue.
|
|
102
|
+
- `nack`s with requeue for `AmqpRetriableError` while `x-delivery-count < retryLimit`.
|
|
81
103
|
- `nack`s without requeue for all other errors.
|
|
82
104
|
|
|
105
|
+
### `createConsumerBinding`
|
|
106
|
+
|
|
107
|
+
- `createConsumerBinding(queue, exchange, topic): ConsumerBinding`
|
|
108
|
+
- Helper for creating typed queue/exchange/topic bindings.
|
|
109
|
+
|
|
83
110
|
## Errors
|
|
84
111
|
|
|
85
112
|
- `AmqpError`
|
|
@@ -97,9 +124,10 @@ bootstrap().catch(console.error);
|
|
|
97
124
|
- `npm run clean` — remove build output
|
|
98
125
|
- `npm test` — run unit tests
|
|
99
126
|
|
|
100
|
-
##
|
|
127
|
+
## Publishing
|
|
128
|
+
|
|
101
129
|
|
|
102
|
-
- `npm run
|
|
130
|
+
- `npm run package`
|
|
103
131
|
- Cleans workspace deeply
|
|
104
132
|
- Reinstalls dependencies
|
|
105
133
|
- Builds library
|
|
@@ -16,23 +16,35 @@ describe('AmqpClient', () => {
|
|
|
16
16
|
const baseConfig = {
|
|
17
17
|
amqpConnectionString: 'amqp://guest:guest@localhost:5672',
|
|
18
18
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const channel = {
|
|
23
|
-
publish: jest.fn().mockReturnValue(true),
|
|
19
|
+
function createChannel(isPublished = true) {
|
|
20
|
+
return {
|
|
21
|
+
publish: jest.fn().mockReturnValue(isPublished),
|
|
24
22
|
close: jest.fn().mockResolvedValue(undefined),
|
|
25
23
|
};
|
|
26
|
-
|
|
24
|
+
}
|
|
25
|
+
function createConnection(channel) {
|
|
26
|
+
return {
|
|
27
27
|
createChannel: jest.fn().mockResolvedValue(channel),
|
|
28
28
|
close: jest.fn().mockResolvedValue(undefined),
|
|
29
29
|
};
|
|
30
|
+
}
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
jest.clearAllMocks();
|
|
33
|
+
});
|
|
34
|
+
it('starts client and starts all registered consumers', async () => {
|
|
35
|
+
const firstConsumerStart = jest.fn().mockResolvedValue(undefined);
|
|
36
|
+
const secondConsumerStart = jest.fn().mockResolvedValue(undefined);
|
|
37
|
+
const firstConsumer = { start: firstConsumerStart };
|
|
38
|
+
const secondConsumer = { start: secondConsumerStart };
|
|
39
|
+
const channel = createChannel();
|
|
40
|
+
const connection = createConnection(channel);
|
|
30
41
|
amqplib_1.default.connect.mockResolvedValue(connection);
|
|
31
|
-
const client = new amqpClient_1.AmqpClient(baseConfig, [
|
|
42
|
+
const client = new amqpClient_1.AmqpClient(baseConfig, [firstConsumer, secondConsumer]);
|
|
32
43
|
await client.start();
|
|
33
44
|
expect(amqplib_1.default.connect).toHaveBeenCalledWith('amqp://guest:guest@localhost:5672');
|
|
34
45
|
expect(connection.createChannel).toHaveBeenCalledTimes(1);
|
|
35
|
-
expect(
|
|
46
|
+
expect(firstConsumerStart).toHaveBeenCalledWith(channel);
|
|
47
|
+
expect(secondConsumerStart).toHaveBeenCalledWith(channel);
|
|
36
48
|
});
|
|
37
49
|
it('throws AmqpConnectionError when connect fails', async () => {
|
|
38
50
|
amqplib_1.default.connect.mockRejectedValue(new Error('boom'));
|
|
@@ -43,29 +55,27 @@ describe('AmqpClient', () => {
|
|
|
43
55
|
const client = new amqpClient_1.AmqpClient(baseConfig, []);
|
|
44
56
|
expect(() => client.publish('ex', 'topic', { x: 1 })).toThrow(errors_1.AmqpUninitializedError);
|
|
45
57
|
});
|
|
58
|
+
it('publishes serialized payload when initialized', async () => {
|
|
59
|
+
const channel = createChannel(true);
|
|
60
|
+
const connection = createConnection(channel);
|
|
61
|
+
amqplib_1.default.connect.mockResolvedValue(connection);
|
|
62
|
+
const client = new amqpClient_1.AmqpClient(baseConfig, []);
|
|
63
|
+
await client.start();
|
|
64
|
+
const payload = { orderId: '1', total: 42 };
|
|
65
|
+
client.publish('orders.exchange', 'orders.created', payload);
|
|
66
|
+
expect(channel.publish).toHaveBeenCalledWith('orders.exchange', 'orders.created', Buffer.from(JSON.stringify(payload)));
|
|
67
|
+
});
|
|
46
68
|
it('throws AmqpPublisherError when publish returns false', async () => {
|
|
47
|
-
const channel =
|
|
48
|
-
|
|
49
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
50
|
-
};
|
|
51
|
-
const connection = {
|
|
52
|
-
createChannel: jest.fn().mockResolvedValue(channel),
|
|
53
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
54
|
-
};
|
|
69
|
+
const channel = createChannel(false);
|
|
70
|
+
const connection = createConnection(channel);
|
|
55
71
|
amqplib_1.default.connect.mockResolvedValue(connection);
|
|
56
72
|
const client = new amqpClient_1.AmqpClient(baseConfig, []);
|
|
57
73
|
await client.start();
|
|
58
74
|
expect(() => client.publish('ex', 'rk', { ok: true })).toThrow(errors_1.AmqpPublisherError);
|
|
59
75
|
});
|
|
60
76
|
it('stops by closing channel and connection', async () => {
|
|
61
|
-
const channel =
|
|
62
|
-
|
|
63
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
64
|
-
};
|
|
65
|
-
const connection = {
|
|
66
|
-
createChannel: jest.fn().mockResolvedValue(channel),
|
|
67
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
68
|
-
};
|
|
77
|
+
const channel = createChannel();
|
|
78
|
+
const connection = createConnection(channel);
|
|
69
79
|
amqplib_1.default.connect.mockResolvedValue(connection);
|
|
70
80
|
const client = new amqpClient_1.AmqpClient(baseConfig, []);
|
|
71
81
|
await client.start();
|
|
@@ -73,5 +83,9 @@ describe('AmqpClient', () => {
|
|
|
73
83
|
expect(channel.close).toHaveBeenCalledTimes(1);
|
|
74
84
|
expect(connection.close).toHaveBeenCalledTimes(1);
|
|
75
85
|
});
|
|
86
|
+
it('stopping before start does not throw', async () => {
|
|
87
|
+
const client = new amqpClient_1.AmqpClient(baseConfig, []);
|
|
88
|
+
await expect(client.stop()).resolves.toBeUndefined();
|
|
89
|
+
});
|
|
76
90
|
});
|
|
77
91
|
//# sourceMappingURL=amqpClient.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amqpClient.test.js","sourceRoot":"","sources":["../../src/__tests__/amqpClient.test.ts"],"names":[],"mappings":";;;;;AAAA,sDAA2B;AAC3B,8CAA2C;AAC3C,sCAA4F;AAE5F,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE;QACL,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;KACrB;CACJ,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,MAAM,UAAU,GAAG;QACf,oBAAoB,EAAE,mCAAmC;KAC5D,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"amqpClient.test.js","sourceRoot":"","sources":["../../src/__tests__/amqpClient.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const consumer_1 = require("../consumer");
|
|
4
4
|
const errors_1 = require("../errors");
|
|
5
|
+
const binding_1 = require("../binding");
|
|
5
6
|
describe('Consumer', () => {
|
|
6
|
-
|
|
7
|
+
const binding = (0, binding_1.createConsumerBinding)('orders.queue', 'orders.exchange', 'orders.created');
|
|
8
|
+
function createMessage(payload = { id: '1' }, deliveryCount) {
|
|
7
9
|
return {
|
|
8
10
|
properties: {
|
|
9
11
|
headers: deliveryCount === undefined ? {} : { 'x-delivery-count': deliveryCount },
|
|
10
12
|
},
|
|
11
|
-
content: Buffer.from(JSON.stringify(
|
|
13
|
+
content: Buffer.from(JSON.stringify(payload)),
|
|
12
14
|
};
|
|
13
15
|
}
|
|
14
16
|
function createChannel() {
|
|
@@ -21,15 +23,20 @@ describe('Consumer', () => {
|
|
|
21
23
|
nack: jest.fn(),
|
|
22
24
|
};
|
|
23
25
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
function createConsumer(validatePayload, handlePayload) {
|
|
27
|
+
return new consumer_1.Consumer(binding, validatePayload, handlePayload);
|
|
28
|
+
}
|
|
29
|
+
function createValidationHarness(implementation) {
|
|
30
|
+
const validatePayloadMock = jest.fn(implementation);
|
|
31
|
+
const validatePayload = (payload) => validatePayloadMock(payload);
|
|
32
|
+
return { validatePayload, validatePayloadMock };
|
|
33
|
+
}
|
|
34
|
+
it('establishes binding and starts consuming from queue', async () => {
|
|
35
|
+
const { validatePayload } = createValidationHarness((payload) => typeof payload.id === 'string');
|
|
36
|
+
const handlePayload = jest.fn().mockResolvedValue(undefined);
|
|
37
|
+
const consumer = createConsumer(validatePayload, handlePayload);
|
|
27
38
|
const channel = createChannel();
|
|
28
|
-
|
|
29
|
-
channel.consume.mockImplementation(async (_queue, onMessage) => {
|
|
30
|
-
await onMessage(message);
|
|
31
|
-
return { consumerTag: 'tag' };
|
|
32
|
-
});
|
|
39
|
+
channel.consume.mockResolvedValue({ consumerTag: 'tag' });
|
|
33
40
|
await consumer.start(channel);
|
|
34
41
|
expect(channel.assertQueue).toHaveBeenCalledWith('orders.queue', {
|
|
35
42
|
durable: true,
|
|
@@ -37,15 +44,60 @@ describe('Consumer', () => {
|
|
|
37
44
|
});
|
|
38
45
|
expect(channel.assertExchange).toHaveBeenCalledWith('orders.exchange', 'topic', { durable: true });
|
|
39
46
|
expect(channel.bindQueue).toHaveBeenCalledWith('orders.queue', 'orders.exchange', 'orders.created');
|
|
40
|
-
expect(
|
|
47
|
+
expect(channel.consume).toHaveBeenCalledWith('orders.queue', expect.any(Function));
|
|
48
|
+
});
|
|
49
|
+
it('ignores null message', async () => {
|
|
50
|
+
const { validatePayload, validatePayloadMock } = createValidationHarness((payload) => typeof payload.id === 'string');
|
|
51
|
+
const handlePayload = jest.fn().mockResolvedValue(undefined);
|
|
52
|
+
const consumer = createConsumer(validatePayload, handlePayload);
|
|
53
|
+
const channel = createChannel();
|
|
54
|
+
channel.consume.mockImplementation(async (_queue, onMessage) => {
|
|
55
|
+
await onMessage(null);
|
|
56
|
+
return { consumerTag: 'tag' };
|
|
57
|
+
});
|
|
58
|
+
await consumer.start(channel);
|
|
59
|
+
expect(validatePayloadMock).not.toHaveBeenCalled();
|
|
60
|
+
expect(handlePayload).not.toHaveBeenCalled();
|
|
61
|
+
expect(channel.ack).not.toHaveBeenCalled();
|
|
62
|
+
expect(channel.nack).not.toHaveBeenCalled();
|
|
63
|
+
});
|
|
64
|
+
it('nacks without requeue when payload validation fails', async () => {
|
|
65
|
+
const { validatePayload, validatePayloadMock } = createValidationHarness((_payload) => false);
|
|
66
|
+
const handlePayload = jest.fn().mockResolvedValue(undefined);
|
|
67
|
+
const consumer = createConsumer(validatePayload, handlePayload);
|
|
68
|
+
const channel = createChannel();
|
|
69
|
+
const message = createMessage({ invalid: true });
|
|
70
|
+
channel.consume.mockImplementation(async (_queue, onMessage) => {
|
|
71
|
+
await onMessage(message);
|
|
72
|
+
return { consumerTag: 'tag' };
|
|
73
|
+
});
|
|
74
|
+
await consumer.start(channel);
|
|
75
|
+
expect(validatePayloadMock).toHaveBeenCalledWith({ invalid: true });
|
|
76
|
+
expect(handlePayload).not.toHaveBeenCalled();
|
|
77
|
+
expect(channel.ack).not.toHaveBeenCalled();
|
|
78
|
+
expect(channel.nack).toHaveBeenCalledWith(message, false, false);
|
|
79
|
+
});
|
|
80
|
+
it('acknowledges message when payload is valid and handler succeeds', async () => {
|
|
81
|
+
const { validatePayload } = createValidationHarness((payload) => typeof payload.id === 'string');
|
|
82
|
+
const handlePayload = jest.fn().mockResolvedValue(undefined);
|
|
83
|
+
const consumer = createConsumer(validatePayload, handlePayload);
|
|
84
|
+
const channel = createChannel();
|
|
85
|
+
const message = createMessage({ id: '123' });
|
|
86
|
+
channel.consume.mockImplementation(async (_queue, onMessage) => {
|
|
87
|
+
await onMessage(message);
|
|
88
|
+
return { consumerTag: 'tag' };
|
|
89
|
+
});
|
|
90
|
+
await consumer.start(channel);
|
|
91
|
+
expect(handlePayload).toHaveBeenCalledWith({ id: '123' });
|
|
41
92
|
expect(channel.ack).toHaveBeenCalledWith(message);
|
|
42
93
|
expect(channel.nack).not.toHaveBeenCalled();
|
|
43
94
|
});
|
|
44
95
|
it('requeues retriable error when delivery count is below retry limit', async () => {
|
|
45
|
-
const
|
|
46
|
-
const
|
|
96
|
+
const { validatePayload } = createValidationHarness((payload) => typeof payload.id === 'string');
|
|
97
|
+
const handlePayload = jest.fn().mockRejectedValue(new errors_1.AmqpRetriableError(new Error('retry'), 3));
|
|
98
|
+
const consumer = createConsumer(validatePayload, handlePayload);
|
|
47
99
|
const channel = createChannel();
|
|
48
|
-
const message = createMessage(1);
|
|
100
|
+
const message = createMessage({ id: '1' }, 1);
|
|
49
101
|
channel.consume.mockImplementation(async (_queue, onMessage) => {
|
|
50
102
|
await onMessage(message);
|
|
51
103
|
return { consumerTag: 'tag' };
|
|
@@ -54,10 +106,11 @@ describe('Consumer', () => {
|
|
|
54
106
|
expect(channel.nack).toHaveBeenCalledWith(message, false, true);
|
|
55
107
|
});
|
|
56
108
|
it('does not requeue retriable error after retry limit', async () => {
|
|
57
|
-
const
|
|
58
|
-
const
|
|
109
|
+
const { validatePayload } = createValidationHarness((payload) => typeof payload.id === 'string');
|
|
110
|
+
const handlePayload = jest.fn().mockRejectedValue(new errors_1.AmqpRetriableError(new Error('retry'), 2));
|
|
111
|
+
const consumer = createConsumer(validatePayload, handlePayload);
|
|
59
112
|
const channel = createChannel();
|
|
60
|
-
const message = createMessage('2');
|
|
113
|
+
const message = createMessage({ id: '1' }, '2');
|
|
61
114
|
channel.consume.mockImplementation(async (_queue, onMessage) => {
|
|
62
115
|
await onMessage(message);
|
|
63
116
|
return { consumerTag: 'tag' };
|
|
@@ -66,8 +119,9 @@ describe('Consumer', () => {
|
|
|
66
119
|
expect(channel.nack).toHaveBeenCalledWith(message, false, false);
|
|
67
120
|
});
|
|
68
121
|
it('nacks without requeue for non-retriable errors', async () => {
|
|
69
|
-
const
|
|
70
|
-
const
|
|
122
|
+
const { validatePayload } = createValidationHarness((payload) => typeof payload.id === 'string');
|
|
123
|
+
const handlePayload = jest.fn().mockRejectedValue(new Error('bad-message'));
|
|
124
|
+
const consumer = createConsumer(validatePayload, handlePayload);
|
|
71
125
|
const channel = createChannel();
|
|
72
126
|
const message = createMessage();
|
|
73
127
|
channel.consume.mockImplementation(async (_queue, onMessage) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumer.test.js","sourceRoot":"","sources":["../../src/__tests__/consumer.test.ts"],"names":[],"mappings":";;AAAA,0CAAuC;AACvC,sCAA+C;
|
|
1
|
+
{"version":3,"file":"consumer.test.js","sourceRoot":"","sources":["../../src/__tests__/consumer.test.ts"],"names":[],"mappings":"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"}
|
package/dist/amqpClient.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare class AmqpClient {
|
|
|
6
6
|
private readonly consumers;
|
|
7
7
|
connection: ChannelModel | undefined;
|
|
8
8
|
channel: Channel | undefined;
|
|
9
|
-
constructor(config: AmqpConfig, consumers: Consumer[]);
|
|
9
|
+
constructor(config: AmqpConfig, consumers: Consumer<any, any>[]);
|
|
10
10
|
start(): Promise<void>;
|
|
11
11
|
publish<T>(exchange: string, topic: string, message: T): void;
|
|
12
12
|
stop(): Promise<void>;
|
package/dist/amqpClient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amqpClient.d.ts","sourceRoot":"","sources":["../src/amqpClient.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,UAAU;IAGP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAc,OAAO,CAAC,QAAQ,CAAC,SAAS;IAF3E,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;gBACA,MAAM,EAAE,UAAU,EAAmB,SAAS,EAAE,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"amqpClient.d.ts","sourceRoot":"","sources":["../src/amqpClient.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,UAAU;IAGP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAc,OAAO,CAAC,QAAQ,CAAC,SAAS;IAF3E,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;gBACA,MAAM,EAAE,UAAU,EAAmB,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IAG3F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAWvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ9B"}
|
package/dist/amqpClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amqpClient.js","sourceRoot":"","sources":["../src/amqpClient.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAsD;AAEtD,qCAA2F;AAC3F,iCAAwC;AAGxC,MAAa,UAAU;IAGnB,YAA6B,MAAkB,EAAmB,
|
|
1
|
+
{"version":3,"file":"amqpClient.js","sourceRoot":"","sources":["../src/amqpClient.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAsD;AAEtD,qCAA2F;AAC3F,iCAAwC;AAGxC,MAAa,UAAU;IAGnB,YAA6B,MAAkB,EAAmB,SAA+B;QAApE,WAAM,GAAN,MAAM,CAAY;QAAmB,cAAS,GAAT,SAAS,CAAsB;IACjG,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,iBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBACnE,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7E,OAAO,OAAO,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,4BAAmB,CAAE,KAAe,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACxH,CAAC;IACL,CAAC;IAED,OAAO,CAAI,QAAgB,EAAE,KAAa,EAAE,OAAU;QAClD,IAAI,IAAA,aAAK,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,+BAAsB,EAAE,CAAC;QACvC,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,2BAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,IAAA,gBAAQ,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,IAAA,gBAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;IACL,CAAC;CACJ;AAtCD,gCAsCC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const createConsumerBinding: <Queue extends string, Exchange extends string, Topic extends string>(queue: Queue, exchange: Exchange, topic: Topic) => {
|
|
2
|
+
readonly queue: Queue;
|
|
3
|
+
readonly exchange: Exchange;
|
|
4
|
+
readonly topic: Topic;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,GAC9B,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,MAAM,EACvB,KAAK,SAAS,MAAM,EACtB,OAAO,KAAK,EAAE,UAAU,QAAQ,EAAE,OAAO,KAAK;;;;CAIrC,CAAC"}
|
package/dist/binding.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createConsumerBinding = void 0;
|
|
4
|
+
const createConsumerBinding = (queue, exchange, topic) => ({
|
|
5
|
+
queue,
|
|
6
|
+
exchange,
|
|
7
|
+
topic,
|
|
8
|
+
});
|
|
9
|
+
exports.createConsumerBinding = createConsumerBinding;
|
|
10
|
+
//# sourceMappingURL=binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":";;;AAAO,MAAM,qBAAqB,GAAG,CAInC,KAAY,EAAE,QAAkB,EAAE,KAAY,EAAE,EAAE,CAAC,CAAC;IAClD,KAAK;IACL,QAAQ;IACR,KAAK;CACE,CAAA,CAAC;AARC,QAAA,qBAAqB,yBAQtB"}
|
package/dist/consumer.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
private readonly
|
|
5
|
-
private readonly
|
|
6
|
-
private readonly
|
|
7
|
-
constructor(
|
|
1
|
+
import { Channel } from 'amqplib';
|
|
2
|
+
import { ConsumerBinding } from './types';
|
|
3
|
+
export declare class Consumer<Payload extends object, Binding extends ConsumerBinding> {
|
|
4
|
+
private readonly binding;
|
|
5
|
+
private readonly validatePayload;
|
|
6
|
+
private readonly handlePayload;
|
|
7
|
+
constructor(binding: Binding, validatePayload: (payload: object) => payload is Payload, handlePayload: (payload: Payload) => Promise<void>);
|
|
8
8
|
start(channel: Channel): Promise<void>;
|
|
9
9
|
private shouldRequeue;
|
|
10
10
|
private getDeliveryCount;
|
|
11
|
-
private
|
|
11
|
+
private establishConsumerBinding;
|
|
12
12
|
private assertQueue;
|
|
13
13
|
private assertExchange;
|
|
14
14
|
private bindQueue;
|
package/dist/consumer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,qBAAa,QAAQ,CAAC,OAAO,SAAS,MAAM,EAAE,OAAO,SAAS,eAAe;IAErE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,IAAI,OAAO,EACxD,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC;IAGjE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB5C,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;YAYV,wBAAwB;YAMxB,WAAW;YAIX,cAAc;YAId,SAAS;CAG1B"}
|
package/dist/consumer.js
CHANGED
|
@@ -3,20 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Consumer = void 0;
|
|
4
4
|
const errors_1 = require("./errors");
|
|
5
5
|
class Consumer {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
10
|
-
this.handler = handler;
|
|
6
|
+
constructor(binding, validatePayload, handlePayload) {
|
|
7
|
+
this.binding = binding;
|
|
8
|
+
this.validatePayload = validatePayload;
|
|
9
|
+
this.handlePayload = handlePayload;
|
|
11
10
|
}
|
|
12
11
|
async start(channel) {
|
|
13
|
-
await this.
|
|
14
|
-
await channel.consume(this.queue, async (message) => {
|
|
12
|
+
await this.establishConsumerBinding(channel);
|
|
13
|
+
await channel.consume(this.binding.queue, async (message) => {
|
|
15
14
|
if (!message) {
|
|
16
15
|
return;
|
|
17
16
|
}
|
|
17
|
+
const payload = JSON.parse(message.content.toString());
|
|
18
|
+
if (!this.validatePayload(payload)) {
|
|
19
|
+
channel.nack(message, false, false);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
18
22
|
try {
|
|
19
|
-
await this.
|
|
23
|
+
await this.handlePayload(payload);
|
|
20
24
|
channel.ack(message);
|
|
21
25
|
}
|
|
22
26
|
catch (error) {
|
|
@@ -45,10 +49,10 @@ class Consumer {
|
|
|
45
49
|
}
|
|
46
50
|
return 0;
|
|
47
51
|
}
|
|
48
|
-
async
|
|
49
|
-
await this.assertQueue(channel, queue);
|
|
50
|
-
await this.assertExchange(channel, exchange);
|
|
51
|
-
await this.bindQueue(channel, queue, exchange, topic);
|
|
52
|
+
async establishConsumerBinding(channel) {
|
|
53
|
+
await this.assertQueue(channel, this.binding.queue);
|
|
54
|
+
await this.assertExchange(channel, this.binding.exchange);
|
|
55
|
+
await this.bindQueue(channel, this.binding.queue, this.binding.exchange, this.binding.topic);
|
|
52
56
|
}
|
|
53
57
|
async assertQueue(channel, queue) {
|
|
54
58
|
await channel.assertQueue(queue, { durable: true, arguments: { 'x-queue-type': 'quorum' } });
|
package/dist/consumer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumer.js","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":";;;AACA,qCAA8C;
|
|
1
|
+
{"version":3,"file":"consumer.js","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":";;;AACA,qCAA8C;AAG9C,MAAa,QAAQ;IACjB,YACqB,OAAgB,EAChB,eAAwD,EACxD,aAAkD;QAFlD,YAAO,GAAP,OAAO,CAAS;QAChB,oBAAe,GAAf,eAAe,CAAyC;QACxD,kBAAa,GAAb,aAAa,CAAqC;IACnE,CAAC;IAEL,KAAK,CAAC,KAAK,CAAC,OAAgB;QACxB,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO;YACX,CAAC;YACD,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACpC,OAAO;YACX,CAAC;YACD,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,KAAK,YAAY,2BAAkB,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxC,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,aAAa,CAAC,OAAqB,EAAE,UAAkB;QAC3D,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;IACvD,CAAC;IAEO,gBAAgB,CAAC,OAAqB;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC;QACvE,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,aAAa,CAAC;QACzB,CAAC;aAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,OAAO,WAAW,CAAC;YACvB,CAAC;QACL,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IACO,KAAK,CAAC,wBAAwB,CAAC,OAAgB;QACnD,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAgB,EAAE,KAAa;QACrD,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAgB,EAAE,QAAgB;QAC3D,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,OAAgB,EAAE,KAAa,EAAE,QAAgB,EAAE,KAAa;QACpF,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;CACJ;AAhED,4BAgEC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { AmqpClient } from './amqpClient';
|
|
2
2
|
export { AmqpConfig } from './config';
|
|
3
3
|
export { Consumer } from './consumer';
|
|
4
|
+
export { createConsumerBinding } from './binding';
|
|
4
5
|
export { AmqpError, AmqpConnectionError, AmqpPublisherError, AmqpConsumerError, AmqpRetriableError, AmqpFatalError, } from './errors';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACH,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACjB,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EACH,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACjB,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AmqpFatalError = exports.AmqpRetriableError = exports.AmqpConsumerError = exports.AmqpPublisherError = exports.AmqpConnectionError = exports.AmqpError = exports.Consumer = exports.AmqpClient = void 0;
|
|
3
|
+
exports.AmqpFatalError = exports.AmqpRetriableError = exports.AmqpConsumerError = exports.AmqpPublisherError = exports.AmqpConnectionError = exports.AmqpError = exports.createConsumerBinding = exports.Consumer = exports.AmqpClient = void 0;
|
|
4
4
|
var amqpClient_1 = require("./amqpClient");
|
|
5
5
|
Object.defineProperty(exports, "AmqpClient", { enumerable: true, get: function () { return amqpClient_1.AmqpClient; } });
|
|
6
6
|
var consumer_1 = require("./consumer");
|
|
7
7
|
Object.defineProperty(exports, "Consumer", { enumerable: true, get: function () { return consumer_1.Consumer; } });
|
|
8
|
+
var binding_1 = require("./binding");
|
|
9
|
+
Object.defineProperty(exports, "createConsumerBinding", { enumerable: true, get: function () { return binding_1.createConsumerBinding; } });
|
|
8
10
|
var errors_1 = require("./errors");
|
|
9
11
|
Object.defineProperty(exports, "AmqpError", { enumerable: true, get: function () { return errors_1.AmqpError; } });
|
|
10
12
|
Object.defineProperty(exports, "AmqpConnectionError", { enumerable: true, get: function () { return errors_1.AmqpConnectionError; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AAEnB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,mCAOkB;AANd,mGAAA,SAAS,OAAA;AACT,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAClB,2GAAA,iBAAiB,OAAA;AACjB,4GAAA,kBAAkB,OAAA;AAClB,wGAAA,cAAc,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AAEnB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,qCAAkD;AAAzC,gHAAA,qBAAqB,OAAA;AAC9B,mCAOkB;AANd,mGAAA,SAAS,OAAA;AACT,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAClB,2GAAA,iBAAiB,OAAA;AACjB,4GAAA,kBAAkB,OAAA;AAClB,wGAAA,cAAc,OAAA"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,oBAAoB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,CAAC;CACd"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,oBAAoB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB"}
|