@signalwire/js 4.0.0-dev-20260410155733 → 4.0.0-dev-20260410161919

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
@@ -1319,7 +1319,7 @@ var NavigatorDeviceController = class extends Destroyable {
1319
1319
  enableAudioInput() {
1320
1320
  if (this._audioInputDisabled$.value) {
1321
1321
  this._audioInputDisabled$.next(false);
1322
- const restored = this._lastAudioInputBeforeDisable ?? this.audioInputDevices[0] ?? null;
1322
+ const restored = this._lastAudioInputBeforeDisable ?? this.audioInputDevices[0];
1323
1323
  this._selectedDevicesState$.next({
1324
1324
  ...this._selectedDevicesState$.value,
1325
1325
  audioinput: restored
@@ -1340,7 +1340,7 @@ var NavigatorDeviceController = class extends Destroyable {
1340
1340
  enableVideoInput() {
1341
1341
  if (this._videoInputDisabled$.value) {
1342
1342
  this._videoInputDisabled$.next(false);
1343
- const restored = this._lastVideoInputBeforeDisable ?? this.videoInputDevices[0] ?? null;
1343
+ const restored = this._lastVideoInputBeforeDisable ?? this.videoInputDevices[0];
1344
1344
  this._selectedDevicesState$.next({
1345
1345
  ...this._selectedDevicesState$.value,
1346
1346
  videoinput: restored
@@ -1698,10 +1698,10 @@ var StorageManager = class {
1698
1698
  //#region src/containers/DependencyContainer.ts
1699
1699
  var DependencyContainer = class {
1700
1700
  constructor() {
1701
+ this.persistSession = false;
1701
1702
  this._webSocketConstructor = typeof WebSocket !== "undefined" ? WebSocket : void 0;
1702
1703
  this._baseURL = this.apiHost;
1703
1704
  this._credential = {};
1704
- this.persistSession = false;
1705
1705
  }
1706
1706
  get subscriberId() {
1707
1707
  return this.subscriber.id;
@@ -1839,7 +1839,7 @@ const computeJwkThumbprint = async (jwk) => {
1839
1839
  });
1840
1840
  return base64url(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(canonical)));
1841
1841
  };
1842
- function openDpopDB() {
1842
+ async function openDpopDB() {
1843
1843
  return new Promise((resolve, reject) => {
1844
1844
  const request = indexedDB.open(DPOP_DB_NAME, DPOP_DB_VERSION);
1845
1845
  request.onupgradeneeded = () => {
@@ -1847,7 +1847,7 @@ function openDpopDB() {
1847
1847
  if (!db.objectStoreNames.contains(DPOP_STORE_NAME)) db.createObjectStore(DPOP_STORE_NAME);
1848
1848
  };
1849
1849
  request.onsuccess = () => resolve(request.result);
1850
- request.onerror = () => reject(request.error);
1850
+ request.onerror = () => reject(request.error ?? /* @__PURE__ */ new Error("Failed to open IndexedDB"));
1851
1851
  });
1852
1852
  }
1853
1853
  async function loadKeyPairFromDB() {
@@ -1857,7 +1857,7 @@ async function loadKeyPairFromDB() {
1857
1857
  const tx = db.transaction(DPOP_STORE_NAME, "readonly");
1858
1858
  const req = tx.objectStore(DPOP_STORE_NAME).get(DPOP_KEY_ID);
1859
1859
  req.onsuccess = () => resolve(req.result ?? null);
1860
- req.onerror = () => reject(req.error);
1860
+ req.onerror = () => reject(req.error ?? /* @__PURE__ */ new Error("Failed to load key pair from IndexedDB"));
1861
1861
  tx.oncomplete = () => db.close();
1862
1862
  });
1863
1863
  } catch (error) {
@@ -1877,7 +1877,7 @@ async function saveKeyPairToDB(keyPair) {
1877
1877
  };
1878
1878
  tx.onerror = () => {
1879
1879
  db.close();
1880
- reject(tx.error);
1880
+ reject(tx.error ?? /* @__PURE__ */ new Error("Failed to save key pair to IndexedDB"));
1881
1881
  };
1882
1882
  });
1883
1883
  } catch (error) {
@@ -1896,7 +1896,7 @@ async function deleteKeyPairFromDB() {
1896
1896
  };
1897
1897
  tx.onerror = () => {
1898
1898
  db.close();
1899
- reject(tx.error);
1899
+ reject(tx.error ?? /* @__PURE__ */ new Error("Failed to delete key pair from IndexedDB"));
1900
1900
  };
1901
1901
  });
1902
1902
  } catch (error) {
@@ -2276,7 +2276,7 @@ function detectScreenShareAudio() {
2276
2276
  * Safely retrieves navigator.mediaDevices, returning null if unavailable.
2277
2277
  */
2278
2278
  function getNavigatorMediaDevices() {
2279
- if (typeof navigator !== "undefined" && navigator.mediaDevices) return navigator.mediaDevices;
2279
+ if (typeof navigator !== "undefined") return navigator.mediaDevices;
2280
2280
  return null;
2281
2281
  }
2282
2282
 
@@ -5298,7 +5298,7 @@ var RTCPeerConnectionController = class extends Destroyable {
5298
5298
  const preferredAudioCodecs = this.options.preferredAudioCodecs ?? PreferencesContainer.instance.preferredAudioCodecs;
5299
5299
  const preferredVideoCodecs = this.options.preferredVideoCodecs ?? PreferencesContainer.instance.preferredVideoCodecs;
5300
5300
  const stereo = this.options.stereo ?? PreferencesContainer.instance.stereoAudio;
5301
- if (preferredAudioCodecs && preferredAudioCodecs.length > 0 || preferredVideoCodecs && preferredVideoCodecs.length > 0) {
5301
+ if (preferredAudioCodecs.length > 0 || preferredVideoCodecs.length > 0) {
5302
5302
  result = setCodecPreferences(result, preferredAudioCodecs, preferredVideoCodecs);
5303
5303
  logger$14.debug("[RTCPeerConnectionController] Applied codec preferences to SDP", {
5304
5304
  preferredAudioCodecs,
@@ -5540,11 +5540,9 @@ var RTCPeerConnectionController = class extends Destroyable {
5540
5540
  oldTrack.stop();
5541
5541
  this.localStreamController.removeTrack(trackId);
5542
5542
  const newTrack = (await this.getUserMedia({ audio: mergedConstraints })).getAudioTracks()[0];
5543
- if (newTrack) {
5544
- await sender.replaceTrack(newTrack);
5545
- this.localStreamController.addTrack(newTrack);
5546
- logger$14.debug(`[RTCPeerConnectionController] Audio track replaced for server-pushed params. New track: ${newTrack.id}`);
5547
- }
5543
+ await sender.replaceTrack(newTrack);
5544
+ this.localStreamController.addTrack(newTrack);
5545
+ logger$14.debug(`[RTCPeerConnectionController] Audio track replaced for server-pushed params. New track: ${newTrack.id}`);
5548
5546
  }
5549
5547
  }
5550
5548
  /**
@@ -5838,7 +5836,7 @@ var WebRTCVertoManager = class extends VertoManager {
5838
5836
  logger$13.warn("[WebRTCManager] No peer connection for keyframe request");
5839
5837
  return;
5840
5838
  }
5841
- const videoReceiver = pc.getReceivers().find((r) => r.track?.kind === "video");
5839
+ const videoReceiver = pc.getReceivers().find((r) => r.track.kind === "video");
5842
5840
  if (!videoReceiver) {
5843
5841
  logger$13.warn("[WebRTCManager] No video receiver for keyframe request");
5844
5842
  return;
@@ -5914,7 +5912,7 @@ var WebRTCVertoManager = class extends VertoManager {
5914
5912
  try {
5915
5913
  const pc = controller.peerConnection;
5916
5914
  if (!pc) continue;
5917
- const videoReceiver = pc.getReceivers().find((r) => r.track?.kind === "video");
5915
+ const videoReceiver = pc.getReceivers().find((r) => r.track.kind === "video");
5918
5916
  if (!videoReceiver) continue;
5919
5917
  if (typeof videoReceiver.requestKeyFrame === "function") {
5920
5918
  videoReceiver.requestKeyFrame();
@@ -7578,10 +7576,10 @@ var WebRTCCall = class extends Destroyable {
7578
7576
  logger$10.debug("[Call] Recovery manager failed to enable video");
7579
7577
  });
7580
7578
  },
7581
- isNegotiating: () => this.vertoManager.mainPeerConnection?.isNegotiating ?? false,
7579
+ isNegotiating: () => this.vertoManager.mainPeerConnection.isNegotiating,
7582
7580
  isWebSocketConnected: () => this._lastMergedStatus !== "disconnected",
7583
7581
  isCallConnected: () => this._lastMergedStatus === "connected",
7584
- getPeerConnectionState: () => pc.connectionState ?? null
7582
+ getPeerConnectionState: () => pc.connectionState
7585
7583
  }, {
7586
7584
  debounceTimeMs: prefs.recoveryDebounceTime,
7587
7585
  cooldownMs: prefs.recoveryCooldown,
@@ -8792,7 +8790,7 @@ var ClientSessionManager = class extends Destroyable {
8792
8790
  */
8793
8791
  async handleVertoAttach(attach) {
8794
8792
  const { callID } = attach;
8795
- if (this._calls$.value[callID]) {
8793
+ if (callID in this._calls$.value) {
8796
8794
  logger$7.debug(`[Session] Verto attach for existing call ${callID}, deferring to per-call handler`);
8797
8795
  return;
8798
8796
  }
@@ -9490,12 +9488,12 @@ var TransportManager = class extends Destroyable {
9490
9488
  this.discardStaleEvents = () => {
9491
9489
  return (0, rxjs.filter)((message) => {
9492
9490
  if (!isSignalwireRequest(message)) return true;
9493
- const eventChannel = message.params?.event_channel;
9491
+ const eventChannel = message.params.event_channel;
9494
9492
  if (!eventChannel) return true;
9495
9493
  const currentProtocol = this._currentProtocol;
9496
9494
  if (!currentProtocol) return true;
9497
9495
  if (!eventChannel.includes(currentProtocol)) {
9498
- const eventType = message.params.event_type ?? "unknown";
9496
+ const eventType = message.params.event_type;
9499
9497
  logger$2.warn(`[Transport] Discarding stale event: ${eventType} (event_channel does not match current protocol)`);
9500
9498
  return false;
9501
9499
  }
@@ -9745,7 +9743,7 @@ var SignalWire = class extends Destroyable {
9745
9743
  const cached = await this._deps.storage.getItem("sw:cached_credential", scope);
9746
9744
  if (cached?.token) {
9747
9745
  logger$1.debug(`[SignalWire] Using cached credential from ${scope}Storage`);
9748
- return this.validateCredentials(void 0, cached);
9746
+ return await this.validateCredentials(void 0, cached);
9749
9747
  }
9750
9748
  } catch {}
9751
9749
  throw new require_operators.InvalidCredentialsError("No credential provider and no cached session. Provide a CredentialProvider or enable persistSession with a prior login.");
@@ -9771,7 +9769,7 @@ var SignalWire = class extends Destroyable {
9771
9769
  }
9772
9770
  if (_credentials.expiry_at && credentialProvider?.refresh) {
9773
9771
  const refreshFn = async () => {
9774
- if (!credentialProvider?.refresh) throw new require_operators.InvalidCredentialsError("Credential provider does not support refresh");
9772
+ if (!credentialProvider.refresh) throw new require_operators.InvalidCredentialsError("Credential provider does not support refresh");
9775
9773
  return credentialProvider.refresh();
9776
9774
  };
9777
9775
  const refreshInterval = Math.max(_credentials.expiry_at - Date.now() - 5e3, 1e3);
@@ -10179,7 +10177,7 @@ var SignalWire = class extends Destroyable {
10179
10177
  * ```
10180
10178
  */
10181
10179
  async preflight(destination, options) {
10182
- const iceServers = this._clientSession?.iceServers ?? PreferencesContainer.instance.iceServers ?? [];
10180
+ const iceServers = this._clientSession.iceServers ?? PreferencesContainer.instance.iceServers ?? [];
10183
10181
  const isConnected = this._isConnected$.value;
10184
10182
  return new PreflightRunner(this._deviceController, iceServers, isConnected, 0, async (dest, opts) => this.dial(dest, opts), options).run(destination);
10185
10183
  }
@@ -10396,8 +10394,8 @@ var SignalWire = class extends Destroyable {
10396
10394
  this._deviceTokenManager?.destroy();
10397
10395
  this._dpopManager?.destroy();
10398
10396
  if (this._attachManager) this._attachManager.detachAll();
10399
- this._transport?.destroy();
10400
- this._clientSession?.destroy();
10397
+ this._transport.destroy();
10398
+ this._clientSession.destroy();
10401
10399
  try {
10402
10400
  this._networkMonitor?.destroy();
10403
10401
  } catch {}