@spinajs/queue-stomp-transport 2.0.481 → 2.0.484

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.
@@ -8,90 +8,409 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { UnexpectedServerError, InvalidArgument } from '@spinajs/exceptions';
11
- import { QueueClient } from '@spinajs/queue';
11
+ import { QueueClient, QueueMessageType } from '@spinajs/queue';
12
12
  import Stomp from '@stomp/stompjs';
13
13
  import _ from 'lodash';
14
- import { Injectable, PerInstanceCheck } from '@spinajs/di';
14
+ import { DI, Injectable, PerInstanceCheck } from '@spinajs/di';
15
+ import { BackoffType, ResiliencePipelineBuilder } from '@spinajs/util';
15
16
  import websocket from 'websocket';
17
+ import { randomUUID } from 'crypto';
18
+ import { DateTime } from 'luxon';
16
19
  Object.assign(global, { WebSocket: websocket.w3cwebsocket });
20
+ /**
21
+ * Default time to wait for a broker RECEIPT frame when publishing a message
22
+ * before the emit is considered failed. Can be overridden via `Options.receiptTimeout`.
23
+ */
24
+ const DEFAULT_RECEIPT_TIMEOUT_MS = 5000;
25
+ /**
26
+ * Time to wait for the initial STOMP connection before giving up.
27
+ * Can be overridden via `Options.connectionTimeout`.
28
+ */
29
+ const DEFAULT_CONNECTION_TIMEOUT_MS = 10000;
30
+ /**
31
+ * Default reconnect / heartbeat timings used when not provided in connection options.
32
+ *
33
+ * NOTE on heartbeats: the default ( 4s ) suits brokers that support STOMP heartbeats over
34
+ * WebSocket ( eg. ActiveMQ ). RabbitMQ Web-STOMP / SockJS does NOT support heartbeats - when
35
+ * targeting it, set `heartbeatIncoming` and `heartbeatOutgoing` to 0 in the connection options,
36
+ * otherwise the connection will be dropped. We keep 4s as the default so dead-connection
37
+ * detection still works on brokers that do support it.
38
+ */
39
+ const DEFAULT_RECONNECT_DELAY_MS = 5000;
40
+ const DEFAULT_HEARTBEAT_MS = 4000;
41
+ /**
42
+ * STOMP header carrying the number of times a job has already been retried.
43
+ * Set by this transport when it reschedules a failed job.
44
+ */
45
+ const RETRY_COUNT_HEADER = 'x-retry-count';
17
46
  let StompQueueClient = class StompQueueClient extends QueueClient {
18
47
  get ClientId() {
19
48
  return this.Options.clientId ?? this.Options.name;
20
49
  }
50
+ /**
51
+ * `true` when there is an active connection with the broker.
52
+ */
53
+ get Connected() {
54
+ return this.Client?.connected ?? false;
55
+ }
56
+ get ReceiptTimeout() {
57
+ return this.Options.receiptTimeout ?? this.Options.options?.receiptTimeout ?? DEFAULT_RECEIPT_TIMEOUT_MS;
58
+ }
59
+ /**
60
+ * Resolves once the client is connected. If already connected resolves immediately,
61
+ * otherwise waits for the next ( re )connect, optionally bounded by `timeoutMs`.
62
+ */
63
+ whenReady(timeoutMs) {
64
+ if (this.Connected) {
65
+ return Promise.resolve();
66
+ }
67
+ return new Promise((resolve, reject) => {
68
+ let timer;
69
+ const waiter = () => {
70
+ if (timer) {
71
+ clearTimeout(timer);
72
+ }
73
+ resolve();
74
+ };
75
+ if (timeoutMs) {
76
+ timer = setTimeout(() => {
77
+ this.ReadyWaiters = this.ReadyWaiters.filter((w) => w !== waiter);
78
+ reject(new UnexpectedServerError(`Timeout waiting for queue connection ${this.Options.name} to become ready`));
79
+ }, timeoutMs);
80
+ }
81
+ this.ReadyWaiters.push(waiter);
82
+ });
83
+ }
21
84
  constructor(options) {
22
85
  super(options);
23
86
  this.Subscriptions = new Map();
87
+ this.PendingEmits = [];
88
+ // resolvers waiting for the connection to come up ( see whenReady )
89
+ this.ReadyWaiters = [];
90
+ this.Disposing = false;
91
+ /** Publisher-side resilience: retry each receipt-confirmed publish with backoff so a transient
92
+ * broker hiccup / receipt timeout doesn't fail the emit. Duplicates are handled by consumer dedup. */
93
+ this.EmitPipeline = this.buildEmitPipeline();
94
+ }
95
+ /**
96
+ * Creates the underlying stompjs client. Extracted so it can be overridden
97
+ * ( e.g. with a fake ) in unit tests without a live broker.
98
+ */
99
+ createClient(config) {
100
+ return new Stomp.Client(config);
24
101
  }
25
102
  async resolve() {
26
103
  this.Log.info(`Connecting to STOMP queue at ${this.Options.host} with client-id: ${this.ClientId} ...`);
27
- this.Client = new Stomp.Client({
104
+ this.Client = this.createClient({
28
105
  brokerURL: this.Options.host,
29
106
  connectHeaders: {
30
107
  login: this.Options.login,
31
108
  passcode: this.Options.password,
32
109
  'client-id': this.ClientId,
33
110
  },
34
- reconnectDelay: 5000,
35
- heartbeatIncoming: 4000,
36
- heartbeatOutgoing: 4000,
37
- // additional options
111
+ reconnectDelay: this.Options.reconnectDelay ?? DEFAULT_RECONNECT_DELAY_MS,
112
+ heartbeatIncoming: this.Options.heartbeatIncoming ?? DEFAULT_HEARTBEAT_MS,
113
+ heartbeatOutgoing: this.Options.heartbeatOutgoing ?? DEFAULT_HEARTBEAT_MS,
114
+ connectionTimeout: this.Options.connectionTimeout ?? DEFAULT_CONNECTION_TIMEOUT_MS,
115
+ // additional options ( may override any of the defaults above )
38
116
  ...this.Options.options,
39
117
  });
40
118
  this.Client.debug = (str) => {
41
119
  this.Log.trace(`${str}, Client-id: ${this.ClientId}, name: ${this.Options.name}`);
42
120
  };
43
- return new Promise((resolve, reject) => {
44
- this.Client.onStompError = (frame) => {
45
- reject(new UnexpectedServerError(`Cannot connect to queue server at ${this.Options.host}`, frame));
121
+ // if a credential provider is configured, refresh credentials right before
122
+ // every ( re )connect - supports rotating secrets / token based auth
123
+ if (this.Options.credentialProvider) {
124
+ this.Client.beforeConnect = async () => {
125
+ const provider = DI.resolve(this.Options.credentialProvider);
126
+ const creds = await provider.getCredentials(this.Options);
127
+ this.Client.connectHeaders = {
128
+ 'client-id': this.ClientId,
129
+ ...(creds.login ? { login: creds.login } : {}),
130
+ ...(creds.passcode ? { passcode: creds.passcode } : {}),
131
+ };
46
132
  };
133
+ }
134
+ // lifecycle handlers that simply log - installed once, never reassigned
135
+ this.Client.onUnhandledMessage = (message) => {
136
+ this.Log.warn(`Received unhandled message on ${message.headers?.destination ?? '<unknown>'} ( ${this.Options.name} ): ${message.body}`);
137
+ };
138
+ this.Client.onDisconnect = () => {
139
+ this.Log.warn(`Disconnected from STOMP client, client-id: ${this.ClientId}`);
140
+ };
141
+ this.Client.onWebSocketClose = () => {
142
+ this.Log.warn(`STOMP websocket closed, client-id: ${this.ClientId} ( will auto-reconnect if active )`);
143
+ };
144
+ return new Promise((resolve, reject) => {
145
+ // ensures we settle the initial-connect promise exactly once, and that a
146
+ // broker / websocket error only rejects BEFORE the first successful connect
147
+ let settled = false;
148
+ // onConnect fires on EVERY ( re )connect - this is where we replay
149
+ // subscriptions and flush buffered emits so the client survives drops
47
150
  this.Client.onConnect = () => {
48
151
  this.Log.success('Connected to STOMP client, client-id: ' + this.ClientId);
49
- resolve();
50
- // when connected override callbacks for loggin
51
- this.Client.onStompError = (frame) => {
52
- // Will be invoked in case of error encountered at Broker
53
- // Bad login/passcode typically will cause an error
54
- // Complaint brokers will set `message` header with a brief message. Body may contain details.
55
- // Compliant brokers will terminate the connection after any error
56
- this.Log.error('Broker reported error: ' + frame.headers['message']);
57
- this.Log.error('Additional details: ' + frame.body);
58
- };
59
- this.Client.onConnect = () => {
60
- this.Log.success('Connected to STOMP client');
61
- };
62
- this.Client.onDisconnect = () => {
63
- this.Log.warn('Disconnected to STOMP client');
64
- };
65
- this.Client.onWebSocketError = (err) => {
66
- this.Log.warn(err);
67
- };
152
+ for (const desc of this.Subscriptions.values()) {
153
+ this.applySubscription(desc);
154
+ }
155
+ this.flushPendingEmits();
156
+ this.flushReadyWaiters();
157
+ if (!settled) {
158
+ settled = true;
159
+ resolve();
160
+ }
161
+ };
162
+ this.Client.onStompError = (frame) => {
163
+ // Compliant brokers terminate the connection after an ERROR frame.
164
+ // Bad login / passcode typically surfaces here.
165
+ this.Log.error('Broker reported error: ' + frame.headers['message']);
166
+ this.Log.error('Additional details: ' + frame.body);
167
+ if (!settled) {
168
+ settled = true;
169
+ this.Client.deactivate();
170
+ reject(new UnexpectedServerError(`Cannot connect to queue server at ${this.Options.host}`, frame));
171
+ }
68
172
  };
69
173
  this.Client.onWebSocketError = (err) => {
70
- this.Log.error(`Websocket error: ${JSON.stringify(err)}`);
71
- reject(new UnexpectedServerError(`Cannot connect to queue server at ${this.Options.host}, websocket error`, err));
174
+ this.Log.error(`Websocket error: ${JSON.stringify(err)}, client-id: ${this.ClientId}`);
175
+ if (!settled) {
176
+ settled = true;
177
+ this.Client.deactivate();
178
+ reject(new UnexpectedServerError(`Cannot connect to queue server at ${this.Options.host}, websocket error`, err));
179
+ }
72
180
  };
73
181
  this.Client.activate();
74
182
  });
75
183
  }
76
184
  async dispose() {
77
185
  this.Log.info(`Disposing queue connection ${this.Options.name} ...`);
78
- return new Promise((resolve) => {
79
- // if we dont have onDisconnect callback after 5sek, assume we have disconnected
80
- const t = setTimeout(() => {
81
- this.Log.warn('STOMP client deactivated, but was not connected before');
82
- resolve();
83
- }, 5000);
84
- this.Client.onDisconnect = () => {
85
- clearTimeout(t);
86
- resolve();
87
- this.Log.success('STOMP client deactivated');
88
- };
89
- this.Client.deactivate();
90
- });
186
+ this.Disposing = true;
187
+ // fail any still-buffered emits so callers awaiting them don't hang forever
188
+ const pending = this.PendingEmits;
189
+ this.PendingEmits = [];
190
+ for (const p of pending) {
191
+ p.reject(new UnexpectedServerError(`Queue connection ${this.Options.name} disposed before message could be sent`));
192
+ }
193
+ if (!this.Client) {
194
+ return;
195
+ }
196
+ // deactivate() resolves once the underlying websocket is disposed
197
+ await this.Client.deactivate();
198
+ this.Log.success('STOMP client deactivated');
91
199
  }
92
200
  async emit(message) {
201
+ if (!this.Client?.connected) {
202
+ if (this.Disposing) {
203
+ throw new UnexpectedServerError(`Cannot emit message, queue connection ${this.Options.name} is disposing`);
204
+ }
205
+ // not connected - buffer and flush on next ( re )connect
206
+ return new Promise((resolve, reject) => {
207
+ this.PendingEmits.push({ message, resolve, reject });
208
+ this.Log.warn(`Queue ${this.Options.name} not connected, message ${message.Name} buffered ( ${this.PendingEmits.length} pending )`);
209
+ });
210
+ }
211
+ return this.publishMessage(message);
212
+ }
213
+ unsubscribe(channelOrMessage, removeDurable = false) {
214
+ const channels = _.isString(channelOrMessage) ? [channelOrMessage] : this.getChannelForMessage(channelOrMessage);
215
+ channels.forEach((c) => {
216
+ const desc = this.Subscriptions.get(c);
217
+ if (!desc) {
218
+ return;
219
+ }
220
+ if (desc.durable && removeDurable && desc.subscriptionId) {
221
+ // delete the broker-side durable subscription, not just stop consuming.
222
+ // ActiveMQ removes a durable sub when UNSUBSCRIBE carries its subscription name.
223
+ this.Client.unsubscribe(desc.subscriptionId, { 'activemq.subscriptionName': desc.subscriptionId });
224
+ this.Log.info(`Removed durable subscription ${desc.subscriptionId} on channel ${c}`);
225
+ }
226
+ else {
227
+ desc.active?.unsubscribe();
228
+ }
229
+ this.Subscriptions.delete(c);
230
+ });
231
+ }
232
+ async subscribe(channelOrMessage, callback, subscriptionId, durable) {
233
+ const channels = _.isString(channelOrMessage) ? [channelOrMessage] : this.getChannelForMessage(channelOrMessage);
234
+ channels.forEach((c) => {
235
+ if (this.Subscriptions.has(c)) {
236
+ this.Log.warn(`Channel ${c} already subscribed !`);
237
+ return;
238
+ }
239
+ if (durable && !subscriptionId) {
240
+ throw new InvalidArgument(`subscriptionId cannot be empty if using durable subscriptions`);
241
+ }
242
+ const desc = { channel: c, callback, subscriptionId, durable };
243
+ this.Subscriptions.set(c, desc);
244
+ // if already connected subscribe now, otherwise it will be applied on next onConnect
245
+ if (this.Client?.connected) {
246
+ this.applySubscription(desc);
247
+ }
248
+ else {
249
+ this.Log.info(`Channel ${c} recorded, will subscribe once connected`);
250
+ }
251
+ });
252
+ }
253
+ /**
254
+ * Creates the live broker subscription for a tracked descriptor.
255
+ * Called on initial subscribe and replayed for every descriptor on reconnect.
256
+ */
257
+ applySubscription(desc) {
258
+ const headers = { ack: 'client-individual', 'activemq.prefetchSize': '1' };
259
+ if (desc.subscriptionId) {
260
+ headers.id = desc.subscriptionId;
261
+ }
262
+ if (desc.durable) {
263
+ // durable subscriptions require a stable name ( guarded in subscribe() )
264
+ headers['activemq.subscriptionName'] = desc.subscriptionId;
265
+ }
266
+ desc.active = this.Client.subscribe(desc.channel, (message) => {
267
+ let qMessage;
268
+ try {
269
+ qMessage = JSON.parse(message.body);
270
+ }
271
+ catch (err) {
272
+ this.Log.error(`Cannot parse message body on channel ${desc.channel}: ${err.message}`);
273
+ this.handleUnparseableMessage(message, desc.channel, err);
274
+ return;
275
+ }
276
+ // luxon DateTime serializes to an ISO string over the wire - rehydrate it
277
+ if (typeof qMessage.CreatedAt === 'string') {
278
+ qMessage.CreatedAt = DateTime.fromISO(qMessage.CreatedAt);
279
+ }
280
+ desc
281
+ .callback(qMessage)
282
+ .then(() => {
283
+ message.ack();
284
+ })
285
+ .catch((err) => {
286
+ this.handleFailedMessage(message, qMessage, desc, err);
287
+ });
288
+ }, headers);
289
+ this.Log.success(`Channel ${desc.channel}, durable: ${desc.durable ? 'true' : 'false'} subscribed and ready to receive messages !`);
290
+ }
291
+ /**
292
+ * Handles a message whose consumer callback rejected.
293
+ *
294
+ * Events ( fire-and-forget ) are logged and acked ( dropped ) - the queue model
295
+ * does not retry them. Jobs are retried up to their RetryCount by re-publishing
296
+ * to the same channel with an incremented retry header ( and optional backoff ),
297
+ * then dead-lettered once retries are exhausted.
298
+ */
299
+ handleFailedMessage(message, qMessage, desc, err) {
300
+ const reason = err?.message ?? String(err);
301
+ // events are not retried or tracked - drop them
302
+ if (qMessage.Type !== QueueMessageType.Job) {
303
+ this.Log.warn(`Event handler failed on channel ${desc.channel}, dropping message ${qMessage.Name}. ${reason}`);
304
+ message.ack();
305
+ return;
306
+ }
307
+ const maxRetries = qMessage.RetryCount ?? 0;
308
+ const attempt = Number(message.headers?.[RETRY_COUNT_HEADER] ?? '0');
309
+ if (attempt < maxRetries) {
310
+ const nextAttempt = attempt + 1;
311
+ const delay = this.retryBackoff(nextAttempt);
312
+ const headers = {
313
+ persistent: 'true',
314
+ 'content-type': 'application/json',
315
+ [RETRY_COUNT_HEADER]: `${nextAttempt}`,
316
+ };
317
+ // preserve app-relevant delivery headers across the retry republish.
318
+ // NOTE: original AMQ_SCHEDULED_* are intentionally dropped - the backoff delay below
319
+ // replaces scheduling for the retry ( we don't want to re-run a cron on a retry ).
320
+ if (qMessage.Priority) {
321
+ headers.priority = `${qMessage.Priority}`;
322
+ }
323
+ if (qMessage.JobId) {
324
+ headers['correlation-id'] = qMessage.JobId;
325
+ }
326
+ if (delay > 0) {
327
+ headers['AMQ_SCHEDULED_DELAY'] = `${delay}`;
328
+ }
329
+ try {
330
+ // ack the original and reschedule a fresh delivery to the same channel
331
+ this.Client.publish({ destination: desc.channel, body: message.body, headers });
332
+ message.ack();
333
+ this.Log.warn(`Job ${qMessage.Name} failed on ${desc.channel}, retry ${nextAttempt}/${maxRetries} scheduled in ${delay}ms. ${reason}`);
334
+ }
335
+ catch (retryErr) {
336
+ this.Log.error(`Failed to reschedule job ${qMessage.Name} on ${desc.channel}, nacking instead: ${retryErr.message}`);
337
+ message.nack();
338
+ }
339
+ return;
340
+ }
341
+ // retries exhausted - route to dead-letter
342
+ this.deadLetter(message, this.getDeadLetterChannelForMessage(qMessage), desc.channel, reason, attempt);
343
+ }
344
+ /**
345
+ * Handles a message whose body could not be parsed as JSON. It cannot be retried
346
+ * ( we don't know its type ), so it is dead-lettered or nacked.
347
+ */
348
+ handleUnparseableMessage(message, channel, err) {
349
+ const reason = err?.message ?? String(err);
350
+ this.deadLetter(message, this.Options.defaultQueueDeadLetterChannel, channel, reason);
351
+ }
352
+ /**
353
+ * Publishes a failed message to the given dead-letter channel and acks the original
354
+ * to unblock the source queue. When no dead-letter channel is configured the message is
355
+ * dropped ( acked ) with a warning - we never nack-loop a poison message forever.
356
+ */
357
+ deadLetter(message, dlq, channel, reason, attempt) {
358
+ if (!dlq) {
359
+ // retries are already exhausted here; nacking would just redeliver into another exhausted
360
+ // cycle forever. Drop it ( ack ) with a loud warning so the source queue is unblocked.
361
+ this.Log.warn(`Message failed on channel ${channel}, retries exhausted and no dead-letter channel configured - dropping. ${reason}`);
362
+ message.ack();
363
+ return;
364
+ }
365
+ try {
366
+ const headers = {
367
+ persistent: 'true',
368
+ 'content-type': 'application/json',
369
+ 'x-original-destination': channel,
370
+ 'x-error': reason,
371
+ };
372
+ if (attempt !== undefined) {
373
+ headers[RETRY_COUNT_HEADER] = `${attempt}`;
374
+ }
375
+ this.Client.publish({ destination: dlq, body: message.body, headers });
376
+ message.ack();
377
+ this.Log.warn(`Message failed on channel ${channel}, routed to dead-letter ${dlq}. ${reason}`);
378
+ }
379
+ catch (dlqErr) {
380
+ this.Log.error(`Failed to route message to dead-letter ${dlq}, nacking instead: ${dlqErr.message}`);
381
+ message.nack();
382
+ }
383
+ }
384
+ /**
385
+ * Exponential backoff ( ms ) for the given retry attempt, based on `Options.retryDelay`.
386
+ * Returns 0 ( immediate redelivery ) when no base delay is configured.
387
+ */
388
+ retryBackoff(attempt) {
389
+ const base = this.Options.retryDelay ?? 0;
390
+ return base > 0 ? base * 2 ** (attempt - 1) : 0;
391
+ }
392
+ /**
393
+ * Publisher-side resilience pipeline used by emit(). Retries a failed / timed-out receipt
394
+ * publish with exponential backoff ( the per-attempt timeout lives in publishWithReceipt ).
395
+ */
396
+ buildEmitPipeline() {
397
+ const attempts = this.Options.options?.emitRetries ?? 3;
398
+ const base = this.Options.retryDelay && this.Options.retryDelay > 0 ? this.Options.retryDelay : 200;
399
+ return new ResiliencePipelineBuilder()
400
+ .addRetry({ MaxRetryAttempts: attempts, Delay: base, MaxDelay: 30000, BackoffType: BackoffType.Exponential, UseJitter: true })
401
+ .build();
402
+ }
403
+ /**
404
+ * Publishes a message to all of its routed channels and resolves only once the
405
+ * broker has acknowledged each publish with a RECEIPT frame.
406
+ */
407
+ publishMessage(message) {
93
408
  const channels = this.getChannelForMessage(message);
94
- const headers = {};
409
+ const headers = { 'content-type': 'application/json' };
410
+ // tie jobs to their JobModel row for broker-side traceability
411
+ if (message.JobId) {
412
+ headers['correlation-id'] = message.JobId;
413
+ }
95
414
  if (message.Persistent) {
96
415
  headers['persistent'] = 'true';
97
416
  }
@@ -110,55 +429,58 @@ let StompQueueClient = class StompQueueClient extends QueueClient {
110
429
  if (message.ScheduleRepeat) {
111
430
  headers['AMQ_SCHEDULED_REPEAT'] = message.ScheduleRepeat.toString();
112
431
  }
113
- channels.forEach((c) => {
432
+ const body = JSON.stringify(message);
433
+ return Promise.all(channels.map((c) => this.EmitPipeline.execute(() => this.publishWithReceipt(c, body, headers, message)))).then(() => undefined);
434
+ }
435
+ /**
436
+ * Publishes to a single channel and waits for the broker RECEIPT frame so the
437
+ * caller gets real delivery confirmation ( bounded by `ReceiptTimeout` ).
438
+ */
439
+ publishWithReceipt(channel, body, headers, message) {
440
+ return new Promise((resolve, reject) => {
441
+ const receiptId = randomUUID();
442
+ let timer;
443
+ this.Client.watchForReceipt(receiptId, () => {
444
+ clearTimeout(timer);
445
+ this.Log.trace(`Published ${message.Type} Name: ${message.Name} to channel ${channel} ( ${this.Options.name} )`);
446
+ resolve();
447
+ });
448
+ timer = setTimeout(() => {
449
+ reject(new UnexpectedServerError(`Timeout waiting for broker receipt while publishing to ${channel} ( ${this.Options.name} )`));
450
+ }, this.ReceiptTimeout);
114
451
  this.Client.publish({
115
- destination: c,
116
- body: JSON.stringify(message),
117
- headers,
452
+ destination: channel,
453
+ body,
454
+ headers: { ...headers, receipt: receiptId },
118
455
  });
119
- this.Log.trace(`Published ${message.Type} Name: ${message.Name} to channel ${c} ( ${this.Options.name} )`);
120
456
  });
121
457
  }
122
- unsubscribe(channelOrMessage) {
123
- const channels = _.isString(channelOrMessage) ? [channelOrMessage] : this.getChannelForMessage(channelOrMessage);
124
- channels.forEach((c) => {
125
- if (!this.Subscriptions.has(c)) {
126
- return;
127
- }
128
- this.Subscriptions.get(c).unsubscribe();
129
- this.Subscriptions.delete(c);
130
- });
458
+ /**
459
+ * Flushes messages buffered while disconnected. Called from `onConnect`.
460
+ */
461
+ flushPendingEmits() {
462
+ if (this.PendingEmits.length === 0) {
463
+ return;
464
+ }
465
+ const pending = this.PendingEmits;
466
+ this.PendingEmits = [];
467
+ this.Log.info(`Flushing ${pending.length} buffered message(s) for queue ${this.Options.name}`);
468
+ for (const p of pending) {
469
+ this.publishMessage(p.message).then(p.resolve).catch(p.reject);
470
+ }
131
471
  }
132
- async subscribe(channelOrMessage, callback, subscriptionId, durable) {
133
- const channels = _.isString(channelOrMessage) ? [channelOrMessage] : this.getChannelForMessage(channelOrMessage);
134
- channels.forEach((c) => {
135
- if (this.Subscriptions.has(c)) {
136
- this.Log.warn(`Channel ${c} already subscribed !`);
137
- return;
138
- }
139
- const headers = { ack: 'client', 'activemq.prefetchSize': '1' };
140
- if (subscriptionId) {
141
- headers.id = subscriptionId;
142
- }
143
- if (durable) {
144
- if (!subscriptionId) {
145
- throw new InvalidArgument(`subscriptionId cannot be empty if using durable subscriptions`);
146
- }
147
- headers['activemq.subscriptionName'] = subscriptionId;
148
- }
149
- const subscription = this.Client.subscribe(c, (message) => {
150
- const qMessage = JSON.parse(message.body);
151
- callback(qMessage)
152
- .then(() => {
153
- message.ack();
154
- })
155
- .catch(() => {
156
- message.nack();
157
- });
158
- }, headers);
159
- this.Subscriptions.set(c, subscription);
160
- this.Log.success(`Channel ${c}, durable: ${durable ? 'true' : 'false'} subscribed and ready to receive messages !`);
161
- });
472
+ /**
473
+ * Resolves everyone waiting on {@link whenReady}. Called from `onConnect`.
474
+ */
475
+ flushReadyWaiters() {
476
+ if (this.ReadyWaiters.length === 0) {
477
+ return;
478
+ }
479
+ const waiters = this.ReadyWaiters;
480
+ this.ReadyWaiters = [];
481
+ for (const w of waiters) {
482
+ w();
483
+ }
162
484
  }
163
485
  };
164
486
  StompQueueClient = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/connection.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export * from "./connection-factory.js";
2
- export * from "./connection.js";
1
+ export * from './connection-factory.js';
2
+ export * from './connection.js';
3
3
  //# sourceMappingURL=index.d.ts.map
package/lib/mjs/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./connection-factory.js";
2
- export * from "./connection.js";
1
+ export * from './connection-factory.js';
2
+ export * from './connection.js';
3
3
  //# sourceMappingURL=index.js.map