@beignet/provider-event-bus-redis 0.0.44 → 0.0.45

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @beignet/provider-event-bus-redis
2
2
 
3
+ ## 0.0.45
4
+
5
+ ### Patch Changes
6
+
7
+ - b9df150: Tighten Redis event-bus lifecycle handling, preserve job payloads across durable transports, verify Stripe webhooks asynchronously with real signature coverage, and send bounded S3 upload lengths.
8
+
3
9
  ## 0.0.44
4
10
 
5
11
  ## 0.0.43
package/README.md CHANGED
@@ -130,17 +130,27 @@ Use `createRedisEventBus(...)` when your app owns Redis clients:
130
130
  import Redis from "ioredis";
131
131
  import { createRedisEventBus } from "@beignet/provider-event-bus-redis";
132
132
 
133
+ const publisher = new Redis(process.env.REDIS_EVENT_BUS_URL);
134
+ const subscriber = new Redis(process.env.REDIS_EVENT_BUS_URL);
133
135
  const eventBus = createRedisEventBus({
134
- publisher: new Redis(process.env.REDIS_EVENT_BUS_URL),
135
- subscriber: new Redis(process.env.REDIS_EVENT_BUS_URL),
136
+ publisher,
137
+ subscriber,
136
138
  channelPrefix: "my-app:events:",
137
139
  });
140
+
141
+ // During app shutdown:
142
+ await eventBus.stop();
143
+ await Promise.all([publisher.quit(), subscriber.quit()]);
138
144
  ```
139
145
 
140
146
  Register listeners during startup before handling traffic. The `EventBusPort`
141
147
  subscription API is synchronous, while Redis subscription acknowledgement is
142
148
  asynchronous, so messages published immediately after a new subscription may be
143
- missed during startup races.
149
+ missed during startup races. Await `stop()` to detach Beignet's message
150
+ listener, cancel pending subscription retries, and best-effort unsubscribe the
151
+ channels registered through that adapter. It does not close the caller-owned
152
+ Redis clients. Stopping is terminal for that adapter: later subscription
153
+ attempts reject instead of creating handlers that cannot receive messages.
144
154
 
145
155
  ## Delivery semantics
146
156
 
package/dist/index.d.ts CHANGED
@@ -68,6 +68,20 @@ export interface CreateRedisEventBusProviderOptions {
68
68
  retryStrategy?: (times: number) => number | null;
69
69
  db?: number;
70
70
  }
71
- export declare function createRedisEventBus(options: CreateRedisEventBusOptions): EventBusPort;
71
+ /**
72
+ * Direct Redis event-bus adapter with explicit subscription cleanup.
73
+ *
74
+ * `stop()` detaches the message listener, cancels subscription retries, and
75
+ * releases channels subscribed by this adapter. The injected Redis clients
76
+ * remain caller-owned.
77
+ */
78
+ export interface RedisEventBus extends EventBusPort {
79
+ /**
80
+ * Stop local delivery and best-effort unsubscribe the adapter's channels
81
+ * without closing the caller-owned Redis clients.
82
+ */
83
+ stop(): Promise<void>;
84
+ }
85
+ export declare function createRedisEventBus(options: CreateRedisEventBusOptions): RedisEventBus;
72
86
  export declare function createRedisEventBusProvider(options?: CreateRedisEventBusProviderOptions): RedisEventBusProvider;
73
87
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -115,9 +115,13 @@ function createRedisEventBusRuntime(options) {
115
115
  const channelPrefix = options.channelPrefix ?? DEFAULT_CHANNEL_PREFIX;
116
116
  const handlers = new Map();
117
117
  const subscribedChannels = new Map();
118
+ const latestSubscriptionAttempts = new Map();
118
119
  const subscriptionRetryAttempts = new Map();
119
120
  const subscriptionRetryTimers = new Map();
121
+ const subscriptionPromises = new Map();
122
+ const channelCleanupPromises = new Set();
120
123
  let stopped = false;
124
+ let stopPromise;
121
125
  const instrumentation = createProviderInstrumentation(options.instrumentation, {
122
126
  providerName: "event-bus-redis",
123
127
  watcher: "eventBus",
@@ -231,9 +235,13 @@ function createRedisEventBusRuntime(options) {
231
235
  }
232
236
  const attempt = Symbol(channel);
233
237
  subscribedChannels.set(channel, attempt);
238
+ latestSubscriptionAttempts.set(channel, attempt);
234
239
  const onFailure = (error) => {
235
240
  if (subscribedChannels.get(channel) === attempt) {
236
241
  subscribedChannels.delete(channel);
242
+ if (latestSubscriptionAttempts.get(channel) === attempt) {
243
+ latestSubscriptionAttempts.delete(channel);
244
+ }
237
245
  scheduleSubscriptionRetry(eventName);
238
246
  }
239
247
  reportSubscriberError(error, {
@@ -243,16 +251,63 @@ function createRedisEventBusRuntime(options) {
243
251
  });
244
252
  };
245
253
  try {
246
- Promise.resolve(options.subscriber.subscribe(channel)).then(() => {
254
+ const subscriptionPromise = Promise.resolve(options.subscriber.subscribe(channel)).then(() => {
247
255
  if (subscribedChannels.get(channel) === attempt) {
248
256
  subscriptionRetryAttempts.delete(channel);
249
257
  }
250
258
  }, onFailure);
259
+ subscriptionPromises.set(channel, subscriptionPromise);
260
+ void subscriptionPromise.then(() => {
261
+ if (subscriptionPromises.get(channel) === subscriptionPromise) {
262
+ subscriptionPromises.delete(channel);
263
+ }
264
+ });
251
265
  }
252
266
  catch (error) {
253
267
  onFailure(error);
254
268
  }
255
269
  };
270
+ const unsubscribeRedisChannel = async (channel, eventName, subscriptionPromise = subscriptionPromises.get(channel), expectedAttempt) => {
271
+ let releasesExpectedAttempt = false;
272
+ try {
273
+ await subscriptionPromise;
274
+ while (expectedAttempt &&
275
+ latestSubscriptionAttempts.get(channel) !== expectedAttempt) {
276
+ const newerAttempt = latestSubscriptionAttempts.get(channel);
277
+ if (!newerAttempt)
278
+ break;
279
+ await subscriptionPromises.get(channel);
280
+ if (latestSubscriptionAttempts.get(channel) !== newerAttempt) {
281
+ continue;
282
+ }
283
+ if (subscribedChannels.get(channel) === newerAttempt)
284
+ return;
285
+ break;
286
+ }
287
+ if (expectedAttempt && subscribedChannels.has(channel))
288
+ return;
289
+ releasesExpectedAttempt = expectedAttempt !== undefined;
290
+ await options.subscriber.unsubscribe(channel);
291
+ }
292
+ catch (error) {
293
+ reportSubscriberError(error, {
294
+ operation: "unsubscribe",
295
+ channel,
296
+ eventName,
297
+ });
298
+ }
299
+ finally {
300
+ if (releasesExpectedAttempt &&
301
+ expectedAttempt &&
302
+ latestSubscriptionAttempts.get(channel) === expectedAttempt) {
303
+ latestSubscriptionAttempts.delete(channel);
304
+ }
305
+ }
306
+ };
307
+ const trackChannelCleanup = (cleanup) => {
308
+ channelCleanupPromises.add(cleanup);
309
+ void cleanup.then(() => channelCleanupPromises.delete(cleanup));
310
+ };
256
311
  const unsubscribeChannel = (eventName) => {
257
312
  const channel = channelForEvent(channelPrefix, eventName);
258
313
  const retryTimer = subscriptionRetryTimers.get(channel);
@@ -261,22 +316,13 @@ function createRedisEventBusRuntime(options) {
261
316
  subscriptionRetryTimers.delete(channel);
262
317
  }
263
318
  subscriptionRetryAttempts.delete(channel);
264
- if (!subscribedChannels.has(channel))
319
+ const attempt = subscribedChannels.get(channel);
320
+ if (!attempt)
265
321
  return;
322
+ const subscriptionPromise = subscriptionPromises.get(channel);
266
323
  subscribedChannels.delete(channel);
267
- const onFailure = (error) => {
268
- reportSubscriberError(error, {
269
- operation: "unsubscribe",
270
- channel,
271
- eventName,
272
- });
273
- };
274
- try {
275
- Promise.resolve(options.subscriber.unsubscribe(channel)).catch(onFailure);
276
- }
277
- catch (error) {
278
- onFailure(error);
279
- }
324
+ const cleanup = unsubscribeRedisChannel(channel, eventName, subscriptionPromise, attempt);
325
+ trackChannelCleanup(cleanup);
280
326
  };
281
327
  const eventBus = {
282
328
  async publish(event, payload, publishOptions) {
@@ -308,6 +354,9 @@ function createRedisEventBusRuntime(options) {
308
354
  }
309
355
  },
310
356
  subscribe(event, handler) {
357
+ if (stopped) {
358
+ throw new Error("Cannot subscribe to a Redis event bus after it has stopped.");
359
+ }
311
360
  let eventHandlers = handlers.get(event.name);
312
361
  if (!eventHandlers) {
313
362
  eventHandlers = new Set();
@@ -327,24 +376,35 @@ function createRedisEventBusRuntime(options) {
327
376
  };
328
377
  },
329
378
  };
379
+ const stop = () => {
380
+ if (stopPromise)
381
+ return stopPromise;
382
+ stopped = true;
383
+ const channels = [...subscribedChannels.keys()];
384
+ for (const timer of subscriptionRetryTimers.values()) {
385
+ clearTimeout(timer);
386
+ }
387
+ subscriptionRetryTimers.clear();
388
+ subscriptionRetryAttempts.clear();
389
+ subscribedChannels.clear();
390
+ handlers.clear();
391
+ if (options.subscriber.off) {
392
+ options.subscriber.off("message", messageHandler);
393
+ }
394
+ else {
395
+ options.subscriber.removeListener?.("message", messageHandler);
396
+ }
397
+ stopPromise = Promise.all([
398
+ ...channelCleanupPromises,
399
+ ...channels.map((channel) => unsubscribeRedisChannel(channel, eventNameForChannel(channelPrefix, channel))),
400
+ ]).then(() => {
401
+ latestSubscriptionAttempts.clear();
402
+ });
403
+ return stopPromise;
404
+ };
330
405
  return {
331
- eventBus,
332
- stop() {
333
- stopped = true;
334
- for (const timer of subscriptionRetryTimers.values()) {
335
- clearTimeout(timer);
336
- }
337
- subscriptionRetryTimers.clear();
338
- subscriptionRetryAttempts.clear();
339
- subscribedChannels.clear();
340
- handlers.clear();
341
- if (options.subscriber.off) {
342
- options.subscriber.off("message", messageHandler);
343
- }
344
- else {
345
- options.subscriber.removeListener?.("message", messageHandler);
346
- }
347
- },
406
+ eventBus: Object.assign(eventBus, { stop }),
407
+ stop,
348
408
  };
349
409
  }
350
410
  export function createRedisEventBus(options) {
@@ -473,7 +533,7 @@ export function createRedisEventBusProvider(options = {}) {
473
533
  },
474
534
  },
475
535
  async stop() {
476
- eventBusRuntime.stop();
536
+ await eventBusRuntime.stop();
477
537
  try {
478
538
  await subscriber.quit();
479
539
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/provider-event-bus-redis",
3
- "version": "0.0.44",
3
+ "version": "0.0.45",
4
4
  "type": "module",
5
5
  "description": "Redis Pub/Sub event bus provider for Beignet - implements EventBusPort for cross-process best-effort delivery",
6
6
  "main": "./dist/index.js",
package/src/index.ts CHANGED
@@ -238,9 +238,24 @@ async function checkRedisEventBusHealth(
238
238
  }
239
239
  }
240
240
 
241
+ /**
242
+ * Direct Redis event-bus adapter with explicit subscription cleanup.
243
+ *
244
+ * `stop()` detaches the message listener, cancels subscription retries, and
245
+ * releases channels subscribed by this adapter. The injected Redis clients
246
+ * remain caller-owned.
247
+ */
248
+ export interface RedisEventBus extends EventBusPort {
249
+ /**
250
+ * Stop local delivery and best-effort unsubscribe the adapter's channels
251
+ * without closing the caller-owned Redis clients.
252
+ */
253
+ stop(): Promise<void>;
254
+ }
255
+
241
256
  interface RedisEventBusRuntime {
242
- eventBus: EventBusPort;
243
- stop(): void;
257
+ eventBus: RedisEventBus;
258
+ stop(): Promise<void>;
244
259
  }
245
260
 
246
261
  function createRedisEventBusRuntime(
@@ -257,12 +272,16 @@ function createRedisEventBusRuntime(
257
272
  >
258
273
  >();
259
274
  const subscribedChannels = new Map<string, symbol>();
275
+ const latestSubscriptionAttempts = new Map<string, symbol>();
260
276
  const subscriptionRetryAttempts = new Map<string, number>();
261
277
  const subscriptionRetryTimers = new Map<
262
278
  string,
263
279
  ReturnType<typeof setTimeout>
264
280
  >();
281
+ const subscriptionPromises = new Map<string, Promise<void>>();
282
+ const channelCleanupPromises = new Set<Promise<void>>();
265
283
  let stopped = false;
284
+ let stopPromise: Promise<void> | undefined;
266
285
  const instrumentation = createProviderInstrumentation(
267
286
  options.instrumentation,
268
287
  {
@@ -412,10 +431,14 @@ function createRedisEventBusRuntime(
412
431
  }
413
432
  const attempt = Symbol(channel);
414
433
  subscribedChannels.set(channel, attempt);
434
+ latestSubscriptionAttempts.set(channel, attempt);
415
435
 
416
436
  const onFailure = (error: unknown) => {
417
437
  if (subscribedChannels.get(channel) === attempt) {
418
438
  subscribedChannels.delete(channel);
439
+ if (latestSubscriptionAttempts.get(channel) === attempt) {
440
+ latestSubscriptionAttempts.delete(channel);
441
+ }
419
442
  scheduleSubscriptionRetry(eventName);
420
443
  }
421
444
  reportSubscriberError(error, {
@@ -426,16 +449,71 @@ function createRedisEventBusRuntime(
426
449
  };
427
450
 
428
451
  try {
429
- Promise.resolve(options.subscriber.subscribe(channel)).then(() => {
452
+ const subscriptionPromise = Promise.resolve(
453
+ options.subscriber.subscribe(channel),
454
+ ).then(() => {
430
455
  if (subscribedChannels.get(channel) === attempt) {
431
456
  subscriptionRetryAttempts.delete(channel);
432
457
  }
433
458
  }, onFailure);
459
+ subscriptionPromises.set(channel, subscriptionPromise);
460
+ void subscriptionPromise.then(() => {
461
+ if (subscriptionPromises.get(channel) === subscriptionPromise) {
462
+ subscriptionPromises.delete(channel);
463
+ }
464
+ });
434
465
  } catch (error) {
435
466
  onFailure(error);
436
467
  }
437
468
  };
438
469
 
470
+ const unsubscribeRedisChannel = async (
471
+ channel: string,
472
+ eventName: string | undefined,
473
+ subscriptionPromise = subscriptionPromises.get(channel),
474
+ expectedAttempt?: symbol,
475
+ ): Promise<void> => {
476
+ let releasesExpectedAttempt = false;
477
+ try {
478
+ await subscriptionPromise;
479
+ while (
480
+ expectedAttempt &&
481
+ latestSubscriptionAttempts.get(channel) !== expectedAttempt
482
+ ) {
483
+ const newerAttempt = latestSubscriptionAttempts.get(channel);
484
+ if (!newerAttempt) break;
485
+ await subscriptionPromises.get(channel);
486
+ if (latestSubscriptionAttempts.get(channel) !== newerAttempt) {
487
+ continue;
488
+ }
489
+ if (subscribedChannels.get(channel) === newerAttempt) return;
490
+ break;
491
+ }
492
+ if (expectedAttempt && subscribedChannels.has(channel)) return;
493
+ releasesExpectedAttempt = expectedAttempt !== undefined;
494
+ await options.subscriber.unsubscribe(channel);
495
+ } catch (error) {
496
+ reportSubscriberError(error, {
497
+ operation: "unsubscribe",
498
+ channel,
499
+ eventName,
500
+ });
501
+ } finally {
502
+ if (
503
+ releasesExpectedAttempt &&
504
+ expectedAttempt &&
505
+ latestSubscriptionAttempts.get(channel) === expectedAttempt
506
+ ) {
507
+ latestSubscriptionAttempts.delete(channel);
508
+ }
509
+ }
510
+ };
511
+
512
+ const trackChannelCleanup = (cleanup: Promise<void>) => {
513
+ channelCleanupPromises.add(cleanup);
514
+ void cleanup.then(() => channelCleanupPromises.delete(cleanup));
515
+ };
516
+
439
517
  const unsubscribeChannel = (eventName: string) => {
440
518
  const channel = channelForEvent(channelPrefix, eventName);
441
519
  const retryTimer = subscriptionRetryTimers.get(channel);
@@ -444,22 +522,17 @@ function createRedisEventBusRuntime(
444
522
  subscriptionRetryTimers.delete(channel);
445
523
  }
446
524
  subscriptionRetryAttempts.delete(channel);
447
- if (!subscribedChannels.has(channel)) return;
525
+ const attempt = subscribedChannels.get(channel);
526
+ if (!attempt) return;
527
+ const subscriptionPromise = subscriptionPromises.get(channel);
448
528
  subscribedChannels.delete(channel);
449
-
450
- const onFailure = (error: unknown) => {
451
- reportSubscriberError(error, {
452
- operation: "unsubscribe",
453
- channel,
454
- eventName,
455
- });
456
- };
457
-
458
- try {
459
- Promise.resolve(options.subscriber.unsubscribe(channel)).catch(onFailure);
460
- } catch (error) {
461
- onFailure(error);
462
- }
529
+ const cleanup = unsubscribeRedisChannel(
530
+ channel,
531
+ eventName,
532
+ subscriptionPromise,
533
+ attempt,
534
+ );
535
+ trackChannelCleanup(cleanup);
463
536
  };
464
537
 
465
538
  const eventBus: EventBusPort = {
@@ -502,6 +575,12 @@ function createRedisEventBusRuntime(
502
575
  options?: { trace?: TraceCarrier },
503
576
  ) => void | Promise<void>,
504
577
  ) {
578
+ if (stopped) {
579
+ throw new Error(
580
+ "Cannot subscribe to a Redis event bus after it has stopped.",
581
+ );
582
+ }
583
+
505
584
  let eventHandlers = handlers.get(event.name);
506
585
  if (!eventHandlers) {
507
586
  eventHandlers = new Set();
@@ -533,29 +612,45 @@ function createRedisEventBusRuntime(
533
612
  },
534
613
  };
535
614
 
615
+ const stop = (): Promise<void> => {
616
+ if (stopPromise) return stopPromise;
617
+ stopped = true;
618
+ const channels = [...subscribedChannels.keys()];
619
+ for (const timer of subscriptionRetryTimers.values()) {
620
+ clearTimeout(timer);
621
+ }
622
+ subscriptionRetryTimers.clear();
623
+ subscriptionRetryAttempts.clear();
624
+ subscribedChannels.clear();
625
+ handlers.clear();
626
+ if (options.subscriber.off) {
627
+ options.subscriber.off("message", messageHandler);
628
+ } else {
629
+ options.subscriber.removeListener?.("message", messageHandler);
630
+ }
631
+ stopPromise = Promise.all([
632
+ ...channelCleanupPromises,
633
+ ...channels.map((channel) =>
634
+ unsubscribeRedisChannel(
635
+ channel,
636
+ eventNameForChannel(channelPrefix, channel),
637
+ ),
638
+ ),
639
+ ]).then(() => {
640
+ latestSubscriptionAttempts.clear();
641
+ });
642
+ return stopPromise;
643
+ };
644
+
536
645
  return {
537
- eventBus,
538
- stop() {
539
- stopped = true;
540
- for (const timer of subscriptionRetryTimers.values()) {
541
- clearTimeout(timer);
542
- }
543
- subscriptionRetryTimers.clear();
544
- subscriptionRetryAttempts.clear();
545
- subscribedChannels.clear();
546
- handlers.clear();
547
- if (options.subscriber.off) {
548
- options.subscriber.off("message", messageHandler);
549
- } else {
550
- options.subscriber.removeListener?.("message", messageHandler);
551
- }
552
- },
646
+ eventBus: Object.assign(eventBus, { stop }),
647
+ stop,
553
648
  };
554
649
  }
555
650
 
556
651
  export function createRedisEventBus(
557
652
  options: CreateRedisEventBusOptions,
558
- ): EventBusPort {
653
+ ): RedisEventBus {
559
654
  return createRedisEventBusRuntime(options).eventBus;
560
655
  }
561
656
 
@@ -706,7 +801,7 @@ export function createRedisEventBusProvider(
706
801
  },
707
802
  } satisfies RedisEventBusProviderPorts,
708
803
  async stop() {
709
- eventBusRuntime.stop();
804
+ await eventBusRuntime.stop();
710
805
  try {
711
806
  await subscriber.quit();
712
807
  } catch {