amqplib 0.10.8 → 1.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/.claude/commands/lint-disable.md +9 -0
- package/.claude/commands/lint-enable.md +12 -0
- package/.claude/settings.local.json +16 -0
- package/.github/workflows/publish.yml +1 -1
- package/.github/workflows/test.yml +1 -1
- package/CHANGELOG.md +34 -0
- package/CLAUDE.md +12 -0
- package/Makefile +5 -12
- package/bin/generate-defs.js +382 -369
- package/biome.json +51 -0
- package/callback_api.js +12 -8
- package/channel_api.js +5 -10
- package/examples/direct_reply_to_client.js +9 -5
- package/examples/direct_reply_to_server.js +8 -6
- package/examples/headers.js +13 -10
- package/examples/receive_generator.js +13 -20
- package/examples/send_generators.js +2 -9
- package/examples/ssl.js +2 -3
- package/examples/stream_queues/receive_stream.js +39 -36
- package/examples/stream_queues/send_stream.js +26 -29
- package/examples/tutorials/callback_api/emit_log.js +4 -3
- package/examples/tutorials/callback_api/emit_log_direct.js +5 -4
- package/examples/tutorials/callback_api/emit_log_topic.js +5 -4
- package/examples/tutorials/callback_api/new_task.js +5 -4
- package/examples/tutorials/callback_api/receive.js +16 -10
- package/examples/tutorials/callback_api/receive_logs.js +17 -11
- package/examples/tutorials/callback_api/receive_logs_direct.js +19 -13
- package/examples/tutorials/callback_api/receive_logs_topic.js +19 -14
- package/examples/tutorials/callback_api/rpc_client.js +20 -16
- package/examples/tutorials/callback_api/rpc_server.js +27 -21
- package/examples/tutorials/callback_api/send.js +4 -3
- package/examples/tutorials/callback_api/worker.js +18 -13
- package/examples/tutorials/emit_log.js +4 -6
- package/examples/tutorials/emit_log_direct.js +5 -7
- package/examples/tutorials/emit_log_topic.js +5 -7
- package/examples/tutorials/new_task.js +4 -6
- package/examples/tutorials/receive.js +8 -4
- package/examples/tutorials/receive_logs.js +10 -6
- package/examples/tutorials/receive_logs_direct.js +16 -10
- package/examples/tutorials/receive_logs_topic.js +16 -11
- package/examples/tutorials/rpc_client.js +17 -15
- package/examples/tutorials/rpc_server.js +9 -8
- package/examples/tutorials/send.js +4 -6
- package/examples/tutorials/worker.js +17 -14
- package/examples/waitForConfirms.js +2 -2
- package/lefthook.yml +14 -0
- package/lib/api_args.js +124 -149
- package/lib/bitset.js +28 -18
- package/lib/callback_model.js +134 -190
- package/lib/channel.js +175 -213
- package/lib/channel_model.js +41 -85
- package/lib/codec.js +257 -228
- package/lib/connect.js +74 -82
- package/lib/connection.js +204 -240
- package/lib/credentials.js +21 -29
- package/lib/defs.js +2559 -1927
- package/lib/error.js +5 -6
- package/lib/format.js +15 -33
- package/lib/frame.js +66 -66
- package/lib/heartbeat.js +17 -24
- package/lib/mux.js +32 -41
- package/package.json +8 -5
- package/test/bitset.test.js +65 -0
- package/test/callback_api.test.js +438 -0
- package/test/channel.test.js +592 -0
- package/test/channel_api.test.js +537 -0
- package/test/codec.test.js +172 -0
- package/test/connect.test.js +196 -0
- package/test/connection.test.js +330 -0
- package/test/data.test.js +33 -0
- package/test/frame.test.js +180 -0
- package/test/lib/data.js +249 -0
- package/test/lib/util.js +223 -0
- package/test/mux.test.js +215 -0
- package/test/bitset.js +0 -69
- package/test/callback_api.js +0 -379
- package/test/channel.js +0 -621
- package/test/channel_api.js +0 -606
- package/test/codec.js +0 -237
- package/test/connect.js +0 -197
- package/test/connection.js +0 -390
- package/test/data.js +0 -269
- package/test/frame.js +0 -191
- package/test/mux.js +0 -203
- package/test/util.js +0 -217
package/lib/callback_model.js
CHANGED
|
@@ -1,26 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var defs = require('./defs');
|
|
8
|
-
var EventEmitter = require('events');
|
|
9
|
-
var BaseChannel = require('./channel').BaseChannel;
|
|
10
|
-
var acceptMessage = require('./channel').acceptMessage;
|
|
11
|
-
var Args = require('./api_args');
|
|
1
|
+
const defs = require('./defs');
|
|
2
|
+
const EventEmitter = require('node:events');
|
|
3
|
+
const BaseChannel = require('./channel').BaseChannel;
|
|
4
|
+
const acceptMessage = require('./channel').acceptMessage;
|
|
5
|
+
const Args = require('./api_args');
|
|
12
6
|
|
|
13
7
|
class CallbackModel extends EventEmitter {
|
|
14
|
-
constructor
|
|
8
|
+
constructor(connection) {
|
|
15
9
|
super();
|
|
16
10
|
this.connection = connection;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
connection.on(ev, self.emit.bind(self, ev));
|
|
11
|
+
['error', 'close', 'blocked', 'unblocked'].forEach((ev) => {
|
|
12
|
+
connection.on(ev, this.emit.bind(this, ev));
|
|
20
13
|
});
|
|
21
14
|
}
|
|
22
15
|
|
|
23
|
-
close
|
|
16
|
+
close(cb) {
|
|
24
17
|
this.connection.close(cb);
|
|
25
18
|
}
|
|
26
19
|
|
|
@@ -28,40 +21,34 @@ class CallbackModel extends EventEmitter {
|
|
|
28
21
|
this.connection._updateSecret(newSecret, reason, cb);
|
|
29
22
|
}
|
|
30
23
|
|
|
31
|
-
createChannel
|
|
32
|
-
if (
|
|
24
|
+
createChannel(options, cb) {
|
|
25
|
+
if (cb === undefined) {
|
|
33
26
|
cb = options;
|
|
34
27
|
options = undefined;
|
|
35
28
|
}
|
|
36
|
-
|
|
29
|
+
const ch = new Channel(this.connection);
|
|
37
30
|
ch.setOptions(options);
|
|
38
|
-
ch.open(
|
|
39
|
-
if (err === null)
|
|
40
|
-
|
|
41
|
-
else
|
|
42
|
-
cb && cb(err);
|
|
31
|
+
ch.open((err, _ok) => {
|
|
32
|
+
if (err === null) cb && cb(null, ch);
|
|
33
|
+
else cb && cb(err);
|
|
43
34
|
});
|
|
44
35
|
return ch;
|
|
45
36
|
}
|
|
46
37
|
|
|
47
|
-
createConfirmChannel
|
|
48
|
-
if (
|
|
38
|
+
createConfirmChannel(options, cb) {
|
|
39
|
+
if (cb === undefined) {
|
|
49
40
|
cb = options;
|
|
50
41
|
options = undefined;
|
|
51
42
|
}
|
|
52
|
-
|
|
43
|
+
const ch = new ConfirmChannel(this.connection);
|
|
53
44
|
ch.setOptions(options);
|
|
54
|
-
ch.open(
|
|
55
|
-
if (err !== null)
|
|
56
|
-
return cb && cb(err);
|
|
45
|
+
ch.open((err) => {
|
|
46
|
+
if (err !== null) return cb && cb(err);
|
|
57
47
|
else {
|
|
58
|
-
ch.rpc(defs.ConfirmSelect, { nowait: false },
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
else
|
|
63
|
-
cb && cb(null, ch);
|
|
64
|
-
});
|
|
48
|
+
ch.rpc(defs.ConfirmSelect, { nowait: false }, defs.ConfirmSelectOk, (err, _ok) => {
|
|
49
|
+
if (err !== null) return cb && cb(err);
|
|
50
|
+
else cb && cb(null, ch);
|
|
51
|
+
});
|
|
65
52
|
}
|
|
66
53
|
});
|
|
67
54
|
return ch;
|
|
@@ -69,7 +56,7 @@ class CallbackModel extends EventEmitter {
|
|
|
69
56
|
}
|
|
70
57
|
|
|
71
58
|
class Channel extends BaseChannel {
|
|
72
|
-
constructor
|
|
59
|
+
constructor(connection) {
|
|
73
60
|
super(connection);
|
|
74
61
|
this.on('delivery', this.handleDelivery.bind(this));
|
|
75
62
|
this.on('cancel', this.handleCancel.bind(this));
|
|
@@ -81,9 +68,9 @@ class Channel extends BaseChannel {
|
|
|
81
68
|
// needs to have side-effects, or needs to change the server response,
|
|
82
69
|
// use `#_rpc(...)` and remember to dereference `.fields` of the
|
|
83
70
|
// server response.
|
|
84
|
-
rpc
|
|
85
|
-
|
|
86
|
-
this._rpc(method, fields, expect,
|
|
71
|
+
rpc(method, fields, expect, cb0) {
|
|
72
|
+
const cb = callbackWrapper(this, cb0);
|
|
73
|
+
this._rpc(method, fields, expect, (err, ok) => {
|
|
87
74
|
cb(err, ok && ok.fields); // in case of an error, ok will be
|
|
88
75
|
|
|
89
76
|
// undefined
|
|
@@ -92,248 +79,205 @@ class Channel extends BaseChannel {
|
|
|
92
79
|
}
|
|
93
80
|
|
|
94
81
|
// === Public API ===
|
|
95
|
-
open
|
|
96
|
-
try {
|
|
97
|
-
|
|
82
|
+
open(cb) {
|
|
83
|
+
try {
|
|
84
|
+
this.allocate();
|
|
85
|
+
} catch (e) {
|
|
86
|
+
return cb(e);
|
|
87
|
+
}
|
|
98
88
|
|
|
99
|
-
return this.rpc(defs.ChannelOpen, { outOfBand:
|
|
100
|
-
defs.ChannelOpenOk, cb);
|
|
89
|
+
return this.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk, cb);
|
|
101
90
|
}
|
|
102
91
|
|
|
103
|
-
close
|
|
104
|
-
return this.closeBecause(
|
|
105
|
-
|
|
92
|
+
close(cb) {
|
|
93
|
+
return this.closeBecause('Goodbye', defs.constants.REPLY_SUCCESS, () => {
|
|
94
|
+
cb && cb(null);
|
|
95
|
+
});
|
|
106
96
|
}
|
|
107
97
|
|
|
108
|
-
assertQueue
|
|
109
|
-
return this.rpc(defs.QueueDeclare,
|
|
110
|
-
Args.assertQueue(queue, options),
|
|
111
|
-
defs.QueueDeclareOk, cb);
|
|
98
|
+
assertQueue(queue, options, cb) {
|
|
99
|
+
return this.rpc(defs.QueueDeclare, Args.assertQueue(queue, options), defs.QueueDeclareOk, cb);
|
|
112
100
|
}
|
|
113
101
|
|
|
114
|
-
checkQueue
|
|
115
|
-
return this.rpc(defs.QueueDeclare,
|
|
116
|
-
Args.checkQueue(queue),
|
|
117
|
-
defs.QueueDeclareOk, cb);
|
|
102
|
+
checkQueue(queue, cb) {
|
|
103
|
+
return this.rpc(defs.QueueDeclare, Args.checkQueue(queue), defs.QueueDeclareOk, cb);
|
|
118
104
|
}
|
|
119
105
|
|
|
120
|
-
deleteQueue
|
|
121
|
-
return this.rpc(defs.QueueDelete,
|
|
122
|
-
Args.deleteQueue(queue, options),
|
|
123
|
-
defs.QueueDeleteOk, cb);
|
|
106
|
+
deleteQueue(queue, options, cb) {
|
|
107
|
+
return this.rpc(defs.QueueDelete, Args.deleteQueue(queue, options), defs.QueueDeleteOk, cb);
|
|
124
108
|
}
|
|
125
109
|
|
|
126
|
-
purgeQueue
|
|
127
|
-
return this.rpc(defs.QueuePurge,
|
|
128
|
-
Args.purgeQueue(queue),
|
|
129
|
-
defs.QueuePurgeOk, cb);
|
|
110
|
+
purgeQueue(queue, cb) {
|
|
111
|
+
return this.rpc(defs.QueuePurge, Args.purgeQueue(queue), defs.QueuePurgeOk, cb);
|
|
130
112
|
}
|
|
131
113
|
|
|
132
|
-
bindQueue
|
|
133
|
-
return this.rpc(defs.QueueBind,
|
|
134
|
-
Args.bindQueue(queue, source, pattern, argt),
|
|
135
|
-
defs.QueueBindOk, cb);
|
|
114
|
+
bindQueue(queue, source, pattern, argt, cb) {
|
|
115
|
+
return this.rpc(defs.QueueBind, Args.bindQueue(queue, source, pattern, argt), defs.QueueBindOk, cb);
|
|
136
116
|
}
|
|
137
117
|
|
|
138
|
-
unbindQueue
|
|
139
|
-
return this.rpc(defs.QueueUnbind,
|
|
140
|
-
Args.unbindQueue(queue, source, pattern, argt),
|
|
141
|
-
defs.QueueUnbindOk, cb);
|
|
118
|
+
unbindQueue(queue, source, pattern, argt, cb) {
|
|
119
|
+
return this.rpc(defs.QueueUnbind, Args.unbindQueue(queue, source, pattern, argt), defs.QueueUnbindOk, cb);
|
|
142
120
|
}
|
|
143
121
|
|
|
144
|
-
assertExchange
|
|
145
|
-
|
|
146
|
-
this._rpc(defs.ExchangeDeclare,
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
function (e, _) { cb(e, { exchange: ex }); });
|
|
122
|
+
assertExchange(ex, type, options, cb0) {
|
|
123
|
+
const cb = callbackWrapper(this, cb0);
|
|
124
|
+
this._rpc(defs.ExchangeDeclare, Args.assertExchange(ex, type, options), defs.ExchangeDeclareOk, (e, _) => {
|
|
125
|
+
cb(e, { exchange: ex });
|
|
126
|
+
});
|
|
150
127
|
return this;
|
|
151
128
|
}
|
|
152
129
|
|
|
153
|
-
checkExchange
|
|
154
|
-
return this.rpc(defs.ExchangeDeclare,
|
|
155
|
-
Args.checkExchange(exchange),
|
|
156
|
-
defs.ExchangeDeclareOk, cb);
|
|
130
|
+
checkExchange(exchange, cb) {
|
|
131
|
+
return this.rpc(defs.ExchangeDeclare, Args.checkExchange(exchange), defs.ExchangeDeclareOk, cb);
|
|
157
132
|
}
|
|
158
133
|
|
|
159
|
-
deleteExchange
|
|
160
|
-
return this.rpc(defs.ExchangeDelete,
|
|
161
|
-
Args.deleteExchange(exchange, options),
|
|
162
|
-
defs.ExchangeDeleteOk, cb);
|
|
134
|
+
deleteExchange(exchange, options, cb) {
|
|
135
|
+
return this.rpc(defs.ExchangeDelete, Args.deleteExchange(exchange, options), defs.ExchangeDeleteOk, cb);
|
|
163
136
|
}
|
|
164
137
|
|
|
165
|
-
bindExchange
|
|
166
|
-
return this.rpc(defs.ExchangeBind,
|
|
167
|
-
Args.bindExchange(dest, source, pattern, argt),
|
|
168
|
-
defs.ExchangeBindOk, cb);
|
|
138
|
+
bindExchange(dest, source, pattern, argt, cb) {
|
|
139
|
+
return this.rpc(defs.ExchangeBind, Args.bindExchange(dest, source, pattern, argt), defs.ExchangeBindOk, cb);
|
|
169
140
|
}
|
|
170
141
|
|
|
171
|
-
unbindExchange
|
|
172
|
-
return this.rpc(defs.ExchangeUnbind,
|
|
173
|
-
Args.unbindExchange(dest, source, pattern, argt),
|
|
174
|
-
defs.ExchangeUnbindOk, cb);
|
|
142
|
+
unbindExchange(dest, source, pattern, argt, cb) {
|
|
143
|
+
return this.rpc(defs.ExchangeUnbind, Args.unbindExchange(dest, source, pattern, argt), defs.ExchangeUnbindOk, cb);
|
|
175
144
|
}
|
|
176
145
|
|
|
177
|
-
publish
|
|
178
|
-
|
|
146
|
+
publish(exchange, routingKey, content, options) {
|
|
147
|
+
const fieldsAndProps = Args.publish(exchange, routingKey, options);
|
|
179
148
|
return this.sendMessage(fieldsAndProps, fieldsAndProps, content);
|
|
180
149
|
}
|
|
181
150
|
|
|
182
|
-
sendToQueue
|
|
151
|
+
sendToQueue(queue, content, options) {
|
|
183
152
|
return this.publish('', queue, content, options);
|
|
184
153
|
}
|
|
185
154
|
|
|
186
|
-
consume
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
cb(null, ok.fields);
|
|
196
|
-
}
|
|
197
|
-
else
|
|
198
|
-
cb(err);
|
|
199
|
-
});
|
|
155
|
+
consume(queue, callback, options, cb0) {
|
|
156
|
+
const cb = callbackWrapper(this, cb0);
|
|
157
|
+
const fields = Args.consume(queue, options);
|
|
158
|
+
this._rpc(defs.BasicConsume, fields, defs.BasicConsumeOk, (err, ok) => {
|
|
159
|
+
if (err === null) {
|
|
160
|
+
this.registerConsumer(ok.fields.consumerTag, callback);
|
|
161
|
+
cb(null, ok.fields);
|
|
162
|
+
} else cb(err);
|
|
163
|
+
});
|
|
200
164
|
return this;
|
|
201
165
|
}
|
|
202
166
|
|
|
203
|
-
cancel
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
cb(null, ok.fields);
|
|
212
|
-
}
|
|
213
|
-
else
|
|
214
|
-
cb(err);
|
|
215
|
-
});
|
|
167
|
+
cancel(consumerTag, cb0) {
|
|
168
|
+
const cb = callbackWrapper(this, cb0);
|
|
169
|
+
this._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, (err, ok) => {
|
|
170
|
+
if (err === null) {
|
|
171
|
+
this.unregisterConsumer(consumerTag);
|
|
172
|
+
cb(null, ok.fields);
|
|
173
|
+
} else cb(err);
|
|
174
|
+
});
|
|
216
175
|
return this;
|
|
217
176
|
}
|
|
218
177
|
|
|
219
|
-
get
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
this.sendOrEnqueue(defs.BasicGet, fields, function (err, f) {
|
|
178
|
+
get(queue, options, cb0) {
|
|
179
|
+
const fields = Args.get(queue, options);
|
|
180
|
+
const cb = callbackWrapper(this, cb0);
|
|
181
|
+
this.sendOrEnqueue(defs.BasicGet, fields, (err, f) => {
|
|
224
182
|
if (err === null) {
|
|
225
183
|
if (f.id === defs.BasicGetEmpty) {
|
|
226
184
|
cb(null, false);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
self.handleMessage = acceptMessage(function (m) {
|
|
185
|
+
} else if (f.id === defs.BasicGetOk) {
|
|
186
|
+
this.handleMessage = acceptMessage((m) => {
|
|
230
187
|
m.fields = f.fields;
|
|
231
188
|
cb(null, m);
|
|
232
189
|
});
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
cb(new Error("Unexpected response to BasicGet: " +
|
|
236
|
-
inspect(f)));
|
|
190
|
+
} else {
|
|
191
|
+
cb(new Error(`Unexpected response to BasicGet: ${inspect(f)}`));
|
|
237
192
|
}
|
|
238
193
|
}
|
|
239
194
|
});
|
|
240
195
|
return this;
|
|
241
196
|
}
|
|
242
197
|
|
|
243
|
-
ack
|
|
244
|
-
this.sendImmediately(
|
|
245
|
-
defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo));
|
|
198
|
+
ack(message, allUpTo) {
|
|
199
|
+
this.sendImmediately(defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo));
|
|
246
200
|
return this;
|
|
247
201
|
}
|
|
248
202
|
|
|
249
|
-
ackAll
|
|
203
|
+
ackAll() {
|
|
250
204
|
this.sendImmediately(defs.BasicAck, Args.ack(0, true));
|
|
251
205
|
return this;
|
|
252
206
|
}
|
|
253
207
|
|
|
254
|
-
nack
|
|
255
|
-
this.sendImmediately(
|
|
256
|
-
defs.BasicNack,
|
|
257
|
-
Args.nack(message.fields.deliveryTag, allUpTo, requeue));
|
|
208
|
+
nack(message, allUpTo, requeue) {
|
|
209
|
+
this.sendImmediately(defs.BasicNack, Args.nack(message.fields.deliveryTag, allUpTo, requeue));
|
|
258
210
|
return this;
|
|
259
211
|
}
|
|
260
212
|
|
|
261
|
-
nackAll
|
|
262
|
-
this.sendImmediately(
|
|
263
|
-
defs.BasicNack, Args.nack(0, true, requeue));
|
|
213
|
+
nackAll(requeue) {
|
|
214
|
+
this.sendImmediately(defs.BasicNack, Args.nack(0, true, requeue));
|
|
264
215
|
return this;
|
|
265
216
|
}
|
|
266
217
|
|
|
267
|
-
reject
|
|
268
|
-
this.sendImmediately(
|
|
269
|
-
defs.BasicReject,
|
|
270
|
-
Args.reject(message.fields.deliveryTag, requeue));
|
|
218
|
+
reject(message, requeue) {
|
|
219
|
+
this.sendImmediately(defs.BasicReject, Args.reject(message.fields.deliveryTag, requeue));
|
|
271
220
|
return this;
|
|
272
221
|
}
|
|
273
222
|
|
|
274
|
-
prefetch
|
|
275
|
-
return this.rpc(defs.BasicQos,
|
|
276
|
-
Args.prefetch(count, global),
|
|
277
|
-
defs.BasicQosOk, cb);
|
|
223
|
+
prefetch(count, global, cb) {
|
|
224
|
+
return this.rpc(defs.BasicQos, Args.prefetch(count, global), defs.BasicQosOk, cb);
|
|
278
225
|
}
|
|
279
226
|
|
|
280
|
-
recover
|
|
281
|
-
return this.rpc(defs.BasicRecover,
|
|
282
|
-
Args.recover(),
|
|
283
|
-
defs.BasicRecoverOk, cb);
|
|
227
|
+
recover(cb) {
|
|
228
|
+
return this.rpc(defs.BasicRecover, Args.recover(), defs.BasicRecoverOk, cb);
|
|
284
229
|
}
|
|
285
230
|
}
|
|
286
231
|
|
|
287
|
-
|
|
288
232
|
// Wrap an RPC callback to make sure the callback is invoked with
|
|
289
233
|
// either `(null, value)` or `(error)`, i.e., never two non-null
|
|
290
234
|
// values. Also substitutes a stub if the callback is `undefined` or
|
|
291
235
|
// otherwise falsey, for convenience in methods for which the callback
|
|
292
236
|
// is optional (that is, most of them).
|
|
293
|
-
function callbackWrapper(
|
|
294
|
-
return
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
237
|
+
function callbackWrapper(_ch, cb) {
|
|
238
|
+
return cb
|
|
239
|
+
? (err, ok) => {
|
|
240
|
+
if (err === null) {
|
|
241
|
+
cb(null, ok);
|
|
242
|
+
} else cb(err);
|
|
243
|
+
}
|
|
244
|
+
: () => {};
|
|
300
245
|
}
|
|
301
246
|
|
|
302
247
|
class ConfirmChannel extends Channel {
|
|
303
|
-
publish
|
|
304
|
-
content, options, cb) {
|
|
248
|
+
publish(exchange, routingKey, content, options, cb) {
|
|
305
249
|
this.pushConfirmCallback(cb);
|
|
306
|
-
return Channel.prototype.publish.call(
|
|
307
|
-
this, exchange, routingKey, content, options);
|
|
250
|
+
return Channel.prototype.publish.call(this, exchange, routingKey, content, options);
|
|
308
251
|
}
|
|
309
252
|
|
|
310
|
-
sendToQueue
|
|
311
|
-
options, cb) {
|
|
253
|
+
sendToQueue(queue, content, options, cb) {
|
|
312
254
|
return this.publish('', queue, content, options, cb);
|
|
313
255
|
}
|
|
314
256
|
|
|
315
|
-
waitForConfirms
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
unconfirmed.forEach(
|
|
319
|
-
if (val === null)
|
|
320
|
-
; // already confirmed
|
|
257
|
+
waitForConfirms(k) {
|
|
258
|
+
const awaiting = [];
|
|
259
|
+
const unconfirmed = this.unconfirmed;
|
|
260
|
+
unconfirmed.forEach((val, index) => {
|
|
261
|
+
if (val === null); // already confirmed
|
|
321
262
|
else {
|
|
322
|
-
|
|
323
|
-
unconfirmed[index] =
|
|
324
|
-
if (val)
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
resolve();
|
|
328
|
-
else
|
|
329
|
-
reject(err);
|
|
263
|
+
const confirmed = new Promise((resolve, reject) => {
|
|
264
|
+
unconfirmed[index] = (err) => {
|
|
265
|
+
if (val) val(err);
|
|
266
|
+
if (err === null) resolve();
|
|
267
|
+
else reject(err);
|
|
330
268
|
};
|
|
331
269
|
});
|
|
332
270
|
awaiting.push(confirmed);
|
|
333
271
|
}
|
|
334
272
|
});
|
|
335
|
-
return Promise.all(awaiting).then(
|
|
336
|
-
|
|
273
|
+
return Promise.all(awaiting).then(
|
|
274
|
+
() => {
|
|
275
|
+
k();
|
|
276
|
+
},
|
|
277
|
+
(err) => {
|
|
278
|
+
k(err);
|
|
279
|
+
},
|
|
280
|
+
);
|
|
337
281
|
}
|
|
338
282
|
}
|
|
339
283
|
|