@whereby.com/media 8.0.1 → 8.0.3

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
@@ -4217,6 +4217,10 @@ class VegaConnection extends EventEmitter.EventEmitter {
4217
4217
  }
4218
4218
  _handleResponse(socketMessage) {
4219
4219
  const sent = this.sents.get(socketMessage.id);
4220
+ if (!sent) {
4221
+ logger$3.warn(`Received unknown message with id ${socketMessage.id} from SFU.`);
4222
+ return;
4223
+ }
4220
4224
  if (socketMessage.ok) {
4221
4225
  sent.resolve(socketMessage.data);
4222
4226
  }
@@ -6747,11 +6751,11 @@ class BandwidthTester extends EventEmitter {
6747
6751
  const wsUrl = `wss://${host}`;
6748
6752
  this._vegaConnection = new VegaConnection(wsUrl, "whereby-sfu#bw-test-v1");
6749
6753
  this._vegaConnection.on("open", () => this._start());
6750
- this._vegaConnection.on("close", () => this.close());
6754
+ this._vegaConnection.on("close", () => this.close(true));
6751
6755
  this._vegaConnection.on("message", (message) => this._onMessage(message));
6752
6756
  this._startTimeout();
6753
6757
  }
6754
- close() {
6758
+ close(vegaConnectionClosed) {
6755
6759
  logger$1.info("close()");
6756
6760
  this.closed = true;
6757
6761
  if (!!this._timeout || Date.now() - this._startTime < 750) {
@@ -6759,6 +6763,12 @@ class BandwidthTester extends EventEmitter {
6759
6763
  error: true,
6760
6764
  });
6761
6765
  }
6766
+ else if (vegaConnectionClosed && this._resultTimeout) {
6767
+ this.emit("result", {
6768
+ error: true,
6769
+ });
6770
+ clearTimeout(this._resultTimeout);
6771
+ }
6762
6772
  this._clearTimeouts();
6763
6773
  clearInterval(this._drawInterval);
6764
6774
  this._drawInterval = null;
@@ -7101,9 +7111,7 @@ function buildDeviceList({ busyDeviceIds, devices, kind }) {
7101
7111
  label: `${busyDeviceIds.includes(d.deviceId) ? "(busy) " : ""}${d.label || d.deviceId.slice(0, 5)}`,
7102
7112
  busy: busyDeviceIds.includes(d.deviceId),
7103
7113
  }));
7104
- return deviceList && deviceList.length !== 0
7105
- ? deviceList
7106
- : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
7114
+ return deviceList && deviceList.length !== 0 ? deviceList : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
7107
7115
  }
7108
7116
  function getUserMedia(constraints) {
7109
7117
  if (!constraints.audio && !constraints.video) {
package/dist/index.d.cts CHANGED
@@ -506,8 +506,8 @@ type GetMediaConstraintsOptions = {
506
506
  };
507
507
  type GetConstraintsOptions = {
508
508
  devices: MediaDeviceInfo[];
509
- audioId?: boolean | string;
510
- videoId?: boolean | string;
509
+ audioId?: boolean | string | null;
510
+ videoId?: boolean | string | null;
511
511
  type?: "ideal" | "exact";
512
512
  options: Omit<GetMediaConstraintsOptions, "preferredDeviceIds">;
513
513
  };
@@ -515,6 +515,11 @@ type GetStreamOptions = {
515
515
  replaceStream?: MediaStream;
516
516
  fallback?: boolean;
517
517
  };
518
+ interface BuildDeviceListOptions {
519
+ devices: MediaDeviceInfo[];
520
+ busyDeviceIds: string[];
521
+ kind: MediaDeviceKind;
522
+ }
518
523
  type GetStreamResult = {
519
524
  error?: unknown;
520
525
  replacedTracks?: MediaStreamTrack[];
@@ -1136,7 +1141,7 @@ declare class BandwidthTester extends EventEmitter {
1136
1141
  features?: any;
1137
1142
  });
1138
1143
  start(runTime?: number): void;
1139
- close(): void;
1144
+ close(vegaConnectionClosed?: boolean): void;
1140
1145
  _start(): Promise<void>;
1141
1146
  _createTransport(send: any): Promise<void>;
1142
1147
  _getTestTrack(): any;
@@ -1163,22 +1168,33 @@ declare class NoDevicesError extends Error {
1163
1168
  constructor(...args: any);
1164
1169
  }
1165
1170
  declare function enumerate(): Promise<MediaDeviceInfo[]>;
1166
- declare function buildDeviceList({ busyDeviceIds, devices, kind }: any): any;
1171
+ declare function buildDeviceList({ busyDeviceIds, devices, kind }: BuildDeviceListOptions): {
1172
+ [x: string]: string | boolean;
1173
+ label: string;
1174
+ busy: boolean;
1175
+ }[] | {
1176
+ [x: string]: string;
1177
+ label: string;
1178
+ }[];
1167
1179
  declare function getUserMedia(constraints: any): Promise<MediaStream>;
1168
1180
  declare function getDeviceData({ audioTrack, videoTrack, devices, stoppedVideoTrack, lastAudioId, lastVideoId, }: {
1169
1181
  audioTrack?: MediaStreamTrack | null;
1170
1182
  videoTrack?: MediaStreamTrack | null;
1171
1183
  devices: MediaDeviceInfo[];
1172
- stoppedVideoTrack?: boolean;
1184
+ stoppedVideoTrack?: MediaStreamTrack;
1173
1185
  lastAudioId?: string | undefined;
1174
1186
  lastVideoId?: string | undefined;
1175
1187
  }): GetDeviceDataResult;
1176
1188
  declare function stopStreamTracks(stream: MediaStream, only?: "audio" | "video" | false): void;
1177
1189
  declare function replaceTracksInStream(stream: MediaStream, newStream: MediaStream, only: "audio" | "video" | false): MediaStreamTrack[];
1178
- declare function getStream(constraintOpt: any, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
1190
+ declare function getStream(constraintOpt: GetConstraintsOptions, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
1179
1191
  declare function hasGetDisplayMedia(): boolean;
1180
1192
  declare function getDisplayMedia(constraints?: DisplayMediaStreamOptions, contentHint?: string): Promise<MediaStream>;
1181
- declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): any;
1193
+ declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): Record<MediaDeviceKind, {
1194
+ removed: Record<string, MediaDeviceInfo>;
1195
+ added: Record<string, MediaDeviceInfo>;
1196
+ changed: Record<string, MediaDeviceInfo>;
1197
+ }>;
1182
1198
  declare function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVideoId, currentSpeakerId, }: {
1183
1199
  oldDevices: MediaDeviceInfo[];
1184
1200
  newDevices: MediaDeviceInfo[];
@@ -1936,4 +1952,4 @@ declare const STREAM_TYPES: {
1936
1952
  };
1937
1953
 
1938
1954
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1939
- export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
1955
+ export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
package/dist/index.d.mts CHANGED
@@ -506,8 +506,8 @@ type GetMediaConstraintsOptions = {
506
506
  };
507
507
  type GetConstraintsOptions = {
508
508
  devices: MediaDeviceInfo[];
509
- audioId?: boolean | string;
510
- videoId?: boolean | string;
509
+ audioId?: boolean | string | null;
510
+ videoId?: boolean | string | null;
511
511
  type?: "ideal" | "exact";
512
512
  options: Omit<GetMediaConstraintsOptions, "preferredDeviceIds">;
513
513
  };
@@ -515,6 +515,11 @@ type GetStreamOptions = {
515
515
  replaceStream?: MediaStream;
516
516
  fallback?: boolean;
517
517
  };
518
+ interface BuildDeviceListOptions {
519
+ devices: MediaDeviceInfo[];
520
+ busyDeviceIds: string[];
521
+ kind: MediaDeviceKind;
522
+ }
518
523
  type GetStreamResult = {
519
524
  error?: unknown;
520
525
  replacedTracks?: MediaStreamTrack[];
@@ -1136,7 +1141,7 @@ declare class BandwidthTester extends EventEmitter {
1136
1141
  features?: any;
1137
1142
  });
1138
1143
  start(runTime?: number): void;
1139
- close(): void;
1144
+ close(vegaConnectionClosed?: boolean): void;
1140
1145
  _start(): Promise<void>;
1141
1146
  _createTransport(send: any): Promise<void>;
1142
1147
  _getTestTrack(): any;
@@ -1163,22 +1168,33 @@ declare class NoDevicesError extends Error {
1163
1168
  constructor(...args: any);
1164
1169
  }
1165
1170
  declare function enumerate(): Promise<MediaDeviceInfo[]>;
1166
- declare function buildDeviceList({ busyDeviceIds, devices, kind }: any): any;
1171
+ declare function buildDeviceList({ busyDeviceIds, devices, kind }: BuildDeviceListOptions): {
1172
+ [x: string]: string | boolean;
1173
+ label: string;
1174
+ busy: boolean;
1175
+ }[] | {
1176
+ [x: string]: string;
1177
+ label: string;
1178
+ }[];
1167
1179
  declare function getUserMedia(constraints: any): Promise<MediaStream>;
1168
1180
  declare function getDeviceData({ audioTrack, videoTrack, devices, stoppedVideoTrack, lastAudioId, lastVideoId, }: {
1169
1181
  audioTrack?: MediaStreamTrack | null;
1170
1182
  videoTrack?: MediaStreamTrack | null;
1171
1183
  devices: MediaDeviceInfo[];
1172
- stoppedVideoTrack?: boolean;
1184
+ stoppedVideoTrack?: MediaStreamTrack;
1173
1185
  lastAudioId?: string | undefined;
1174
1186
  lastVideoId?: string | undefined;
1175
1187
  }): GetDeviceDataResult;
1176
1188
  declare function stopStreamTracks(stream: MediaStream, only?: "audio" | "video" | false): void;
1177
1189
  declare function replaceTracksInStream(stream: MediaStream, newStream: MediaStream, only: "audio" | "video" | false): MediaStreamTrack[];
1178
- declare function getStream(constraintOpt: any, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
1190
+ declare function getStream(constraintOpt: GetConstraintsOptions, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
1179
1191
  declare function hasGetDisplayMedia(): boolean;
1180
1192
  declare function getDisplayMedia(constraints?: DisplayMediaStreamOptions, contentHint?: string): Promise<MediaStream>;
1181
- declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): any;
1193
+ declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): Record<MediaDeviceKind, {
1194
+ removed: Record<string, MediaDeviceInfo>;
1195
+ added: Record<string, MediaDeviceInfo>;
1196
+ changed: Record<string, MediaDeviceInfo>;
1197
+ }>;
1182
1198
  declare function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVideoId, currentSpeakerId, }: {
1183
1199
  oldDevices: MediaDeviceInfo[];
1184
1200
  newDevices: MediaDeviceInfo[];
@@ -1936,4 +1952,4 @@ declare const STREAM_TYPES: {
1936
1952
  };
1937
1953
 
1938
1954
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1939
- export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
1955
+ export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
package/dist/index.d.ts CHANGED
@@ -506,8 +506,8 @@ type GetMediaConstraintsOptions = {
506
506
  };
507
507
  type GetConstraintsOptions = {
508
508
  devices: MediaDeviceInfo[];
509
- audioId?: boolean | string;
510
- videoId?: boolean | string;
509
+ audioId?: boolean | string | null;
510
+ videoId?: boolean | string | null;
511
511
  type?: "ideal" | "exact";
512
512
  options: Omit<GetMediaConstraintsOptions, "preferredDeviceIds">;
513
513
  };
@@ -515,6 +515,11 @@ type GetStreamOptions = {
515
515
  replaceStream?: MediaStream;
516
516
  fallback?: boolean;
517
517
  };
518
+ interface BuildDeviceListOptions {
519
+ devices: MediaDeviceInfo[];
520
+ busyDeviceIds: string[];
521
+ kind: MediaDeviceKind;
522
+ }
518
523
  type GetStreamResult = {
519
524
  error?: unknown;
520
525
  replacedTracks?: MediaStreamTrack[];
@@ -1136,7 +1141,7 @@ declare class BandwidthTester extends EventEmitter {
1136
1141
  features?: any;
1137
1142
  });
1138
1143
  start(runTime?: number): void;
1139
- close(): void;
1144
+ close(vegaConnectionClosed?: boolean): void;
1140
1145
  _start(): Promise<void>;
1141
1146
  _createTransport(send: any): Promise<void>;
1142
1147
  _getTestTrack(): any;
@@ -1163,22 +1168,33 @@ declare class NoDevicesError extends Error {
1163
1168
  constructor(...args: any);
1164
1169
  }
1165
1170
  declare function enumerate(): Promise<MediaDeviceInfo[]>;
1166
- declare function buildDeviceList({ busyDeviceIds, devices, kind }: any): any;
1171
+ declare function buildDeviceList({ busyDeviceIds, devices, kind }: BuildDeviceListOptions): {
1172
+ [x: string]: string | boolean;
1173
+ label: string;
1174
+ busy: boolean;
1175
+ }[] | {
1176
+ [x: string]: string;
1177
+ label: string;
1178
+ }[];
1167
1179
  declare function getUserMedia(constraints: any): Promise<MediaStream>;
1168
1180
  declare function getDeviceData({ audioTrack, videoTrack, devices, stoppedVideoTrack, lastAudioId, lastVideoId, }: {
1169
1181
  audioTrack?: MediaStreamTrack | null;
1170
1182
  videoTrack?: MediaStreamTrack | null;
1171
1183
  devices: MediaDeviceInfo[];
1172
- stoppedVideoTrack?: boolean;
1184
+ stoppedVideoTrack?: MediaStreamTrack;
1173
1185
  lastAudioId?: string | undefined;
1174
1186
  lastVideoId?: string | undefined;
1175
1187
  }): GetDeviceDataResult;
1176
1188
  declare function stopStreamTracks(stream: MediaStream, only?: "audio" | "video" | false): void;
1177
1189
  declare function replaceTracksInStream(stream: MediaStream, newStream: MediaStream, only: "audio" | "video" | false): MediaStreamTrack[];
1178
- declare function getStream(constraintOpt: any, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
1190
+ declare function getStream(constraintOpt: GetConstraintsOptions, { replaceStream, fallback }?: GetStreamOptions): Promise<GetStreamResult>;
1179
1191
  declare function hasGetDisplayMedia(): boolean;
1180
1192
  declare function getDisplayMedia(constraints?: DisplayMediaStreamOptions, contentHint?: string): Promise<MediaStream>;
1181
- declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): any;
1193
+ declare function compareLocalDevices(before: MediaDeviceInfo[], after: MediaDeviceInfo[]): Record<MediaDeviceKind, {
1194
+ removed: Record<string, MediaDeviceInfo>;
1195
+ added: Record<string, MediaDeviceInfo>;
1196
+ changed: Record<string, MediaDeviceInfo>;
1197
+ }>;
1182
1198
  declare function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVideoId, currentSpeakerId, }: {
1183
1199
  oldDevices: MediaDeviceInfo[];
1184
1200
  newDevices: MediaDeviceInfo[];
@@ -1936,4 +1952,4 @@ declare const STREAM_TYPES: {
1936
1952
  };
1937
1953
 
1938
1954
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1939
- export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
1955
+ export type { AddCameraStreamOptions, AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, BuildDeviceListOptions, CannotJoinUnclaimedRoomError, ChatMessage, ClearableTimeout, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveScreenshareStreamOptions, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomEmptyError, RoomFullError, RoomJoinPermissionDeniedError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceCandidateMessage, SignalIceEndOfCandidatesMessage, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRTCSessionDescription, SignalReadyToReceiveOfferMessage, SignalRequests, SignalRoom, SignalSDPMessage, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UniqueRoleAlreadyInRoomError, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent, WebRTCProvider };
package/dist/index.mjs CHANGED
@@ -4196,6 +4196,10 @@ class VegaConnection extends EventEmitter$1 {
4196
4196
  }
4197
4197
  _handleResponse(socketMessage) {
4198
4198
  const sent = this.sents.get(socketMessage.id);
4199
+ if (!sent) {
4200
+ logger$3.warn(`Received unknown message with id ${socketMessage.id} from SFU.`);
4201
+ return;
4202
+ }
4199
4203
  if (socketMessage.ok) {
4200
4204
  sent.resolve(socketMessage.data);
4201
4205
  }
@@ -6726,11 +6730,11 @@ class BandwidthTester extends EventEmitter {
6726
6730
  const wsUrl = `wss://${host}`;
6727
6731
  this._vegaConnection = new VegaConnection(wsUrl, "whereby-sfu#bw-test-v1");
6728
6732
  this._vegaConnection.on("open", () => this._start());
6729
- this._vegaConnection.on("close", () => this.close());
6733
+ this._vegaConnection.on("close", () => this.close(true));
6730
6734
  this._vegaConnection.on("message", (message) => this._onMessage(message));
6731
6735
  this._startTimeout();
6732
6736
  }
6733
- close() {
6737
+ close(vegaConnectionClosed) {
6734
6738
  logger$1.info("close()");
6735
6739
  this.closed = true;
6736
6740
  if (!!this._timeout || Date.now() - this._startTime < 750) {
@@ -6738,6 +6742,12 @@ class BandwidthTester extends EventEmitter {
6738
6742
  error: true,
6739
6743
  });
6740
6744
  }
6745
+ else if (vegaConnectionClosed && this._resultTimeout) {
6746
+ this.emit("result", {
6747
+ error: true,
6748
+ });
6749
+ clearTimeout(this._resultTimeout);
6750
+ }
6741
6751
  this._clearTimeouts();
6742
6752
  clearInterval(this._drawInterval);
6743
6753
  this._drawInterval = null;
@@ -7080,9 +7090,7 @@ function buildDeviceList({ busyDeviceIds, devices, kind }) {
7080
7090
  label: `${busyDeviceIds.includes(d.deviceId) ? "(busy) " : ""}${d.label || d.deviceId.slice(0, 5)}`,
7081
7091
  busy: busyDeviceIds.includes(d.deviceId),
7082
7092
  }));
7083
- return deviceList && deviceList.length !== 0
7084
- ? deviceList
7085
- : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
7093
+ return deviceList && deviceList.length !== 0 ? deviceList : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
7086
7094
  }
7087
7095
  function getUserMedia(constraints) {
7088
7096
  if (!constraints.audio && !constraints.video) {
@@ -4196,6 +4196,10 @@ class VegaConnection extends EventEmitter$1 {
4196
4196
  }
4197
4197
  _handleResponse(socketMessage) {
4198
4198
  const sent = this.sents.get(socketMessage.id);
4199
+ if (!sent) {
4200
+ logger$3.warn(`Received unknown message with id ${socketMessage.id} from SFU.`);
4201
+ return;
4202
+ }
4199
4203
  if (socketMessage.ok) {
4200
4204
  sent.resolve(socketMessage.data);
4201
4205
  }
@@ -6726,11 +6730,11 @@ class BandwidthTester extends EventEmitter {
6726
6730
  const wsUrl = `wss://${host}`;
6727
6731
  this._vegaConnection = new VegaConnection(wsUrl, "whereby-sfu#bw-test-v1");
6728
6732
  this._vegaConnection.on("open", () => this._start());
6729
- this._vegaConnection.on("close", () => this.close());
6733
+ this._vegaConnection.on("close", () => this.close(true));
6730
6734
  this._vegaConnection.on("message", (message) => this._onMessage(message));
6731
6735
  this._startTimeout();
6732
6736
  }
6733
- close() {
6737
+ close(vegaConnectionClosed) {
6734
6738
  logger$1.info("close()");
6735
6739
  this.closed = true;
6736
6740
  if (!!this._timeout || Date.now() - this._startTime < 750) {
@@ -6738,6 +6742,12 @@ class BandwidthTester extends EventEmitter {
6738
6742
  error: true,
6739
6743
  });
6740
6744
  }
6745
+ else if (vegaConnectionClosed && this._resultTimeout) {
6746
+ this.emit("result", {
6747
+ error: true,
6748
+ });
6749
+ clearTimeout(this._resultTimeout);
6750
+ }
6741
6751
  this._clearTimeouts();
6742
6752
  clearInterval(this._drawInterval);
6743
6753
  this._drawInterval = null;
@@ -7080,9 +7090,7 @@ function buildDeviceList({ busyDeviceIds, devices, kind }) {
7080
7090
  label: `${busyDeviceIds.includes(d.deviceId) ? "(busy) " : ""}${d.label || d.deviceId.slice(0, 5)}`,
7081
7091
  busy: busyDeviceIds.includes(d.deviceId),
7082
7092
  }));
7083
- return deviceList && deviceList.length !== 0
7084
- ? deviceList
7085
- : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
7093
+ return deviceList && deviceList.length !== 0 ? deviceList : [{ [idFieldsByKind[kind]]: "", label: "Default" }];
7086
7094
  }
7087
7095
  function getUserMedia(constraints) {
7088
7096
  if (!constraints.audio && !constraints.video) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@whereby.com/media",
3
3
  "description": "Media library for Whereby",
4
- "version": "8.0.1",
4
+ "version": "8.0.3",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {