@crossdelta/cloudevents 0.7.16 → 0.7.18

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/dist/index.cjs CHANGED
@@ -2188,7 +2188,7 @@ function cloudEvents(options = {}) {
2188
2188
  // package.json
2189
2189
  var package_default = {
2190
2190
  name: "@crossdelta/cloudevents",
2191
- version: "0.7.16",
2191
+ version: "0.7.18",
2192
2192
  description: "CloudEvents toolkit for TypeScript - Zod validation, handler discovery, NATS JetStream & Core"};
2193
2193
 
2194
2194
  // src/plugin.ts
@@ -2422,6 +2422,7 @@ function createBaseMessageProcessor(deps) {
2422
2422
  }
2423
2423
 
2424
2424
  // src/transports/nats/connection.ts
2425
+ init_logging();
2425
2426
  var LONG_LIVED_DEFAULTS = {
2426
2427
  waitOnFirstConnect: false,
2427
2428
  maxReconnectAttempts: -1
@@ -2430,6 +2431,11 @@ var SHORT_LIVED_DEFAULTS = {
2430
2431
  waitOnFirstConnect: true,
2431
2432
  maxReconnectAttempts: 10
2432
2433
  };
2434
+ var INITIAL_RETRY_DELAY_MS = 1e3;
2435
+ var MAX_RETRY_DELAY_MS = 3e4;
2436
+ var ESCALATE_AFTER_MS = 5 * 60 * 1e3;
2437
+ var CONNECTION_REGISTRY_KEY = "__crossdelta_nats_connections__";
2438
+ var global = globalThis;
2433
2439
  var buildConnectOptions = (config, mode) => {
2434
2440
  const defaults = mode === "long-lived" ? LONG_LIVED_DEFAULTS : SHORT_LIVED_DEFAULTS;
2435
2441
  return {
@@ -2437,12 +2443,26 @@ var buildConnectOptions = (config, mode) => {
2437
2443
  maxReconnectAttempts: config?.maxReconnectAttempts ?? defaults.maxReconnectAttempts
2438
2444
  };
2439
2445
  };
2440
- var CONNECTION_REGISTRY_KEY = "__crossdelta_nats_connections__";
2441
2446
  var getConnectionRegistry = () => {
2442
- if (!globalThis[CONNECTION_REGISTRY_KEY]) {
2443
- globalThis[CONNECTION_REGISTRY_KEY] = /* @__PURE__ */ new Map();
2447
+ if (!global[CONNECTION_REGISTRY_KEY]) {
2448
+ global[CONNECTION_REGISTRY_KEY] = /* @__PURE__ */ new Map();
2449
+ }
2450
+ return global[CONNECTION_REGISTRY_KEY];
2451
+ };
2452
+ var connectWithRetry = async (options, label) => {
2453
+ let delay = INITIAL_RETRY_DELAY_MS;
2454
+ const startedAt = Date.now();
2455
+ while (true) {
2456
+ try {
2457
+ return await nats.connect(options);
2458
+ } catch (error) {
2459
+ const elapsed = Date.now() - startedAt;
2460
+ const logLevel = elapsed >= ESCALATE_AFTER_MS ? "error" : "info";
2461
+ logger[logLevel](`[${label}] NATS connect failed, retrying in ${delay}ms...`, error);
2462
+ await new Promise((resolve) => setTimeout(resolve, delay));
2463
+ delay = Math.min(delay * 2, MAX_RETRY_DELAY_MS);
2464
+ }
2444
2465
  }
2445
- return globalThis[CONNECTION_REGISTRY_KEY];
2446
2466
  };
2447
2467
  var registerConnection = (name, connection) => {
2448
2468
  getConnectionRegistry().set(name, connection);
@@ -2610,11 +2630,14 @@ async function consumeJetStreamEvents(options) {
2610
2630
  const processedHandlers = handlerConstructors.map(processHandler).filter((h) => h !== null);
2611
2631
  const handlerNames = processedHandlers.map((h) => h.name).join(", ");
2612
2632
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
2613
- const nc = await nats.connect({
2614
- servers,
2615
- ...user && pass ? { user, pass } : {},
2616
- ...buildConnectOptions(options.connection, "long-lived")
2617
- });
2633
+ const nc = await connectWithRetry(
2634
+ {
2635
+ servers,
2636
+ ...user && pass ? { user, pass } : {},
2637
+ ...buildConnectOptions(options.connection, "long-lived")
2638
+ },
2639
+ name
2640
+ );
2618
2641
  registerConnection(name, nc);
2619
2642
  logger.info(`[${name}] connected to NATS: ${servers}${user ? " (authenticated)" : ""}`);
2620
2643
  const jsm = await nc.jetstreamManager();
@@ -2680,11 +2703,14 @@ async function consumeJetStreamStreams(options) {
2680
2703
  const processedHandlers = handlerConstructors.map(processHandler).filter((h) => h !== null);
2681
2704
  const handlerNames = processedHandlers.map((h) => h.name).join(", ");
2682
2705
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
2683
- const nc = await nats.connect({
2684
- servers,
2685
- ...user && pass ? { user, pass } : {},
2686
- ...buildConnectOptions(options.connection, "long-lived")
2687
- });
2706
+ const nc = await connectWithRetry(
2707
+ {
2708
+ servers,
2709
+ ...user && pass ? { user, pass } : {},
2710
+ ...buildConnectOptions(options.connection, "long-lived")
2711
+ },
2712
+ name
2713
+ );
2688
2714
  registerConnection(name, nc);
2689
2715
  logger.info(`[${name}] connected to NATS: ${servers}${user ? " (authenticated)" : ""}`);
2690
2716
  const jsm = await nc.jetstreamManager();
@@ -2826,11 +2852,14 @@ async function consumeNatsEvents(options) {
2826
2852
  const processedHandlers = handlerConstructors.map(processHandler).filter((h) => h !== null);
2827
2853
  const handlerNames = processedHandlers.map((h) => h.name).join(", ");
2828
2854
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
2829
- const nc = await nats.connect({
2830
- servers,
2831
- ...user && pass ? { user, pass } : {},
2832
- ...buildConnectOptions(options.connection, "long-lived")
2833
- });
2855
+ const nc = await connectWithRetry(
2856
+ {
2857
+ servers,
2858
+ ...user && pass ? { user, pass } : {},
2859
+ ...buildConnectOptions(options.connection, "long-lived")
2860
+ },
2861
+ name
2862
+ );
2834
2863
  logger.info(`[${name}] connected to NATS: ${servers}${user ? " (authenticated)" : ""}`);
2835
2864
  const sub = nc.subscribe(subject, { queue: name });
2836
2865
  logger.info(`[${name}] subscribed to subject: ${subject} (queue: ${name})`);
package/dist/index.js CHANGED
@@ -2163,7 +2163,7 @@ function cloudEvents(options = {}) {
2163
2163
  // package.json
2164
2164
  var package_default = {
2165
2165
  name: "@crossdelta/cloudevents",
2166
- version: "0.7.16",
2166
+ version: "0.7.18",
2167
2167
  description: "CloudEvents toolkit for TypeScript - Zod validation, handler discovery, NATS JetStream & Core"};
2168
2168
 
2169
2169
  // src/plugin.ts
@@ -2397,6 +2397,7 @@ function createBaseMessageProcessor(deps) {
2397
2397
  }
2398
2398
 
2399
2399
  // src/transports/nats/connection.ts
2400
+ init_logging();
2400
2401
  var LONG_LIVED_DEFAULTS = {
2401
2402
  waitOnFirstConnect: false,
2402
2403
  maxReconnectAttempts: -1
@@ -2405,6 +2406,11 @@ var SHORT_LIVED_DEFAULTS = {
2405
2406
  waitOnFirstConnect: true,
2406
2407
  maxReconnectAttempts: 10
2407
2408
  };
2409
+ var INITIAL_RETRY_DELAY_MS = 1e3;
2410
+ var MAX_RETRY_DELAY_MS = 3e4;
2411
+ var ESCALATE_AFTER_MS = 5 * 60 * 1e3;
2412
+ var CONNECTION_REGISTRY_KEY = "__crossdelta_nats_connections__";
2413
+ var global = globalThis;
2408
2414
  var buildConnectOptions = (config, mode) => {
2409
2415
  const defaults = mode === "long-lived" ? LONG_LIVED_DEFAULTS : SHORT_LIVED_DEFAULTS;
2410
2416
  return {
@@ -2412,12 +2418,26 @@ var buildConnectOptions = (config, mode) => {
2412
2418
  maxReconnectAttempts: config?.maxReconnectAttempts ?? defaults.maxReconnectAttempts
2413
2419
  };
2414
2420
  };
2415
- var CONNECTION_REGISTRY_KEY = "__crossdelta_nats_connections__";
2416
2421
  var getConnectionRegistry = () => {
2417
- if (!globalThis[CONNECTION_REGISTRY_KEY]) {
2418
- globalThis[CONNECTION_REGISTRY_KEY] = /* @__PURE__ */ new Map();
2422
+ if (!global[CONNECTION_REGISTRY_KEY]) {
2423
+ global[CONNECTION_REGISTRY_KEY] = /* @__PURE__ */ new Map();
2424
+ }
2425
+ return global[CONNECTION_REGISTRY_KEY];
2426
+ };
2427
+ var connectWithRetry = async (options, label) => {
2428
+ let delay = INITIAL_RETRY_DELAY_MS;
2429
+ const startedAt = Date.now();
2430
+ while (true) {
2431
+ try {
2432
+ return await connect(options);
2433
+ } catch (error) {
2434
+ const elapsed = Date.now() - startedAt;
2435
+ const logLevel = elapsed >= ESCALATE_AFTER_MS ? "error" : "info";
2436
+ logger[logLevel](`[${label}] NATS connect failed, retrying in ${delay}ms...`, error);
2437
+ await new Promise((resolve) => setTimeout(resolve, delay));
2438
+ delay = Math.min(delay * 2, MAX_RETRY_DELAY_MS);
2439
+ }
2419
2440
  }
2420
- return globalThis[CONNECTION_REGISTRY_KEY];
2421
2441
  };
2422
2442
  var registerConnection = (name, connection) => {
2423
2443
  getConnectionRegistry().set(name, connection);
@@ -2585,11 +2605,14 @@ async function consumeJetStreamEvents(options) {
2585
2605
  const processedHandlers = handlerConstructors.map(processHandler).filter((h) => h !== null);
2586
2606
  const handlerNames = processedHandlers.map((h) => h.name).join(", ");
2587
2607
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
2588
- const nc = await connect({
2589
- servers,
2590
- ...user && pass ? { user, pass } : {},
2591
- ...buildConnectOptions(options.connection, "long-lived")
2592
- });
2608
+ const nc = await connectWithRetry(
2609
+ {
2610
+ servers,
2611
+ ...user && pass ? { user, pass } : {},
2612
+ ...buildConnectOptions(options.connection, "long-lived")
2613
+ },
2614
+ name
2615
+ );
2593
2616
  registerConnection(name, nc);
2594
2617
  logger.info(`[${name}] connected to NATS: ${servers}${user ? " (authenticated)" : ""}`);
2595
2618
  const jsm = await nc.jetstreamManager();
@@ -2655,11 +2678,14 @@ async function consumeJetStreamStreams(options) {
2655
2678
  const processedHandlers = handlerConstructors.map(processHandler).filter((h) => h !== null);
2656
2679
  const handlerNames = processedHandlers.map((h) => h.name).join(", ");
2657
2680
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
2658
- const nc = await connect({
2659
- servers,
2660
- ...user && pass ? { user, pass } : {},
2661
- ...buildConnectOptions(options.connection, "long-lived")
2662
- });
2681
+ const nc = await connectWithRetry(
2682
+ {
2683
+ servers,
2684
+ ...user && pass ? { user, pass } : {},
2685
+ ...buildConnectOptions(options.connection, "long-lived")
2686
+ },
2687
+ name
2688
+ );
2663
2689
  registerConnection(name, nc);
2664
2690
  logger.info(`[${name}] connected to NATS: ${servers}${user ? " (authenticated)" : ""}`);
2665
2691
  const jsm = await nc.jetstreamManager();
@@ -2801,11 +2827,14 @@ async function consumeNatsEvents(options) {
2801
2827
  const processedHandlers = handlerConstructors.map(processHandler).filter((h) => h !== null);
2802
2828
  const handlerNames = processedHandlers.map((h) => h.name).join(", ");
2803
2829
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
2804
- const nc = await connect({
2805
- servers,
2806
- ...user && pass ? { user, pass } : {},
2807
- ...buildConnectOptions(options.connection, "long-lived")
2808
- });
2830
+ const nc = await connectWithRetry(
2831
+ {
2832
+ servers,
2833
+ ...user && pass ? { user, pass } : {},
2834
+ ...buildConnectOptions(options.connection, "long-lived")
2835
+ },
2836
+ name
2837
+ );
2809
2838
  logger.info(`[${name}] connected to NATS: ${servers}${user ? " (authenticated)" : ""}`);
2810
2839
  const sub = nc.subscribe(subject, { queue: name });
2811
2840
  logger.info(`[${name}] subscribed to subject: ${subject} (queue: ${name})`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossdelta/cloudevents",
3
- "version": "0.7.16",
3
+ "version": "0.7.18",
4
4
  "description": "CloudEvents toolkit for TypeScript - Zod validation, handler discovery, NATS JetStream & Core",
5
5
  "author": "crossdelta",
6
6
  "license": "MIT",