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,23 +1,17 @@
1
- //
2
- //
3
- //
4
-
5
- 'use strict';
6
-
7
- const EventEmitter = require('events');
8
- const promisify = require('util').promisify;
1
+ const EventEmitter = require('node:events');
2
+ const promisify = require('node:util').promisify;
9
3
  const defs = require('./defs');
10
- const {BaseChannel} = require('./channel');
11
- const {acceptMessage} = require('./channel');
4
+ const { BaseChannel } = require('./channel');
5
+ const { acceptMessage } = require('./channel');
12
6
  const Args = require('./api_args');
13
- const {inspect} = require('./format');
7
+ const { inspect } = require('./format');
14
8
 
15
9
  class ChannelModel extends EventEmitter {
16
10
  constructor(connection) {
17
11
  super();
18
12
  this.connection = connection;
19
13
 
20
- ['error', 'close', 'blocked', 'unblocked'].forEach(ev => {
14
+ ['error', 'close', 'blocked', 'unblocked'].forEach((ev) => {
21
15
  connection.on(ev, this.emit.bind(this, ev));
22
16
  });
23
17
  }
@@ -41,7 +35,7 @@ class ChannelModel extends EventEmitter {
41
35
  const channel = new ConfirmChannel(this.connection);
42
36
  channel.setOptions(options);
43
37
  await channel.open();
44
- await channel.rpc(defs.ConfirmSelect, {nowait: false}, defs.ConfirmSelectOk);
38
+ await channel.rpc(defs.ConfirmSelect, { nowait: false }, defs.ConfirmSelectOk);
45
39
  return channel;
46
40
  }
47
41
  }
@@ -59,7 +53,7 @@ class Channel extends BaseChannel {
59
53
  // response's fields; this is intended to be suitable for implementing
60
54
  // API procedures.
61
55
  async rpc(method, fields, expect) {
62
- const f = await promisify(cb => {
56
+ const f = await promisify((cb) => {
63
57
  return this._rpc(method, fields, expect, cb);
64
58
  })();
65
59
 
@@ -69,86 +63,63 @@ class Channel extends BaseChannel {
69
63
  // Do the remarkably simple channel open handshake
70
64
  async open() {
71
65
  const ch = await this.allocate.bind(this)();
72
- return ch.rpc(defs.ChannelOpen, {outOfBand: ""},
73
- defs.ChannelOpenOk);
66
+ return ch.rpc(defs.ChannelOpen, { outOfBand: '' }, defs.ChannelOpenOk);
74
67
  }
75
68
 
76
69
  close() {
77
- return promisify(cb => {
78
- return this.closeBecause("Goodbye", defs.constants.REPLY_SUCCESS,
79
- cb);
70
+ return promisify((cb) => {
71
+ return this.closeBecause('Goodbye', defs.constants.REPLY_SUCCESS, cb);
80
72
  })();
81
73
  }
82
74
 
83
75
  // === Public API, declaring queues and stuff ===
84
76
 
85
77
  assertQueue(queue, options) {
86
- return this.rpc(defs.QueueDeclare,
87
- Args.assertQueue(queue, options),
88
- defs.QueueDeclareOk);
78
+ return this.rpc(defs.QueueDeclare, Args.assertQueue(queue, options), defs.QueueDeclareOk);
89
79
  }
90
80
 
91
81
  checkQueue(queue) {
92
- return this.rpc(defs.QueueDeclare,
93
- Args.checkQueue(queue),
94
- defs.QueueDeclareOk);
82
+ return this.rpc(defs.QueueDeclare, Args.checkQueue(queue), defs.QueueDeclareOk);
95
83
  }
96
84
 
97
85
  deleteQueue(queue, options) {
98
- return this.rpc(defs.QueueDelete,
99
- Args.deleteQueue(queue, options),
100
- defs.QueueDeleteOk);
86
+ return this.rpc(defs.QueueDelete, Args.deleteQueue(queue, options), defs.QueueDeleteOk);
101
87
  }
102
88
 
103
89
  purgeQueue(queue) {
104
- return this.rpc(defs.QueuePurge,
105
- Args.purgeQueue(queue),
106
- defs.QueuePurgeOk);
90
+ return this.rpc(defs.QueuePurge, Args.purgeQueue(queue), defs.QueuePurgeOk);
107
91
  }
108
92
 
109
93
  bindQueue(queue, source, pattern, argt) {
110
- return this.rpc(defs.QueueBind,
111
- Args.bindQueue(queue, source, pattern, argt),
112
- defs.QueueBindOk);
94
+ return this.rpc(defs.QueueBind, Args.bindQueue(queue, source, pattern, argt), defs.QueueBindOk);
113
95
  }
114
96
 
115
97
  unbindQueue(queue, source, pattern, argt) {
116
- return this.rpc(defs.QueueUnbind,
117
- Args.unbindQueue(queue, source, pattern, argt),
118
- defs.QueueUnbindOk);
98
+ return this.rpc(defs.QueueUnbind, Args.unbindQueue(queue, source, pattern, argt), defs.QueueUnbindOk);
119
99
  }
120
100
 
121
101
  assertExchange(exchange, type, options) {
122
102
  // The server reply is an empty set of fields, but it's convenient
123
103
  // to have the exchange name handed to the continuation.
124
- return this.rpc(defs.ExchangeDeclare,
125
- Args.assertExchange(exchange, type, options),
126
- defs.ExchangeDeclareOk)
127
- .then(_ok => { return { exchange }; });
104
+ return this.rpc(defs.ExchangeDeclare, Args.assertExchange(exchange, type, options), defs.ExchangeDeclareOk).then((_ok) => {
105
+ return { exchange };
106
+ });
128
107
  }
129
108
 
130
109
  checkExchange(exchange) {
131
- return this.rpc(defs.ExchangeDeclare,
132
- Args.checkExchange(exchange),
133
- defs.ExchangeDeclareOk);
110
+ return this.rpc(defs.ExchangeDeclare, Args.checkExchange(exchange), defs.ExchangeDeclareOk);
134
111
  }
135
112
 
136
113
  deleteExchange(name, options) {
137
- return this.rpc(defs.ExchangeDelete,
138
- Args.deleteExchange(name, options),
139
- defs.ExchangeDeleteOk);
114
+ return this.rpc(defs.ExchangeDelete, Args.deleteExchange(name, options), defs.ExchangeDeleteOk);
140
115
  }
141
116
 
142
117
  bindExchange(dest, source, pattern, argt) {
143
- return this.rpc(defs.ExchangeBind,
144
- Args.bindExchange(dest, source, pattern, argt),
145
- defs.ExchangeBindOk);
118
+ return this.rpc(defs.ExchangeBind, Args.bindExchange(dest, source, pattern, argt), defs.ExchangeBindOk);
146
119
  }
147
120
 
148
121
  unbindExchange(dest, source, pattern, argt) {
149
- return this.rpc(defs.ExchangeUnbind,
150
- Args.unbindExchange(dest, source, pattern, argt),
151
- defs.ExchangeUnbindOk);
122
+ return this.rpc(defs.ExchangeUnbind, Args.unbindExchange(dest, source, pattern, argt), defs.ExchangeUnbindOk);
152
123
  }
153
124
 
154
125
  // Working with messages
@@ -176,12 +147,9 @@ class Channel extends BaseChannel {
176
147
  }
177
148
 
178
149
  async cancel(consumerTag) {
179
- const ok = await promisify(cb => {
180
- this._rpc(defs.BasicCancel, Args.cancel(consumerTag),
181
- defs.BasicCancelOk,
182
- cb);
183
- })()
184
- .then(ok => {
150
+ await promisify((cb) => {
151
+ this._rpc(defs.BasicCancel, Args.cancel(consumerTag), defs.BasicCancelOk, cb);
152
+ })().then((ok) => {
185
153
  this.unregisterConsumer(consumerTag);
186
154
  return ok.fields;
187
155
  });
@@ -194,15 +162,13 @@ class Channel extends BaseChannel {
194
162
  if (err) return reject(err);
195
163
  if (f.id === defs.BasicGetEmpty) {
196
164
  return resolve(false);
197
- }
198
- else if (f.id === defs.BasicGetOk) {
165
+ } else if (f.id === defs.BasicGetOk) {
199
166
  const fields = f.fields;
200
- this.handleMessage = acceptMessage(m => {
167
+ this.handleMessage = acceptMessage((m) => {
201
168
  m.fields = fields;
202
169
  resolve(m);
203
170
  });
204
- }
205
- else {
171
+ } else {
206
172
  reject(new Error(`Unexpected response to BasicGet: ${inspect(f)}`));
207
173
  }
208
174
  });
@@ -210,9 +176,7 @@ class Channel extends BaseChannel {
210
176
  }
211
177
 
212
178
  ack(message, allUpTo) {
213
- this.sendImmediately(
214
- defs.BasicAck,
215
- Args.ack(message.fields.deliveryTag, allUpTo));
179
+ this.sendImmediately(defs.BasicAck, Args.ack(message.fields.deliveryTag, allUpTo));
216
180
  }
217
181
 
218
182
  ackAll() {
@@ -220,14 +184,11 @@ class Channel extends BaseChannel {
220
184
  }
221
185
 
222
186
  nack(message, allUpTo, requeue) {
223
- this.sendImmediately(
224
- defs.BasicNack,
225
- Args.nack(message.fields.deliveryTag, allUpTo, requeue));
187
+ this.sendImmediately(defs.BasicNack, Args.nack(message.fields.deliveryTag, allUpTo, requeue));
226
188
  }
227
189
 
228
190
  nackAll(requeue) {
229
- this.sendImmediately(defs.BasicNack,
230
- Args.nack(0, true, requeue));
191
+ this.sendImmediately(defs.BasicNack, Args.nack(0, true, requeue));
231
192
  }
232
193
 
233
194
  // `Basic.Nack` is not available in older RabbitMQ versions (or in the
@@ -235,21 +196,15 @@ class Channel extends BaseChannel {
235
196
  // `Basic.Reject`. This is otherwise synonymous with
236
197
  // `#nack(message, false, requeue)`.
237
198
  reject(message, requeue) {
238
- this.sendImmediately(
239
- defs.BasicReject,
240
- Args.reject(message.fields.deliveryTag, requeue));
199
+ this.sendImmediately(defs.BasicReject, Args.reject(message.fields.deliveryTag, requeue));
241
200
  }
242
201
 
243
202
  recover() {
244
- return this.rpc(defs.BasicRecover,
245
- Args.recover(),
246
- defs.BasicRecoverOk);
203
+ return this.rpc(defs.BasicRecover, Args.recover(), defs.BasicRecoverOk);
247
204
  }
248
205
 
249
206
  qos(count, global) {
250
- return this.rpc(defs.BasicQos,
251
- Args.prefetch(count, global),
252
- defs.BasicQosOk);
207
+ return this.rpc(defs.BasicQos, Args.prefetch(count, global), defs.BasicQosOk);
253
208
  }
254
209
  }
255
210
 
@@ -258,7 +213,7 @@ class Channel extends BaseChannel {
258
213
  // channels or consumers. RabbitMQ v3.3.0 and after treat prefetch
259
214
  // (without `global` set) as per-consumer (for consumers following),
260
215
  // and prefetch with `global` set as per-channel.
261
- Channel.prototype.prefetch = Channel.prototype.qos
216
+ Channel.prototype.prefetch = Channel.prototype.qos;
262
217
 
263
218
  // Confirm channel. This is a channel with confirms 'switched on',
264
219
  // meaning sent messages will provoke a responding 'ack' or 'nack'
@@ -283,7 +238,7 @@ class ConfirmChannel extends Channel {
283
238
  unconfirmed.forEach((val, index) => {
284
239
  if (val !== null) {
285
240
  const confirmed = new Promise((resolve, reject) => {
286
- unconfirmed[index] = err => {
241
+ unconfirmed[index] = (err) => {
287
242
  if (val) val(err);
288
243
  if (err === null) resolve();
289
244
  else reject(err);
@@ -294,9 +249,10 @@ class ConfirmChannel extends Channel {
294
249
  });
295
250
  // Channel closed
296
251
  if (!this.pending) {
297
- var cb;
298
- while (cb = this.unconfirmed.shift()) {
252
+ let cb = this.unconfirmed.shift();
253
+ while (cb) {
299
254
  if (cb) cb(new Error('channel closed'));
255
+ cb = this.unconfirmed.shift();
300
256
  }
301
257
  }
302
258
  return Promise.all(awaiting);