@muhkoo/connect 0.3.0-alpha.0 → 0.6.0-alpha.1

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.
@@ -1913,6 +1913,7 @@ class WSTransport extends EventCore {
1913
1913
  return `${this.id}:${event}`;
1914
1914
  }
1915
1915
  url;
1916
+ urlProvider;
1916
1917
  socket = null;
1917
1918
  _isConnected = false;
1918
1919
  _isConnecting = false;
@@ -1938,6 +1939,7 @@ class WSTransport extends EventCore {
1938
1939
  throw new Error("WSTransport: `url` is required");
1939
1940
  }
1940
1941
  this.url = opts.url;
1942
+ this.urlProvider = opts.urlProvider;
1941
1943
  this.id = opts.id ?? `ws${++__wsInstanceSeq}`;
1942
1944
  this.autoReconnect = opts.autoReconnect ?? true;
1943
1945
  this.reconnectDelay = opts.reconnectDelay ?? 3000;
@@ -1954,6 +1956,18 @@ class WSTransport extends EventCore {
1954
1956
  throw new Error("WSTransport: already connected or connecting");
1955
1957
  }
1956
1958
  this._isConnecting = true;
1959
+ // On a RECONNECT, refresh the URL (the baked-in single-use ticket is spent).
1960
+ // The first connect uses `url` as-is. If the provider throws (e.g. can't
1961
+ // mint a ticket), surface it and let scheduleReconnect retry.
1962
+ if (this.urlProvider && this.reconnectAttempts > 0) {
1963
+ try {
1964
+ this.url = await this.urlProvider();
1965
+ }
1966
+ catch (err) {
1967
+ this._isConnecting = false;
1968
+ throw err;
1969
+ }
1970
+ }
1957
1971
  return new Promise((resolve, reject) => {
1958
1972
  try {
1959
1973
  const socket = new WebSocket(this.url);
@@ -2126,7 +2140,12 @@ class WSTransport extends EventCore {
2126
2140
  await this.connect();
2127
2141
  }
2128
2142
  catch {
2129
- // scheduleReconnect will fire again from onclose
2143
+ // A failed reconnect never opened the socket, so its `onclose` won't
2144
+ // re-schedule (that path is guarded by `wasConnected`). Re-schedule here
2145
+ // so we keep retrying (with a fresh ticket each time) until we succeed
2146
+ // or hit the attempt cap.
2147
+ if (this.autoReconnect)
2148
+ this.scheduleReconnect();
2130
2149
  }
2131
2150
  }, this.reconnectDelay);
2132
2151
  }