@newhomestar/sdk 0.7.7 → 0.7.8

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 (2) hide show
  1. package/dist/events.js +25 -3
  2. package/package.json +1 -1
package/dist/events.js CHANGED
@@ -792,12 +792,33 @@ export function startInboundConsumer(db, options) {
792
792
  // Successfully connected — reset reconnect counter
793
793
  reconnectAttempt = 0;
794
794
  console.log(`[nova/events] SSE consumer connected to queue "${queueName}"`);
795
- await _consumeStream(response);
795
+ // Consume the stream; catch stream-level errors separately from
796
+ // connection-level errors so they don't trigger exponential backoff.
797
+ // A stream dying mid-flight (e.g. proxy timeout) is a normal lifecycle
798
+ // event — reconnect immediately with a short fixed delay.
799
+ try {
800
+ await _consumeStream(response);
801
+ }
802
+ catch (streamErr) {
803
+ if (abort.signal.aborted)
804
+ return;
805
+ const isAbortError = streamErr?.name === 'AbortError' || streamErr?.code === 20;
806
+ if (isAbortError)
807
+ return;
808
+ console.error(`[nova/events] SSE stream error for queue "${queueName}":`, String(streamErr).slice(0, 300));
809
+ }
796
810
  if (abort.signal.aborted) {
797
811
  console.log(`[nova/events] SSE consumer for queue "${queueName}" shut down gracefully`);
798
812
  return;
799
813
  }
800
- console.log(`[nova/events] SSE stream for queue "${queueName}" closed — reconnecting…`);
814
+ // Stream ended (normal close OR proxy timeout). The connection WAS
815
+ // established, so no exponential backoff — reconnect in a fixed 1s.
816
+ console.log(`[nova/events] SSE stream for queue "${queueName}" closed — reconnecting in 1000ms…`);
817
+ await new Promise((resolve) => {
818
+ const t = setTimeout(resolve, 1_000);
819
+ abort.signal.addEventListener('abort', () => { clearTimeout(t); resolve(); }, { once: true });
820
+ });
821
+ continue; // skip exponential backoff below
801
822
  }
802
823
  catch (err) {
803
824
  if (abort.signal.aborted) {
@@ -809,7 +830,8 @@ export function startInboundConsumer(db, options) {
809
830
  return;
810
831
  console.error(`[nova/events] SSE connection error for queue "${queueName}":`, String(err).slice(0, 300));
811
832
  }
812
- // Exponential backoff: 1s, 2s, 4s, 8s, ... capped at maxReconnectDelay
833
+ // Exponential backoff only for connection-level failures (fetch threw or
834
+ // server returned non-200). Stream-level drops use the fixed 1s above.
813
835
  const delayMs = Math.min(1_000 * Math.pow(2, reconnectAttempt), maxReconnectDelay);
814
836
  reconnectAttempt++;
815
837
  console.log(`[nova/events] Reconnecting queue "${queueName}" in ${delayMs}ms…`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newhomestar/sdk",
3
- "version": "0.7.7",
3
+ "version": "0.7.8",
4
4
  "description": "Type-safe SDK for building Nova pipelines (workers & functions)",
5
5
  "homepage": "https://github.com/newhomestar/nova-node-sdk#readme",
6
6
  "bugs": {