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.
Files changed (85) hide show
  1. package/.claude/commands/lint-disable.md +9 -0
  2. package/.claude/commands/lint-enable.md +12 -0
  3. package/.claude/settings.local.json +16 -0
  4. package/.github/workflows/publish.yml +1 -1
  5. package/.github/workflows/test.yml +1 -1
  6. package/CHANGELOG.md +34 -0
  7. package/CLAUDE.md +12 -0
  8. package/Makefile +5 -12
  9. package/bin/generate-defs.js +382 -369
  10. package/biome.json +51 -0
  11. package/callback_api.js +12 -8
  12. package/channel_api.js +5 -10
  13. package/examples/direct_reply_to_client.js +9 -5
  14. package/examples/direct_reply_to_server.js +8 -6
  15. package/examples/headers.js +13 -10
  16. package/examples/receive_generator.js +13 -20
  17. package/examples/send_generators.js +2 -9
  18. package/examples/ssl.js +2 -3
  19. package/examples/stream_queues/receive_stream.js +39 -36
  20. package/examples/stream_queues/send_stream.js +26 -29
  21. package/examples/tutorials/callback_api/emit_log.js +4 -3
  22. package/examples/tutorials/callback_api/emit_log_direct.js +5 -4
  23. package/examples/tutorials/callback_api/emit_log_topic.js +5 -4
  24. package/examples/tutorials/callback_api/new_task.js +5 -4
  25. package/examples/tutorials/callback_api/receive.js +16 -10
  26. package/examples/tutorials/callback_api/receive_logs.js +17 -11
  27. package/examples/tutorials/callback_api/receive_logs_direct.js +19 -13
  28. package/examples/tutorials/callback_api/receive_logs_topic.js +19 -14
  29. package/examples/tutorials/callback_api/rpc_client.js +20 -16
  30. package/examples/tutorials/callback_api/rpc_server.js +27 -21
  31. package/examples/tutorials/callback_api/send.js +4 -3
  32. package/examples/tutorials/callback_api/worker.js +18 -13
  33. package/examples/tutorials/emit_log.js +4 -6
  34. package/examples/tutorials/emit_log_direct.js +5 -7
  35. package/examples/tutorials/emit_log_topic.js +5 -7
  36. package/examples/tutorials/new_task.js +4 -6
  37. package/examples/tutorials/receive.js +8 -4
  38. package/examples/tutorials/receive_logs.js +10 -6
  39. package/examples/tutorials/receive_logs_direct.js +16 -10
  40. package/examples/tutorials/receive_logs_topic.js +16 -11
  41. package/examples/tutorials/rpc_client.js +17 -15
  42. package/examples/tutorials/rpc_server.js +9 -8
  43. package/examples/tutorials/send.js +4 -6
  44. package/examples/tutorials/worker.js +17 -14
  45. package/examples/waitForConfirms.js +2 -2
  46. package/lefthook.yml +14 -0
  47. package/lib/api_args.js +124 -149
  48. package/lib/bitset.js +28 -18
  49. package/lib/callback_model.js +134 -190
  50. package/lib/channel.js +175 -213
  51. package/lib/channel_model.js +41 -85
  52. package/lib/codec.js +257 -228
  53. package/lib/connect.js +74 -82
  54. package/lib/connection.js +204 -240
  55. package/lib/credentials.js +21 -29
  56. package/lib/defs.js +2559 -1927
  57. package/lib/error.js +5 -6
  58. package/lib/format.js +15 -33
  59. package/lib/frame.js +66 -66
  60. package/lib/heartbeat.js +17 -24
  61. package/lib/mux.js +32 -41
  62. package/package.json +8 -5
  63. package/test/bitset.test.js +65 -0
  64. package/test/callback_api.test.js +438 -0
  65. package/test/channel.test.js +592 -0
  66. package/test/channel_api.test.js +537 -0
  67. package/test/codec.test.js +172 -0
  68. package/test/connect.test.js +196 -0
  69. package/test/connection.test.js +330 -0
  70. package/test/data.test.js +33 -0
  71. package/test/frame.test.js +180 -0
  72. package/test/lib/data.js +249 -0
  73. package/test/lib/util.js +223 -0
  74. package/test/mux.test.js +215 -0
  75. package/test/bitset.js +0 -69
  76. package/test/callback_api.js +0 -379
  77. package/test/channel.js +0 -621
  78. package/test/channel_api.js +0 -606
  79. package/test/codec.js +0 -237
  80. package/test/connect.js +0 -197
  81. package/test/connection.js +0 -390
  82. package/test/data.js +0 -269
  83. package/test/frame.js +0 -191
  84. package/test/mux.js +0 -203
  85. package/test/util.js +0 -217
@@ -1,26 +1,19 @@
1
- //
2
- //
3
- //
4
-
5
- 'use strict';
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 (connection) {
8
+ constructor(connection) {
15
9
  super();
16
10
  this.connection = connection;
17
- var self = this;
18
- ['error', 'close', 'blocked', 'unblocked'].forEach(function (ev) {
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 (cb) {
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 (options, cb) {
32
- if (arguments.length === 1) {
24
+ createChannel(options, cb) {
25
+ if (cb === undefined) {
33
26
  cb = options;
34
27
  options = undefined;
35
28
  }
36
- var ch = new Channel(this.connection);
29
+ const ch = new Channel(this.connection);
37
30
  ch.setOptions(options);
38
- ch.open(function (err, ok) {
39
- if (err === null)
40
- cb && cb(null, ch);
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 (options, cb) {
48
- if (arguments.length === 1) {
38
+ createConfirmChannel(options, cb) {
39
+ if (cb === undefined) {
49
40
  cb = options;
50
41
  options = undefined;
51
42
  }
52
- var ch = new ConfirmChannel(this.connection);
43
+ const ch = new ConfirmChannel(this.connection);
53
44
  ch.setOptions(options);
54
- ch.open(function (err) {
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
- defs.ConfirmSelectOk, function (err, _ok) {
60
- if (err !== null)
61
- return cb && cb(err);
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 (connection) {
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 (method, fields, expect, cb0) {
85
- var cb = callbackWrapper(this, cb0);
86
- this._rpc(method, fields, expect, function (err, ok) {
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 (cb) {
96
- try { this.allocate(); }
97
- catch (e) { return cb(e); }
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 (cb) {
104
- return this.closeBecause("Goodbye", defs.constants.REPLY_SUCCESS,
105
- function () { cb && cb(null); });
92
+ close(cb) {
93
+ return this.closeBecause('Goodbye', defs.constants.REPLY_SUCCESS, () => {
94
+ cb && cb(null);
95
+ });
106
96
  }
107
97
 
108
- assertQueue (queue, options, cb) {
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 (queue, cb) {
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 (queue, options, cb) {
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 (queue, cb) {
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 (queue, source, pattern, argt, cb) {
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 (queue, source, pattern, argt, cb) {
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 (ex, type, options, cb0) {
145
- var cb = callbackWrapper(this, cb0);
146
- this._rpc(defs.ExchangeDeclare,
147
- Args.assertExchange(ex, type, options),
148
- defs.ExchangeDeclareOk,
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 (exchange, cb) {
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 (exchange, options, cb) {
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 (dest, source, pattern, argt, cb) {
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 (dest, source, pattern, argt, cb) {
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 (exchange, routingKey, content, options) {
178
- var fieldsAndProps = Args.publish(exchange, routingKey, options);
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 (queue, content, options) {
151
+ sendToQueue(queue, content, options) {
183
152
  return this.publish('', queue, content, options);
184
153
  }
185
154
 
186
- consume (queue, callback, options, cb0) {
187
- var cb = callbackWrapper(this, cb0);
188
- var fields = Args.consume(queue, options);
189
- var self = this;
190
- this._rpc(
191
- defs.BasicConsume, fields, defs.BasicConsumeOk,
192
- function (err, ok) {
193
- if (err === null) {
194
- self.registerConsumer(ok.fields.consumerTag, callback);
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 (consumerTag, cb0) {
204
- var cb = callbackWrapper(this, cb0);
205
- var self = this;
206
- this._rpc(
207
- defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk,
208
- function (err, ok) {
209
- if (err === null) {
210
- self.unregisterConsumer(consumerTag);
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 (queue, options, cb0) {
220
- var self = this;
221
- var fields = Args.get(queue, options);
222
- var cb = callbackWrapper(this, cb0);
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
- else if (f.id === defs.BasicGetOk) {
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
- else {
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 (message, allUpTo) {
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 (message, allUpTo, requeue) {
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 (requeue) {
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 (message, requeue) {
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 (count, global, cb) {
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 (cb) {
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(ch, cb) {
294
- return (cb) ? function(err, ok) {
295
- if (err === null) {
296
- cb(null, ok);
297
- }
298
- else cb(err);
299
- } : function() {};
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 (exchange, routingKey,
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 (queue, content,
311
- options, cb) {
253
+ sendToQueue(queue, content, options, cb) {
312
254
  return this.publish('', queue, content, options, cb);
313
255
  }
314
256
 
315
- waitForConfirms (k) {
316
- var awaiting = [];
317
- var unconfirmed = this.unconfirmed;
318
- unconfirmed.forEach(function (val, index) {
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
- var confirmed = new Promise(function (resolve, reject) {
323
- unconfirmed[index] = function (err) {
324
- if (val)
325
- val(err);
326
- if (err === null)
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(function () { k(); },
336
- function (err) { k(err); });
273
+ return Promise.all(awaiting).then(
274
+ () => {
275
+ k();
276
+ },
277
+ (err) => {
278
+ k(err);
279
+ },
280
+ );
337
281
  }
338
282
  }
339
283