@signalwire/js 3.7.0-dev.202201061621.3f851e2.0 → 3.7.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"BaseComponent.d.ts","sourceRoot":"","sources":["../../../../core/src/BaseComponent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseComponent.d.ts","sourceRoot":"","sources":["../../../../core/src/BaseComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAYzC,OAAO,EACL,aAAa,EAEb,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EAEZ,cAAc,EACd,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACtB,MAAM,SAAS,CAAA;AA4BhB,qBAAa,aAAa,CACxB,UAAU,SAAS,YAAY,CAAC,eAAe,EAC/C,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACzC,YAAW,eAAe,CAAC,UAAU,CAAC,EAAE,qBAAqB;IAmH1C,OAAO,EAAE,oBAAoB,CAAC,UAAU,CAAC;IAjH5D,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,gBAAgB;IAChB,IAAI,MAAM,WAET;IAED,gBAAgB;IAChB,SAAS,CAAC,aAAa,EAAE,YAAY,CAAK;IAC1C,OAAO,CAAC,oBAAoB,CAA+C;IAC3E,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,gBAAgB,CAAC,CAAQ;IACjC,OAAO,CAAC,sBAAsB,CAG3B;IACH,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,UAAU,CAAC,CAAY;IAE/B,SAAS,KAAK,MAAM,mDAEnB;IAED;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,iBAAiB;IAIzB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAGb;IAEb;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAY3B;IACH;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAiD;IAEvE;;OAEG;IACH,OAAO,CAAC,eAAe,CAAa;gBAEjB,OAAO,EAAE,oBAAoB,CAAC,UAAU,CAAC;IAE5D,gBAAgB;IAChB,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,IAAI,EAE1B;IAED,gBAAgB;IAChB,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;MAER;IAED,gBAAgB;IAChB,IAAI,OAAO,kCAEV;IAED,gBAAgB;IAChB,OAAO,CAAC,uBAAuB;IAW/B,gBAAgB;IAChB,OAAO,CAAC,oBAAoB;IAQ5B;;;;;;QAMI;IACJ,OAAO,CAAC,gBAAgB;IAIxB,gBAAgB;IAChB,OAAO,CAAC,gCAAgC;IAoBxC,gBAAgB;IAChB,OAAO,CAAC,iCAAiC;IAsBzC;;;;;OAKG;IACH,OAAO,CAAC,yCAAyC;IAkBjD,OAAO,CAAC,8BAA8B;IAmBtC;;;;;QAKI;IACJ,OAAO,CAAC,yBAAyB;IAwCjC,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,6BAA6B;IAoBrC;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IAwBpB,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAC9C,KAAK,EAAE,CAAC,EACR,EAAE,EAAE,YAAY,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;IAK/C,IAAI,CAAC,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAChD,KAAK,EAAE,CAAC,EACR,EAAE,EAAE,YAAY,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;IAK/C,GAAG,CAAC,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAC/C,KAAK,EAAE,CAAC,EACR,EAAE,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;IA6BhD,kBAAkB,CAAC,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAoB3E,gBAAgB;IAChB,UAAU;IAIV,SAAS,CAAC,gBAAgB;IAI1B,gBAAgB;IAChB,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAY/D,gBAAgB;IAChB,aAAa,CAAC,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;IAIrE,OAAO;IAMP,gBAAgB;IAChB,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,UAAU,GAAG,OAAO,EAC/C,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,aAAa,EACjC,EACE,gBAA2B,EAC3B,eAA0B,GAC3B,GAAE,sBAAsB,CAAC,SAAS,EAAE,UAAU,CAG9C;IAsBH,gBAAgB;IAChB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAYhD,gBAAgB;IAChB,uBAAuB,CAAC,CAAC,EAAE,EACzB,UAAU,EACV,OAAO,EACP,IAAI,GACL,EAAE;QACD,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,CAAC,EAAE,CAAC,CAAA;QACX,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAA;KAC3B;IAQD,gBAAgB;IAChB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,CAAC;IAI5C,gBAAgB;IAChB,OAAO,CAAC,SAAS,EAAE,GAAG;IAatB,gBAAgB;IAChB,SAAS,CAAC,SAAS,EAAE,GAAG;IAaxB,gBAAgB;IAChB,gBAAgB,CAAC,KAAK,EAAE,MAAM,mBAAmB,CAAC,eAAe,CAAC;IAKlE,gBAAgB;IAChB,OAAO,CAAC,wBAAwB;IAQhC,gBAAgB;IAChB,OAAO,CAAC,oBAAoB;IAQ5B,gBAAgB;IAChB,OAAO,CAAC,gBAAgB;IAKxB,gBAAgB;IAChB,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM;IAO7C;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,cAAc,CAAC;IAIxE,gBAAgB;IAChB,SAAS,KAAK,kBAAkB,IAAI,iBAAiB,CAEpD;IAED,gBAAgB;IAChB,SAAS,CAAC,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CtD,OAAO,CAAC,oBAAoB;IA+B5B;;;;;OAKG;IACH,SAAS,CAAC,sBAAsB,CAC9B,EAAE,KAAa,EAAE,GAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAqB;IA6B1D;;;OAGG;IACH,SAAS,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC;IAI1D,SAAS,CAAC,aAAa;IAQvB,OAAO,CAAC,aAAa;CAMtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"eventTransformUtils.d.ts","sourceRoot":"","sources":["../../../../../core/src/utils/eventTransformUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjE,UAAU,0BAA0B;IAClC,SAAS,EAAE,cAAc,CAAA;IACzB,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,UAAU,oBAAoB;IAC5B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAA;IACxC,8EAA8E;IAC9E,kBAAkB,EAAE,kBAAkB,CAAA;CACvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,6BAAoC,CAAA;AACzE,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,EAW1D,CAAA;AAgBD,eAAO,MAAM,oBAAoB,4BAG9B,0BAA0B,QA0B5B,CAAA"}
1
+ {"version":3,"file":"eventTransformUtils.d.ts","sourceRoot":"","sources":["../../../../../core/src/utils/eventTransformUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAGjE,UAAU,0BAA0B;IAClC,SAAS,EAAE,cAAc,CAAA;IACzB,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,UAAU,oBAAoB;IAC5B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAA;IACxC,8EAA8E;IAC9E,kBAAkB,EAAE,kBAAkB,CAAA;CACvC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,6BAAoC,CAAA;AACzE,eAAO,MAAM,wBAAwB,EAAE,oBAAoB,EAW1D,CAAA;AAgBD,eAAO,MAAM,oBAAoB,4BAG9B,0BAA0B,QAgB5B,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { EventTransform } from '..';
2
+ interface ProxyFactoryOptions {
3
+ instance: any;
4
+ transform: EventTransform;
5
+ payload: unknown;
6
+ transformedPayload: any;
7
+ }
8
+ export declare const proxyFactory: ({ instance, transform, payload, transformedPayload, }: ProxyFactoryOptions) => any;
9
+ export {};
10
+ //# sourceMappingURL=proxyUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxyUtils.d.ts","sourceRoot":"","sources":["../../../../../core/src/utils/proxyUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAA;AAkBnC,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,GAAG,CAAA;IACb,SAAS,EAAE,cAAc,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,GAAG,CAAA;CACxB;AAED,eAAO,MAAM,YAAY,0DAKtB,mBAAmB,QAwBrB,CAAA"}
package/dist/index.esm.js CHANGED
@@ -848,7 +848,7 @@ var JWTSession = class extends BaseJWTSession {
848
848
  constructor() {
849
849
  super(...arguments);
850
850
  __publicField(this, "WebSocketConstructor", WebSocket);
851
- __publicField(this, "agent", "@signalwire/js/3.7.0-dev.202201061621.3f851e2.0");
851
+ __publicField(this, "agent", "@signalwire/js/3.7.0");
852
852
  }
853
853
  };
854
854
 
@@ -1106,13 +1106,15 @@ import {
1106
1106
  stopTrack
1107
1107
  } from "@signalwire/webrtc";
1108
1108
 
1109
- // src/chat/Chat.ts
1110
- var Chat_exports = {};
1111
- __export(Chat_exports, {
1112
- Chat: () => Chat
1109
+ // src/chat/index.ts
1110
+ var chat_exports = {};
1111
+ __export(chat_exports, {
1112
+ Client: () => Client2
1113
1113
  });
1114
+
1115
+ // src/chat/Client.ts
1114
1116
  import { getLogger as getLogger5 } from "@signalwire/core";
1115
- var Chat = function(chatOptions) {
1117
+ var Client2 = function(chatOptions) {
1116
1118
  if (process.env.NODE_ENV === "production") {
1117
1119
  getLogger5().warn("`Chat` is still under development and may change in the future without prior notice.");
1118
1120
  }
@@ -1139,6 +1141,6 @@ var Chat = function(chatOptions) {
1139
1141
  export {
1140
1142
  video_exports as Video,
1141
1143
  webrtc_exports as WebRTC,
1142
- Chat_exports as __sw__PubSub
1144
+ chat_exports as __sw__Chat
1143
1145
  };
1144
1146
  //# sourceMappingURL=index.esm.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/video.ts", "../src/createRoomObject.ts", "../src/createClient.ts", "../src/Client.ts", "../src/features/mediaElements/mediaElementsSagas.ts", "../src/utils/videoElement.ts", "../src/utils/audioElement.ts", "../src/features/actions.ts", "../src/BaseRoomSession.ts", "../src/utils/constants.ts", "../src/RoomSessionScreenShare.ts", "../src/RoomSessionDevice.ts", "../src/cantina/Cantina.ts", "../src/JWTSession.ts", "../src/joinRoom.ts", "../src/RoomSession.ts", "../src/webrtc.ts", "../src/chat/Chat.ts"],
4
- "sourcesContent": ["import { createRoomObject, Room } from './createRoomObject'\nimport { createClient } from './createClient'\nimport { joinRoom } from './joinRoom'\nimport { MakeRoomOptions } from './Client'\nimport { RoomSession } from './RoomSession'\nimport { RoomSessionDevice, RoomDevice } from './RoomSessionDevice'\nimport {\n RoomSessionScreenShare,\n RoomScreenShare,\n} from './RoomSessionScreenShare'\n\nexport {\n RoomSession,\n RoomSessionDevice,\n RoomSessionScreenShare,\n // Just to keep backwards compatibility.\n createRoomObject,\n joinRoom,\n Room,\n RoomDevice,\n RoomScreenShare,\n createClient,\n}\n\n/** @ignore */\nexport type { MakeRoomOptions }\n\n/** @ignore */\nexport type {\n MemberCommandParams,\n MemberCommandWithVolumeParams,\n MemberCommandWithValueParams,\n DeprecatedMemberUpdatableProps,\n DeprecatedVideoMemberHandlerParams,\n VideoMemberHandlerParams,\n} from './utils/interfaces'\n\nexport type { CreateRoomObjectOptions } from './createRoomObject'\n\nexport type {\n RoomSessionRecording,\n RoomSessionPlayback,\n} from '@signalwire/core'\n\nexport type { RoomSessionEvents } from './RoomSession.docs'\n", "import { UserOptions, getLogger, AssertSameType } from '@signalwire/core'\nimport { createClient } from './createClient'\nimport { MakeRoomOptions } from './Client'\nimport { BaseRoomSession } from './BaseRoomSession'\n\n/**\n * @internal\n * @deprecated Use {@link RoomSession} instead.\n **/\nexport interface Room extends BaseRoomSession<Room> {}\n\ninterface CreateRoomObjectOptionsMain\n extends UserOptions,\n Omit<MakeRoomOptions, 'rootElement'> {\n /** Id of the HTML element in which to display the video stream */\n rootElementId?: string\n /** Whether to automatically join the room session. */\n autoJoin?: boolean\n}\n\n/**\n * @deprecated Usage of this object is deprecated. See {@link RoomSession}\n * instead.\n */\nexport interface CreateRoomObjectOptions\n extends AssertSameType<\n CreateRoomObjectOptionsMain,\n {\n /** SignalWire project id, e.g. `a10d8a9f-2166-4e82-56ff-118bc3a4840f` */\n project?: string\n /** SignalWire project token, e.g. `PT9e5660c101cd140a1c93a0197640a369cf5f16975a0079c9` */\n token: string\n /** logging level */\n logLevel?: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent'\n /** Id of the HTML element in which to display the video stream */\n rootElementId?: string\n /** Whether to apply the local-overlay on top of your video. Default: `true`. */\n applyLocalVideoOverlay?: boolean\n /** Whether to stop the camera when the member is muted. Default: `true`. */\n stopCameraWhileMuted?: boolean\n /** Whether to stop the microphone when the member is muted. Default: `true`. */\n stopMicrophoneWhileMuted?: boolean\n /** List of ICE servers. */\n iceServers?: RTCIceServer[]\n /** Audio constraints to use when joining the room. Default: `true`. */\n audio?: MediaStreamConstraints['audio']\n /** Video constraints to use when joining the room. Default: `true`. */\n video?: MediaStreamConstraints['video']\n /** Id of the speaker device to use for audio output. If undefined, picks a default speaker. */\n speakerId?: string\n /** Whether to automatically join the room session. */\n autoJoin?: boolean\n }\n > {}\n\nconst VIDEO_CONSTRAINTS: MediaTrackConstraints = {\n aspectRatio: { ideal: 16 / 9 },\n}\n\n/**\n * Using Video.createRoomObject() you can create a `RoomObject` to join a room.\n *\n * @example\n * With an HTMLDivElement with id=\"root\" in the DOM.\n * ```js\n * // <div id=\"root\"></div>\n *\n * try {\n * const roomObj = await Video.createRoomObject({\n * token: '<YourJWT>',\n * rootElementId: 'root',\n * })\n *\n * roomObj.join()\n * } catch (error) {\n * console.error('Error', error)\n * }\n * ```\n * @deprecated Use {@link RoomSession} instead.\n */\nexport const createRoomObject = (\n roomOptions: CreateRoomObjectOptions\n): Promise<Room> => {\n return new Promise(async (resolve, reject) => {\n const {\n audio = true,\n video = true,\n iceServers,\n rootElementId,\n applyLocalVideoOverlay = true,\n autoJoin = false,\n stopCameraWhileMuted = true,\n stopMicrophoneWhileMuted = true,\n speakerId,\n ...userOptions\n } = roomOptions\n\n const client = createClient<Room>({\n ...userOptions,\n })\n await client.connect()\n\n if (!client) {\n return\n }\n\n /**\n * Since `makeRoomObject` now only accepts a\n * `rootElement` the following is to preserve backwards\n * compatibility with the previous syntax\n */\n let rootElement: HTMLElement | undefined\n if (rootElementId) {\n const el = document.getElementById(rootElementId)\n\n if (el) {\n rootElement = el\n } else {\n rootElement = document.body\n\n getLogger().warn(\n `We couldn't find an element with id: ${rootElementId}: using 'document.body' instead.`\n )\n }\n }\n\n const room = client.rooms.makeRoomObject({\n audio,\n video: video === true ? VIDEO_CONSTRAINTS : video,\n negotiateAudio: true,\n negotiateVideo: true,\n iceServers,\n rootElement,\n applyLocalVideoOverlay,\n stopCameraWhileMuted,\n stopMicrophoneWhileMuted,\n speakerId,\n })\n\n // WebRTC connection left the room.\n room.once('destroy', () => {\n client.disconnect()\n })\n\n if (autoJoin) {\n try {\n await room.join()\n resolve(room)\n } catch (error) {\n reject(error)\n }\n } else {\n resolve(room)\n }\n })\n}\n", "import {\n ClientEvents,\n configureStore,\n connect,\n getEventEmitter,\n UserOptions,\n} from '@signalwire/core'\nimport { ClientAPI, Client } from './Client'\nimport { JWTSession } from './JWTSession'\n\n/**\n * With Video.createClient() you can establish a WebSocket connection\n * with SignalWire and interact with the client.\n *\n * ## Examples\n * Create a client\n *\n * @example\n * ```js\n * try {\n * const client = Video.createClient({\n * token: '<YourJWT>',\n * })\n *\n * await client.connect()\n * // Your client is ready now..\n * } catch (error) {\n * console.error('Error', error)\n * }\n * ```\n * @internal\n */\nexport const createClient = <RoomSessionType>(userOptions: UserOptions) => {\n const baseUserOptions = {\n ...userOptions,\n emitter: getEventEmitter<ClientEvents>(),\n }\n const store = configureStore({\n userOptions: baseUserOptions,\n SessionConstructor: JWTSession,\n })\n const client = connect<\n ClientEvents,\n ClientAPI<RoomSessionType>,\n Client<RoomSessionType>\n >({\n store,\n Component: ClientAPI,\n componentListeners: {\n errors: 'onError',\n responses: 'onSuccess',\n },\n })(baseUserOptions)\n\n return client\n}\n", "import {\n BaseClient,\n ClientEvents,\n ClientContract,\n actions,\n Chat as ChatNamespace,\n} from '@signalwire/core'\nimport type { CustomSaga } from '@signalwire/core'\nimport { ConnectionOptions } from '@signalwire/webrtc'\nimport {\n makeVideoElementSaga,\n makeAudioElementSaga,\n} from './features/mediaElements/mediaElementsSagas'\nimport { RoomSession } from './RoomSession'\nimport {\n createBaseRoomSessionObject,\n RoomSessionConnection,\n} from './BaseRoomSession'\nimport { Cantina, createCantinaObject } from './cantina'\nimport type { Chat } from './chat/Chat'\n\nexport interface Client<RoomSessionType = RoomSession>\n extends ClientContract<Client<RoomSessionType>, ClientEvents> {\n rooms: ClientAPI<RoomSessionType>['rooms']\n chat: ClientAPI<RoomSessionType>['chat']\n}\n\nexport interface MakeRoomOptions extends ConnectionOptions {\n rootElement?: HTMLElement\n applyLocalVideoOverlay?: boolean\n stopCameraWhileMuted?: boolean\n stopMicrophoneWhileMuted?: boolean\n}\n\nexport class ClientAPI<\n RoomSessionType = RoomSession\n> extends BaseClient<ClientEvents> {\n private _cantina: Cantina\n private _chat: Chat\n\n get rooms() {\n return {\n makeRoomObject: (makeRoomOptions: MakeRoomOptions) => {\n const {\n rootElement,\n applyLocalVideoOverlay = true,\n stopCameraWhileMuted = true,\n stopMicrophoneWhileMuted = true,\n ...options\n } = makeRoomOptions\n\n const customSagas: Array<CustomSaga<RoomSessionConnection>> = []\n\n /**\n * By default the SDK will attach the audio to\n * an Audio element (regardless of \"rootElement\")\n */\n customSagas.push(\n makeAudioElementSaga({\n speakerId: options.speakerId,\n })\n )\n\n /**\n * If the user provides a `roomElement` we'll\n * automatically handle the Video element for them\n */\n if (rootElement) {\n customSagas.push(\n makeVideoElementSaga({\n rootElement,\n applyLocalVideoOverlay,\n })\n )\n }\n\n const room = createBaseRoomSessionObject<RoomSessionType>({\n ...options,\n store: this.store,\n // @ts-expect-error\n emitter: this.emitter,\n customSagas,\n })\n\n /**\n * Stop and Restore outbound audio on audio_muted event\n */\n if (stopMicrophoneWhileMuted) {\n room.on('member.updated.audio_muted', ({ member }) => {\n try {\n if (member.id === room.memberId && 'audio_muted' in member) {\n member.audio_muted\n ? room.stopOutboundAudio()\n : room.restoreOutboundAudio()\n }\n } catch (error) {\n this.logger.error('Error handling audio_muted', error)\n }\n })\n }\n\n /**\n * Stop and Restore outbound video on video_muted event\n */\n if (stopCameraWhileMuted) {\n room.on('member.updated.video_muted', ({ member }) => {\n try {\n if (member.id === room.memberId && 'video_muted' in member) {\n member.video_muted\n ? room.stopOutboundVideo()\n : room.restoreOutboundVideo()\n }\n } catch (error) {\n this.logger.error('Error handling video_muted', error)\n }\n })\n }\n\n return room\n },\n }\n }\n\n get chat() {\n if (!this._chat) {\n this._chat = ChatNamespace.createBaseChatObject<Chat>({\n store: this.store,\n // Emitter is now typed but we share it across objects\n // so types won't match\n // @ts-expect-error\n emitter: this.options.emitter,\n })\n }\n return this._chat\n }\n\n get cantina() {\n if (!this._cantina) {\n // @ts-expect-error\n this._cantina = createCantinaObject(this.options)\n }\n return this._cantina\n }\n\n /**\n * Reauthenticate with the SignalWire network using a new token\n * For now it returns void since with an invalid token the server\n * will close the connection right away so we can hook on the session\n * events in case. Need to improve it.\n *\n * @internal\n */\n reauthenticate(token: string) {\n this.store.dispatch(actions.reauthAction({ token }))\n }\n}\n", "import {\n getLogger,\n CustomSagaParams,\n actions,\n sagaEffects,\n} from '@signalwire/core'\nimport type { SagaIterator, Task } from '@signalwire/core'\nimport { setMediaElementSinkId } from '@signalwire/webrtc'\nimport {\n buildVideo,\n cleanupElement,\n makeDisplayChangeFn,\n makeLayoutChangedHandler,\n setVideoMediaTrack,\n} from '../../utils/videoElement'\nimport { setAudioMediaTrack } from '../../utils/audioElement'\nimport { audioSetSpeakerAction } from '../actions'\nimport type { RoomSessionConnection } from '../../BaseRoomSession'\n\nexport const makeVideoElementSaga = ({\n rootElement,\n applyLocalVideoOverlay,\n}: {\n rootElement: HTMLElement\n applyLocalVideoOverlay?: boolean\n}) => {\n return function* videoElementSaga({\n instance: room,\n runSaga,\n }: CustomSagaParams<RoomSessionConnection>): SagaIterator {\n try {\n const layerMap = new Map()\n const videoEl = buildVideo()\n const layoutChangedHandler = makeLayoutChangedHandler({\n rootElement,\n element: videoEl,\n layerMap,\n })\n const hideOverlay = makeDisplayChangeFn('none')\n const showOverlay = makeDisplayChangeFn('block')\n\n room.on('layout.changed', (params) => {\n if (room.peer.hasVideoSender && room.localStream) {\n layoutChangedHandler({\n // @ts-expect-error\n layout: params.layout,\n localStream: room.localStream,\n myMemberId: room.memberId,\n })\n }\n })\n\n room.on('member.updated.video_muted', (params) => {\n try {\n const { member } = params\n if (member.id === room.memberId && 'video_muted' in member) {\n member.video_muted ? hideOverlay(member.id) : showOverlay(member.id)\n }\n } catch (error) {\n getLogger().error('Error handling video_muted', error)\n }\n })\n\n let videoTask: Task | undefined\n\n const trackHandler = function (event: RTCTrackEvent) {\n switch (event.track.kind) {\n case 'video': {\n videoTask = runSaga(videoElementSetupWorker, {\n applyLocalVideoOverlay,\n rootElement,\n track: event.track,\n element: videoEl,\n })\n // Remove listener when done with video\n room.off('track', trackHandler)\n break\n }\n }\n }\n room.on('track', trackHandler)\n\n room.once('destroy', () => {\n cleanupElement(rootElement)\n layerMap.clear()\n videoTask?.cancel()\n })\n } catch (error) {\n getLogger().error('videoElementSaga', error)\n }\n }\n}\n\nexport const makeAudioElementSaga = ({ speakerId }: { speakerId?: string }) => {\n return function* audioElementSaga({\n instance: room,\n runSaga,\n }: CustomSagaParams<RoomSessionConnection>): SagaIterator {\n try {\n const audioEl = new Audio()\n let audioTask: Task | undefined\n\n const trackHandler = function (event: RTCTrackEvent) {\n switch (event.track.kind) {\n case 'audio': {\n audioTask = runSaga(audioElementSetupWorker, {\n track: event.track,\n element: audioEl,\n speakerId,\n room,\n })\n // Remove listener when done with audio\n room.off('track', trackHandler)\n break\n }\n }\n }\n room.on('track', trackHandler)\n\n room.once('destroy', () => {\n audioTask?.cancel()\n })\n } catch (error) {\n getLogger().error('audioElementSaga', error)\n }\n }\n}\n\nfunction* audioElementActionsWatcher({\n element,\n room,\n}: {\n element: HTMLAudioElement\n room: RoomSessionConnection\n}): SagaIterator {\n // TODO: For now we're handling individual actions but in the future\n // we might want to have a single action per custom saga and use it\n // in a similar fashion to `executeAction`\n const setSpeakerActionType = actions.getCustomSagaActionType(\n room.__uuid,\n audioSetSpeakerAction\n )\n\n while (true) {\n const action = yield sagaEffects.take([setSpeakerActionType])\n\n try {\n switch (action.type) {\n case setSpeakerActionType:\n const response = yield sagaEffects.call(\n setMediaElementSinkId,\n element,\n action.payload\n )\n room.settleCustomSagaTrigger({\n dispatchId: action.dispatchId,\n payload: response,\n kind: 'resolve',\n })\n break\n }\n } catch (error) {\n room.settleCustomSagaTrigger({\n dispatchId: action.dispatchId,\n payload: error,\n kind: 'reject',\n })\n getLogger().error(error)\n }\n }\n}\n\nfunction* audioElementSetupWorker({\n track,\n element,\n speakerId,\n room,\n}: {\n track: MediaStreamTrack\n element: HTMLAudioElement\n speakerId?: string\n room: RoomSessionConnection\n}): SagaIterator {\n setAudioMediaTrack({ track, element })\n if (speakerId) {\n // Catch no-op since setMediaElementSinkId already provides logs\n setMediaElementSinkId(element, speakerId).catch(() => {})\n }\n\n yield sagaEffects.fork(audioElementActionsWatcher, {\n element,\n room,\n })\n}\n\nfunction* videoElementSetupWorker({\n rootElement,\n applyLocalVideoOverlay = true,\n track,\n element,\n}: {\n // TODO: we'll move this to a separate type once we define how to\n // dispatch action that only target unique sagas\n rootElement: HTMLElement\n applyLocalVideoOverlay?: boolean\n track: MediaStreamTrack\n element: HTMLVideoElement\n}): SagaIterator {\n const handleVideoTrack = (track: MediaStreamTrack) => {\n setVideoMediaTrack({ element, track })\n\n element.style.width = '100%'\n\n if (!applyLocalVideoOverlay) {\n rootElement.appendChild(element)\n return\n }\n\n const mcuWrapper = document.createElement('div')\n mcuWrapper.style.position = 'absolute'\n mcuWrapper.style.top = '0'\n mcuWrapper.style.left = '0'\n mcuWrapper.style.right = '0'\n mcuWrapper.style.bottom = '0'\n mcuWrapper.appendChild(element)\n\n const paddingWrapper = document.createElement('div')\n paddingWrapper.style.paddingBottom = '56.25%'\n paddingWrapper.appendChild(mcuWrapper)\n\n const layersWrapper = document.createElement('div')\n layersWrapper.classList.add('mcuLayers')\n paddingWrapper.appendChild(layersWrapper)\n\n const relativeWrapper = document.createElement('div')\n relativeWrapper.style.position = 'relative'\n relativeWrapper.style.width = '100%'\n relativeWrapper.style.margin = '0 auto'\n relativeWrapper.appendChild(paddingWrapper)\n\n rootElement.style.display = 'flex'\n rootElement.style.alignItems = 'center'\n rootElement.style.justifyContent = 'center'\n rootElement.appendChild(relativeWrapper)\n }\n\n handleVideoTrack(track)\n\n // TODO: take destroy\n}\n", "import {\n getLogger,\n InternalVideoLayoutLayer,\n InternalVideoLayout,\n} from '@signalwire/core'\n\nconst _addSDKPrefix = (input: string) => {\n return `sw-sdk-${input}`\n}\n\nconst buildVideo = () => {\n const video = document.createElement('video')\n video.muted = true\n video.autoplay = true\n video.playsInline = true\n\n return video\n}\n\nconst _videoReady = ({ element }: { element: HTMLVideoElement }) => {\n return new Promise<void>((resolve) => {\n element.addEventListener('canplay', function listener() {\n element.removeEventListener('canplay', listener)\n resolve()\n })\n element.addEventListener('resize', function listener() {\n element.removeEventListener('resize', listener)\n resolve()\n })\n })\n}\n\nconst _getLocationStyles = ({\n x,\n y,\n width,\n height,\n}: InternalVideoLayoutLayer) => {\n return {\n top: `${y}%`,\n left: `${x}%`,\n width: `${width}%`,\n height: `${height}%`,\n }\n}\n\nconst _buildLayer = async ({\n location,\n element,\n}: {\n location: InternalVideoLayoutLayer\n element: HTMLVideoElement\n}) => {\n if (element.readyState === HTMLMediaElement.HAVE_NOTHING) {\n await _videoReady({ element })\n }\n const { top, left, width, height } = _getLocationStyles(location)\n const layer = document.createElement('div')\n layer.style.position = 'absolute'\n layer.style.overflow = 'hidden'\n layer.style.top = top\n layer.style.left = left\n layer.style.width = width\n layer.style.height = height\n\n return layer\n}\n\ninterface LayoutChangedHandlerParams {\n layout: InternalVideoLayout\n myMemberId: string\n localStream: MediaStream\n}\n\nconst makeLayoutChangedHandler =\n ({\n layerMap,\n element,\n rootElement,\n }: {\n layerMap: Map<string, HTMLElement>\n element: HTMLVideoElement\n rootElement: HTMLElement\n }) =>\n async ({ layout, myMemberId, localStream }: LayoutChangedHandlerParams) => {\n try {\n const { layers = [] } = layout\n const location = layers.find(({ member_id }) => member_id === myMemberId)\n\n const myLayerKey = _addSDKPrefix(myMemberId)\n let myLayer = layerMap.get(myLayerKey)\n if (!location) {\n if (myLayer) {\n getLogger().debug('Current layer not visible')\n myLayer.style.display = 'none'\n }\n\n return\n }\n\n if (!myLayer) {\n myLayer = await _buildLayer({ element, location })\n myLayer.id = myLayerKey\n\n const localVideo = buildVideo()\n localVideo.srcObject = localStream\n localVideo.style.width = '100%'\n localVideo.style.height = '100%'\n\n myLayer.appendChild(localVideo)\n\n const mcuLayers = rootElement.querySelector('.mcuLayers')\n const exists = document.getElementById(myLayerKey)\n if (mcuLayers && !exists) {\n mcuLayers.appendChild(myLayer)\n layerMap.set(myLayerKey, myLayer)\n }\n\n return\n }\n\n const { top, left, width, height } = _getLocationStyles(location)\n myLayer.style.display = 'block'\n myLayer.style.top = top\n myLayer.style.left = left\n myLayer.style.width = width\n myLayer.style.height = height\n } catch (error) {\n getLogger().error('Layout Changed Error', error)\n }\n }\n\nconst makeDisplayChangeFn = (display: 'block' | 'none') => {\n return (domId: string) => {\n const el = document.getElementById(_addSDKPrefix(domId))\n if (el) {\n el.style.display = display\n }\n }\n}\n\nconst cleanupElement = (rootElement: HTMLElement) => {\n while (rootElement.firstChild) {\n rootElement.removeChild(rootElement.firstChild)\n }\n}\n\nconst setVideoMediaTrack = ({\n track,\n element,\n}: {\n track: MediaStreamTrack\n element: HTMLVideoElement\n}) => {\n element.srcObject = new MediaStream([track])\n\n track.addEventListener('ended', () => {\n element.srcObject = null\n element.remove()\n })\n}\n\nexport {\n buildVideo,\n cleanupElement,\n makeLayoutChangedHandler,\n makeDisplayChangeFn,\n setVideoMediaTrack,\n}\n", "const setAudioMediaTrack = ({\n track,\n element,\n}: {\n track: MediaStreamTrack\n element: HTMLAudioElement\n}) => {\n element.autoplay = true\n // @ts-ignore\n element.playsinline = true\n element.srcObject = new MediaStream([track])\n\n track.addEventListener('ended', () => {\n element.srcObject = null\n element.remove()\n })\n\n return element\n}\n\nexport { setAudioMediaTrack }\n", "import { actions } from '@signalwire/core'\n\nexport const audioSetSpeakerAction = actions.createAction<string>(\n 'swJs/audioSetSpeakerAction'\n)\n", "import {\n connect,\n Rooms,\n EventTransform,\n extendComponent,\n BaseComponentContract,\n BaseComponentOptions,\n BaseConnectionContract,\n toLocalEvent,\n toExternalJSON,\n} from '@signalwire/core'\nimport {\n getDisplayMedia,\n BaseConnection,\n BaseConnectionOptions,\n BaseConnectionStateEventTypes,\n} from '@signalwire/webrtc'\nimport type {\n RoomSessionObjectEvents,\n CreateScreenShareObjectOptions,\n AddDeviceOptions,\n AddCameraOptions,\n AddMicrophoneOptions,\n BaseRoomInterface,\n RoomMethods,\n StartScreenShareOptions,\n RoomSessionConnectionContract,\n} from './utils/interfaces'\nimport {\n ROOM_COMPONENT_LISTENERS,\n SCREENSHARE_AUDIO_CONSTRAINTS,\n} from './utils/constants'\nimport { audioSetSpeakerAction } from './features/actions'\nimport {\n RoomSessionScreenShareAPI,\n RoomSessionScreenShareConnection,\n RoomSessionScreenShare,\n} from './RoomSessionScreenShare'\nimport {\n RoomSessionDeviceAPI,\n RoomSessionDeviceConnection,\n RoomSessionDevice,\n} from './RoomSessionDevice'\n\nexport interface BaseRoomSession<T>\n extends RoomMethods,\n RoomSessionConnectionContract,\n BaseComponentContract,\n BaseConnectionContract<RoomSessionObjectEvents> {\n join(): Promise<T>\n leave(): Promise<void>\n}\n\nexport class RoomSessionConnection\n extends BaseConnection<RoomSessionObjectEvents>\n implements BaseRoomInterface, RoomSessionConnectionContract\n{\n private _screenShareList = new Set<RoomSessionScreenShare>()\n private _deviceList = new Set<RoomSessionDevice>()\n\n get screenShareList() {\n return Array.from(this._screenShareList)\n }\n\n get deviceList() {\n return Array.from(this._deviceList)\n }\n\n /** @internal */\n protected getEmitterTransforms() {\n return new Map<string | string[], EventTransform>([\n [\n [\n toLocalEvent('video.recording.start'),\n 'video.recording.started',\n 'video.recording.updated',\n 'video.recording.ended',\n ],\n {\n type: 'roomSessionRecording',\n instanceFactory: (_payload: any) => {\n return Rooms.createRoomSessionRecordingObject({\n store: this.store,\n // @ts-expect-error\n emitter: this.emitter,\n })\n },\n payloadTransform: (payload: any) => {\n return toExternalJSON({\n ...payload.recording,\n room_session_id: this.roomSessionId,\n })\n },\n },\n ],\n [\n [\n toLocalEvent('video.playback.start'),\n 'video.playback.started',\n 'video.playback.updated',\n 'video.playback.ended',\n ],\n {\n type: 'roomSessionPlayback',\n instanceFactory: (_payload: any) => {\n return Rooms.createRoomSessionPlaybackObject({\n store: this.store,\n // @ts-expect-error\n emitter: this.emitter,\n })\n },\n payloadTransform: (payload: any) => {\n return toExternalJSON({\n ...payload.playback,\n room_session_id: this.roomSessionId,\n })\n },\n },\n ],\n ])\n }\n\n /** @deprecated Use {@link startScreenShare} instead. */\n async createScreenShareObject(opts: CreateScreenShareObjectOptions = {}) {\n return this.startScreenShare(opts)\n }\n\n /**\n * Allow sharing the screen within the room.\n */\n async startScreenShare(opts: StartScreenShareOptions = {}) {\n const { autoJoin = true, audio = false, video = true } = opts\n const displayStream: MediaStream = await getDisplayMedia({\n audio: audio === true ? SCREENSHARE_AUDIO_CONSTRAINTS : audio,\n video,\n })\n const options: BaseConnectionOptions<RoomSessionObjectEvents> = {\n ...this.options,\n screenShare: true,\n recoverCall: false,\n localStream: displayStream,\n remoteStream: undefined,\n userVariables: {\n ...(this.options?.userVariables || {}),\n memberCallId: this.__uuid,\n memberId: this.memberId,\n },\n }\n\n const screenShare = connect<\n BaseConnectionStateEventTypes,\n RoomSessionScreenShareConnection,\n RoomSessionScreenShare\n >({\n store: this.store,\n Component: RoomSessionScreenShareAPI,\n componentListeners: ROOM_COMPONENT_LISTENERS,\n })(options)\n\n /**\n * Hangup if the user stop the screenShare from the\n * native browser button or if the videoTrack ends.\n */\n displayStream.getVideoTracks().forEach((t) => {\n t.addEventListener('ended', () => {\n if (screenShare && screenShare.active) {\n screenShare.leave()\n }\n })\n })\n\n screenShare.on('destroy', () => {\n this._screenShareList.delete(screenShare)\n })\n\n try {\n this._screenShareList.add(screenShare)\n if (autoJoin) {\n await screenShare.join()\n }\n return screenShare\n } catch (error) {\n this.logger.error('ScreenShare Error', error)\n throw error\n }\n }\n\n /**\n * Allow to add a camera to the room.\n */\n addCamera(opts: AddCameraOptions = {}) {\n const { autoJoin = true, ...video } = opts\n return this.addDevice({\n autoJoin,\n video,\n })\n }\n\n /**\n * Allow to add a microphone to the room.\n */\n addMicrophone(opts: AddMicrophoneOptions = {}) {\n const { autoJoin = true, ...audio } = opts\n return this.addDevice({\n autoJoin,\n audio,\n })\n }\n\n /**\n * Allow to add additional devices to the room like cameras or microphones.\n */\n async addDevice(opts: AddDeviceOptions = {}) {\n const { autoJoin = true, audio = false, video = false } = opts\n if (!audio && !video) {\n throw new TypeError(\n 'At least one of `audio` or `video` must be requested.'\n )\n }\n\n const options: BaseConnectionOptions<RoomSessionObjectEvents> = {\n ...this.options,\n localStream: undefined,\n remoteStream: undefined,\n audio,\n video,\n additionalDevice: true,\n recoverCall: false,\n userVariables: {\n ...(this.options?.userVariables || {}),\n memberCallId: this.__uuid,\n memberId: this.memberId,\n },\n }\n\n const roomDevice = connect<\n BaseConnectionStateEventTypes,\n RoomSessionDeviceConnection,\n RoomSessionDevice\n >({\n store: this.store,\n Component: RoomSessionDeviceAPI,\n componentListeners: ROOM_COMPONENT_LISTENERS,\n })(options)\n\n roomDevice.on('destroy', () => {\n this._deviceList.delete(roomDevice)\n })\n\n try {\n this._deviceList.add(roomDevice)\n if (autoJoin) {\n await roomDevice.join()\n }\n return roomDevice\n } catch (error) {\n this.logger.error('RoomDevice Error', error)\n throw error\n }\n }\n\n join() {\n return super.invite<BaseRoomSession<this>>()\n }\n\n leave() {\n return this.hangup()\n }\n\n updateSpeaker({ deviceId }: { deviceId: string }) {\n return this.triggerCustomSaga<undefined>(audioSetSpeakerAction(deviceId))\n }\n\n /** @internal */\n async hangup() {\n this._screenShareList.forEach((screenShare) => {\n screenShare.leave()\n })\n this._deviceList.forEach((device) => {\n device.leave()\n })\n\n return super.hangup()\n }\n\n /** @internal */\n protected _finalize() {\n this._screenShareList.clear()\n this._deviceList.clear()\n\n super._finalize()\n }\n\n /**\n * @deprecated Use {@link getLayouts} instead. `getLayoutList` will\n * be removed in v3.0.0\n */\n getLayoutList() {\n // @ts-expect-error\n return this.getLayouts()\n }\n\n /**\n * @deprecated Use {@link getMembers} instead. `getMemberList` will\n * be removed in v3.0.0\n */\n getMemberList() {\n // @ts-expect-error\n return this.getMembers()\n }\n}\n\nexport const RoomSessionAPI = extendComponent<\n RoomSessionConnection,\n RoomMethods\n>(RoomSessionConnection, {\n audioMute: Rooms.audioMuteMember,\n audioUnmute: Rooms.audioUnmuteMember,\n videoMute: Rooms.videoMuteMember,\n videoUnmute: Rooms.videoUnmuteMember,\n deaf: Rooms.deafMember,\n undeaf: Rooms.undeafMember,\n setInputVolume: Rooms.setInputVolumeMember,\n setOutputVolume: Rooms.setOutputVolumeMember,\n setMicrophoneVolume: Rooms.setInputVolumeMember,\n setSpeakerVolume: Rooms.setOutputVolumeMember,\n setInputSensitivity: Rooms.setInputSensitivityMember,\n removeMember: Rooms.removeMember,\n getMembers: Rooms.getMembers,\n getLayouts: Rooms.getLayouts,\n setLayout: Rooms.setLayout,\n hideVideoMuted: Rooms.hideVideoMuted,\n showVideoMuted: Rooms.showVideoMuted,\n getRecordings: Rooms.getRecordings,\n startRecording: Rooms.startRecording,\n getPlaybacks: Rooms.getPlaybacks,\n play: Rooms.play,\n setHideVideoMuted: Rooms.setHideVideoMuted,\n})\n\ntype RoomSessionObjectEventsHandlerMapping = RoomSessionObjectEvents &\n BaseConnectionStateEventTypes\n\n/** @internal */\nexport const createBaseRoomSessionObject = <RoomSessionType>(\n params: BaseComponentOptions<RoomSessionObjectEventsHandlerMapping>\n): BaseRoomSession<RoomSessionType> => {\n const room = connect<\n RoomSessionObjectEventsHandlerMapping,\n RoomSessionConnection,\n BaseRoomSession<RoomSessionType>\n >({\n store: params.store,\n customSagas: params.customSagas,\n Component: RoomSessionAPI,\n componentListeners: ROOM_COMPONENT_LISTENERS,\n })(params)\n\n return room\n}\n", "export const ROOM_COMPONENT_LISTENERS = {\n state: 'onStateChange',\n remoteSDP: 'onRemoteSDP',\n roomId: 'onRoomSubscribed',\n videoConstraints: 'onVideoConstraints',\n audioConstraints: 'onAudioConstraints',\n errors: 'onError',\n responses: 'onSuccess',\n}\n\nexport const SCREENSHARE_AUDIO_CONSTRAINTS: MediaTrackConstraints = {\n echoCancellation: false,\n noiseSuppression: false,\n autoGainControl: false,\n // @ts-expect-error\n googAutoGainControl: false,\n}\n", "import {\n Rooms,\n extendComponent,\n BaseConnectionContract,\n AssertSameType,\n} from '@signalwire/core'\nimport {\n BaseConnection,\n BaseConnectionStateEventTypes,\n} from '@signalwire/webrtc'\nimport { RoomSessionScreenShareDocs } from './RoomSessionScreenShare.docs'\nimport { RoomScreenShareMethods } from './utils/interfaces'\n\n/** @deprecated Use {@link RoomSessionScreenShare} instead */\nexport interface RoomScreenShare extends RoomSessionScreenShare {}\ninterface RoomSessionScreenShareMain\n extends RoomScreenShareMethods,\n BaseConnectionContract<BaseConnectionStateEventTypes> {\n join(): Promise<void>\n leave(): Promise<void>\n}\n\n/**\n * Represents a screen sharing.\n */\nexport interface RoomSessionScreenShare\n extends AssertSameType<\n RoomSessionScreenShareMain,\n RoomSessionScreenShareDocs\n > {}\n\nexport class RoomSessionScreenShareConnection extends BaseConnection<BaseConnectionStateEventTypes> {\n join() {\n return super.invite()\n }\n\n leave() {\n return super.hangup()\n }\n}\n\nexport const RoomSessionScreenShareAPI = extendComponent<\n RoomSessionScreenShareConnection,\n RoomScreenShareMethods\n>(RoomSessionScreenShareConnection, {\n audioMute: Rooms.audioMuteMember,\n audioUnmute: Rooms.audioUnmuteMember,\n videoMute: Rooms.videoMuteMember,\n videoUnmute: Rooms.videoUnmuteMember,\n setMicrophoneVolume: Rooms.setInputVolumeMember,\n setInputVolume: Rooms.setInputVolumeMember,\n setInputSensitivity: Rooms.setInputSensitivityMember,\n})\n", "import {\n Rooms,\n extendComponent,\n BaseConnectionContract,\n AssertSameType,\n} from '@signalwire/core'\nimport {\n BaseConnection,\n BaseConnectionStateEventTypes,\n} from '@signalwire/webrtc'\nimport { RoomSessionDeviceDocs } from './RoomSessionDevice.docs'\nimport { RoomSessionDeviceMethods } from './utils/interfaces'\n\n/** @deprecated Use {@link RoomSessionDevice} instead */\nexport interface RoomDevice extends RoomSessionDevice {}\ninterface RoomSessionDeviceMain\n extends RoomSessionDeviceMethods,\n BaseConnectionContract<BaseConnectionStateEventTypes> {\n join(): Promise<void>\n leave(): Promise<void>\n}\n\n/**\n * A RoomSessionDevice represents a device (such as a microphone or a camera)\n * that is at some point in its lifetime part of a {@link RoomSession}. You can\n * obtain a RoomSessionDevice from the {@link RoomSession} methods\n * {@link RoomSession.addCamera}, {@link RoomSession.addMicrophone}, and\n * {@link RoomSession.addDevice}.\n */\nexport interface RoomSessionDevice\n extends AssertSameType<RoomSessionDeviceMain, RoomSessionDeviceDocs> {}\n\nexport class RoomSessionDeviceConnection extends BaseConnection<BaseConnectionStateEventTypes> {\n join() {\n return super.invite()\n }\n\n leave() {\n return super.hangup()\n }\n}\n\nexport const RoomSessionDeviceAPI = extendComponent<\n RoomSessionDeviceConnection,\n RoomSessionDeviceMethods\n>(RoomSessionDeviceConnection, {\n audioMute: Rooms.audioMuteMember,\n audioUnmute: Rooms.audioUnmuteMember,\n videoMute: Rooms.videoMuteMember,\n videoUnmute: Rooms.videoUnmuteMember,\n setInputVolume: Rooms.setInputVolumeMember,\n setMicrophoneVolume: Rooms.setInputVolumeMember,\n setInputSensitivity: Rooms.setInputSensitivityMember,\n})\n", "import {\n BaseComponentOptions,\n BaseConsumer,\n CantinaRoomEventNames,\n InternalCantinaRoomEventNames,\n connect,\n ConsumerContract,\n EventTransform,\n toExternalJSON,\n CantinaRoomEntity,\n CantinaRoomsSubscribedEventParams,\n} from '@signalwire/core'\n\n/** @internal */\nexport type CantinaManagerEvents = Record<\n CantinaRoomEventNames,\n (room: CantinaRoomEntity) => void\n>\n\n/** @internal */\nexport interface Cantina extends ConsumerContract<CantinaManagerEvents> {}\n\n/** @internal */\nexport class CantinaAPI extends BaseConsumer<CantinaManagerEvents> {\n protected _eventsPrefix = 'cantina-manager' as const\n\n /** @internal */\n getEmitterTransforms() {\n return new Map<\n InternalCantinaRoomEventNames | InternalCantinaRoomEventNames[],\n EventTransform\n >([\n [\n ['cantina-manager.rooms.subscribed'],\n {\n type: 'roomSession',\n // For now we expose the transformed payload and not a RoomSession\n instanceFactory: ({ rooms }: CantinaRoomsSubscribedEventParams) => ({\n rooms: rooms.map((row) => toExternalJSON(row)),\n }),\n payloadTransform: ({ rooms }: CantinaRoomsSubscribedEventParams) => ({\n rooms: rooms.map((row) => toExternalJSON(row)),\n }),\n },\n ],\n [\n [\n 'cantina-manager.room.started',\n 'cantina-manager.room.added',\n 'cantina-manager.room.updated',\n 'cantina-manager.room.ended',\n 'cantina-manager.room.deleted',\n ],\n {\n type: 'roomSession',\n // For now we expose the transformed payload and not a RoomSession\n instanceFactory: (payload) => toExternalJSON(payload),\n payloadTransform: (payload) => toExternalJSON(payload),\n },\n ],\n ])\n }\n}\n\nexport const createCantinaObject = (\n params: BaseComponentOptions<CantinaManagerEvents>\n) => {\n const cantina = connect<CantinaManagerEvents, CantinaAPI, Cantina>({\n store: params.store,\n Component: CantinaAPI,\n componentListeners: {\n errors: 'onError',\n responses: 'onSuccess',\n },\n })(params)\n\n const proxy = new Proxy<Cantina>(cantina, {\n get(\n target: Cantina,\n property: string | symbol,\n receiver: ProxyHandler<Cantina>\n ) {\n if (property === '_eventsNamespace') {\n return ''\n } else if (property === 'eventChannel') {\n return 'cantina-manager.rooms'\n }\n\n return Reflect.get(target, property, receiver)\n },\n })\n return proxy\n}\n", "import { BaseJWTSession } from '@signalwire/core'\n\nexport class JWTSession extends BaseJWTSession {\n public WebSocketConstructor = WebSocket\n public agent = process.env.SDK_PKG_AGENT!\n}\n", "import { CreateRoomObjectOptions, createRoomObject } from './createRoomObject'\n\n/**\n * Using Video.joinRoom() you can automatically join a room.\n *\n * @example\n * With an HTMLDivElement with id=\"root\" in the DOM.\n * ```js\n * // <div id=\"root\"></div>\n *\n * try {\n * const roomObj = await Video.joinRoom({\n * token: '<YourJWT>',\n * rootElementId: 'root',\n * })\n *\n * // You have joined the room..\n * } catch (error) {\n * console.error('Error', error)\n * }\n * ```\n * @deprecated Use {@link RoomSession} instead.\n */\nexport const joinRoom = (roomOptions: CreateRoomObjectOptions) => {\n return createRoomObject({\n ...roomOptions,\n autoJoin: true,\n })\n}\n", "import { UserOptions, AssertSameType, getLogger } from '@signalwire/core'\nimport { createClient } from './createClient'\nimport type { MakeRoomOptions } from './Client'\nimport { BaseRoomSession } from './BaseRoomSession'\nimport { RoomSessionDocs } from './RoomSession.docs'\n\nconst VIDEO_CONSTRAINTS: MediaTrackConstraints = {\n aspectRatio: { ideal: 16 / 9 },\n}\n\n/**\n * List of properties/methods the user shouldn't be able to\n * use until they sucessfully call `roomSession.join()`.\n */\nexport const UNSAFE_PROP_ACCESS = [\n 'audioMute',\n 'audioUnmute',\n 'deaf',\n 'getLayouts',\n 'getMembers',\n 'getRecordings',\n 'hideVideoMuted',\n 'leave',\n 'removerMember',\n 'restoreOutboundAudio',\n 'restoreOutboundVideo',\n 'setInputSensitivity',\n 'setInputVolume',\n 'setLayout',\n 'setOutputVolume',\n 'showVideoMuted',\n 'startRecording',\n 'stopOutboundAudio',\n 'stopOutboundVideo',\n 'undeaf',\n 'videoMute',\n 'videoUnmute',\n 'setMicrophoneVolume',\n 'setSpeakerVolume',\n]\n\nexport interface RoomSessionOptions extends UserOptions, MakeRoomOptions {}\n\ninterface RoomSessionMain extends BaseRoomSession<RoomSessionMain> {\n new (opts: RoomSessionOptions): this\n}\n\n/**\n * A RoomSession allows you to start and control video sessions.\n *\n * For example, the following code joins a video session and listens for new\n * members joining:\n *\n * ```typescript\n * const roomSession = new SignalWire.Video.RoomSession({\n * token: '<YourRoomToken>',\n * rootElement: document.getElementById('myVideoElement'),\n * audio: true,\n * video: true,\n * })\n *\n * roomSession.on('member.joined', (e) => {\n * console.log(`${e.member.name} joined`)\n * })\n *\n * roomSession.join()\n * ```\n *\n * ## Events\n *\n * Please see {@link RoomSessionEvents} for the list of events emitted by a\n * RoomSession object.\n */\nexport interface RoomSession\n extends AssertSameType<RoomSessionMain, RoomSessionDocs<RoomSessionMain>> {}\n\n/**\n * @ignore\n * @privateRemarks\n *\n * The use of a function expression as a contructor instead\n * of a class was picked because it made a couple things\n * simpler for this use case.\n * 1. Making classes behave as factories can be tricky when\n * working with TypeScript since it's non trivial to\n * switch the type returned by the constructor\n * 2. It also generates more verbose code (once transpiled)\n * if we want to have private fields to store `room` and\n * `client`.\n */\nexport const RoomSession = function (roomOptions: RoomSessionOptions) {\n const {\n audio = true,\n video = true,\n iceServers,\n rootElement,\n applyLocalVideoOverlay = true,\n stopCameraWhileMuted = true,\n stopMicrophoneWhileMuted = true,\n speakerId,\n ...userOptions\n } = roomOptions\n\n const client = createClient<RoomSession>(userOptions)\n const room = client.rooms.makeRoomObject({\n audio,\n video: video === true ? VIDEO_CONSTRAINTS : video,\n negotiateAudio: true,\n negotiateVideo: true,\n iceServers,\n rootElement,\n applyLocalVideoOverlay,\n stopCameraWhileMuted,\n stopMicrophoneWhileMuted,\n speakerId,\n })\n\n // WebRTC connection left the room.\n room.once('destroy', () => {\n client.disconnect()\n })\n\n const join = () => {\n return new Promise(async (resolve, reject) => {\n try {\n await client.connect()\n\n room.once('room.subscribed', () => {\n resolve(room)\n })\n\n await room.join()\n } catch (error) {\n getLogger().error('RoomSession Join', error)\n reject(error)\n }\n })\n }\n\n return new Proxy<Omit<RoomSession, 'new'>>(room, {\n get(target: RoomSession, prop: any, receiver: any) {\n if (prop === 'join') {\n return join\n }\n\n if (!target.active && UNSAFE_PROP_ACCESS.includes(prop)) {\n throw new Error(\n `Tried to access the property/method \"${prop}\" before the room was connected. Please call roomSession.join() first.`\n )\n }\n\n return Reflect.get(target, prop, receiver)\n },\n })\n // For consistency with other constructors we'll make TS force the use of `new`\n} as unknown as { new (roomOptions: RoomSessionOptions): RoomSession }\n", "export {\n getDevices,\n getCameraDevices,\n getMicrophoneDevices,\n getSpeakerDevices,\n getDevicesWithPermissions,\n getCameraDevicesWithPermissions,\n getMicrophoneDevicesWithPermissions,\n getSpeakerDevicesWithPermissions,\n checkPermissions,\n checkCameraPermissions,\n checkMicrophonePermissions,\n checkSpeakerPermissions,\n requestPermissions,\n createDeviceWatcher,\n createCameraDeviceWatcher,\n createMicrophoneDeviceWatcher,\n createSpeakerDeviceWatcher,\n supportsMediaDevices,\n supportsGetUserMedia,\n supportsGetDisplayMedia,\n getUserMedia,\n getDisplayMedia,\n enumerateDevices,\n getSupportedConstraints,\n supportsMediaOutput,\n setMediaElementSinkId,\n stopStream,\n stopTrack,\n} from '@signalwire/webrtc'\n", "import type {\n AssertSameType,\n ChatContract,\n ConsumerContract,\n UserOptions,\n Chat as ChatNamespace,\n} from '@signalwire/core'\nimport { getLogger } from '@signalwire/core'\nimport { createClient } from '../createClient'\n\nexport interface ChatApiEvents extends ChatNamespace.BaseChatApiEvents {}\n\nexport interface ChatFullState extends Chat {}\ninterface ChatMain\n extends ChatContract,\n Omit<ConsumerContract<ChatApiEvents, ChatFullState>, 'subscribe'> {}\n\ninterface ChatDocs extends ChatMain {}\n\nexport interface Chat extends AssertSameType<ChatMain, ChatDocs> {}\n\nexport interface ChatOptions extends UserOptions {}\n\nexport const Chat = function (chatOptions: ChatOptions) {\n if ('production' === process.env.NODE_ENV) {\n getLogger().warn(\n '`Chat` is still under development and may change in the future without prior notice.'\n )\n }\n\n const client = createClient<Chat>(chatOptions)\n const subscribe: Chat['subscribe'] = async (channels) => {\n await client.connect()\n\n return client.chat.subscribe(channels)\n }\n const publish: Chat['publish'] = async (params) => {\n await client.connect()\n\n return client.chat.publish(params)\n }\n\n return new Proxy<Chat>(client.chat, {\n get(target: Chat, prop: keyof Chat, receiver: any) {\n if (prop === 'subscribe') {\n return subscribe\n } else if (prop === 'publish') {\n return publish\n }\n\n return Reflect.get(target, prop, receiver)\n },\n })\n // For consistency with other constructors we'll make TS force the use of `new`\n} as unknown as { new (chatOptions: ChatOptions): Chat }\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/video.ts", "../src/createRoomObject.ts", "../src/createClient.ts", "../src/Client.ts", "../src/features/mediaElements/mediaElementsSagas.ts", "../src/utils/videoElement.ts", "../src/utils/audioElement.ts", "../src/features/actions.ts", "../src/BaseRoomSession.ts", "../src/utils/constants.ts", "../src/RoomSessionScreenShare.ts", "../src/RoomSessionDevice.ts", "../src/cantina/Cantina.ts", "../src/JWTSession.ts", "../src/joinRoom.ts", "../src/RoomSession.ts", "../src/webrtc.ts", "../src/chat/index.ts", "../src/chat/Client.ts"],
4
+ "sourcesContent": ["import { createRoomObject, Room } from './createRoomObject'\nimport { createClient } from './createClient'\nimport { joinRoom } from './joinRoom'\nimport { MakeRoomOptions } from './Client'\nimport { RoomSession } from './RoomSession'\nimport { RoomSessionDevice, RoomDevice } from './RoomSessionDevice'\nimport {\n RoomSessionScreenShare,\n RoomScreenShare,\n} from './RoomSessionScreenShare'\n\nexport {\n RoomSession,\n RoomSessionDevice,\n RoomSessionScreenShare,\n // Just to keep backwards compatibility.\n createRoomObject,\n joinRoom,\n Room,\n RoomDevice,\n RoomScreenShare,\n createClient,\n}\n\n/** @ignore */\nexport type { MakeRoomOptions }\n\n/** @ignore */\nexport type {\n MemberCommandParams,\n MemberCommandWithVolumeParams,\n MemberCommandWithValueParams,\n DeprecatedMemberUpdatableProps,\n DeprecatedVideoMemberHandlerParams,\n VideoMemberHandlerParams,\n} from './utils/interfaces'\n\nexport type { CreateRoomObjectOptions } from './createRoomObject'\n\nexport type {\n RoomSessionRecording,\n RoomSessionPlayback,\n} from '@signalwire/core'\n\nexport type { RoomSessionEvents } from './RoomSession.docs'\n", "import { UserOptions, getLogger, AssertSameType } from '@signalwire/core'\nimport { createClient } from './createClient'\nimport { MakeRoomOptions } from './Client'\nimport { BaseRoomSession } from './BaseRoomSession'\n\n/**\n * @internal\n * @deprecated Use {@link RoomSession} instead.\n **/\nexport interface Room extends BaseRoomSession<Room> {}\n\ninterface CreateRoomObjectOptionsMain\n extends UserOptions,\n Omit<MakeRoomOptions, 'rootElement'> {\n /** Id of the HTML element in which to display the video stream */\n rootElementId?: string\n /** Whether to automatically join the room session. */\n autoJoin?: boolean\n}\n\n/**\n * @deprecated Usage of this object is deprecated. See {@link RoomSession}\n * instead.\n */\nexport interface CreateRoomObjectOptions\n extends AssertSameType<\n CreateRoomObjectOptionsMain,\n {\n /** SignalWire project id, e.g. `a10d8a9f-2166-4e82-56ff-118bc3a4840f` */\n project?: string\n /** SignalWire project token, e.g. `PT9e5660c101cd140a1c93a0197640a369cf5f16975a0079c9` */\n token: string\n /** logging level */\n logLevel?: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent'\n /** Id of the HTML element in which to display the video stream */\n rootElementId?: string\n /** Whether to apply the local-overlay on top of your video. Default: `true`. */\n applyLocalVideoOverlay?: boolean\n /** Whether to stop the camera when the member is muted. Default: `true`. */\n stopCameraWhileMuted?: boolean\n /** Whether to stop the microphone when the member is muted. Default: `true`. */\n stopMicrophoneWhileMuted?: boolean\n /** List of ICE servers. */\n iceServers?: RTCIceServer[]\n /** Audio constraints to use when joining the room. Default: `true`. */\n audio?: MediaStreamConstraints['audio']\n /** Video constraints to use when joining the room. Default: `true`. */\n video?: MediaStreamConstraints['video']\n /** Id of the speaker device to use for audio output. If undefined, picks a default speaker. */\n speakerId?: string\n /** Whether to automatically join the room session. */\n autoJoin?: boolean\n }\n > {}\n\nconst VIDEO_CONSTRAINTS: MediaTrackConstraints = {\n aspectRatio: { ideal: 16 / 9 },\n}\n\n/**\n * Using Video.createRoomObject() you can create a `RoomObject` to join a room.\n *\n * @example\n * With an HTMLDivElement with id=\"root\" in the DOM.\n * ```js\n * // <div id=\"root\"></div>\n *\n * try {\n * const roomObj = await Video.createRoomObject({\n * token: '<YourJWT>',\n * rootElementId: 'root',\n * })\n *\n * roomObj.join()\n * } catch (error) {\n * console.error('Error', error)\n * }\n * ```\n * @deprecated Use {@link RoomSession} instead.\n */\nexport const createRoomObject = (\n roomOptions: CreateRoomObjectOptions\n): Promise<Room> => {\n return new Promise(async (resolve, reject) => {\n const {\n audio = true,\n video = true,\n iceServers,\n rootElementId,\n applyLocalVideoOverlay = true,\n autoJoin = false,\n stopCameraWhileMuted = true,\n stopMicrophoneWhileMuted = true,\n speakerId,\n ...userOptions\n } = roomOptions\n\n const client = createClient<Room>({\n ...userOptions,\n })\n await client.connect()\n\n if (!client) {\n return\n }\n\n /**\n * Since `makeRoomObject` now only accepts a\n * `rootElement` the following is to preserve backwards\n * compatibility with the previous syntax\n */\n let rootElement: HTMLElement | undefined\n if (rootElementId) {\n const el = document.getElementById(rootElementId)\n\n if (el) {\n rootElement = el\n } else {\n rootElement = document.body\n\n getLogger().warn(\n `We couldn't find an element with id: ${rootElementId}: using 'document.body' instead.`\n )\n }\n }\n\n const room = client.rooms.makeRoomObject({\n audio,\n video: video === true ? VIDEO_CONSTRAINTS : video,\n negotiateAudio: true,\n negotiateVideo: true,\n iceServers,\n rootElement,\n applyLocalVideoOverlay,\n stopCameraWhileMuted,\n stopMicrophoneWhileMuted,\n speakerId,\n })\n\n // WebRTC connection left the room.\n room.once('destroy', () => {\n client.disconnect()\n })\n\n if (autoJoin) {\n try {\n await room.join()\n resolve(room)\n } catch (error) {\n reject(error)\n }\n } else {\n resolve(room)\n }\n })\n}\n", "import {\n ClientEvents,\n configureStore,\n connect,\n getEventEmitter,\n UserOptions,\n} from '@signalwire/core'\nimport { ClientAPI, Client } from './Client'\nimport { JWTSession } from './JWTSession'\n\n/**\n * With Video.createClient() you can establish a WebSocket connection\n * with SignalWire and interact with the client.\n *\n * ## Examples\n * Create a client\n *\n * @example\n * ```js\n * try {\n * const client = Video.createClient({\n * token: '<YourJWT>',\n * })\n *\n * await client.connect()\n * // Your client is ready now..\n * } catch (error) {\n * console.error('Error', error)\n * }\n * ```\n * @internal\n */\nexport const createClient = <RoomSessionType>(userOptions: UserOptions) => {\n const baseUserOptions = {\n ...userOptions,\n emitter: getEventEmitter<ClientEvents>(),\n }\n const store = configureStore({\n userOptions: baseUserOptions,\n SessionConstructor: JWTSession,\n })\n const client = connect<\n ClientEvents,\n ClientAPI<RoomSessionType>,\n Client<RoomSessionType>\n >({\n store,\n Component: ClientAPI,\n componentListeners: {\n errors: 'onError',\n responses: 'onSuccess',\n },\n })(baseUserOptions)\n\n return client\n}\n", "import {\n BaseClient,\n ClientEvents,\n ClientContract,\n actions,\n Chat as ChatNamespace,\n} from '@signalwire/core'\nimport type { CustomSaga } from '@signalwire/core'\nimport { ConnectionOptions } from '@signalwire/webrtc'\nimport {\n makeVideoElementSaga,\n makeAudioElementSaga,\n} from './features/mediaElements/mediaElementsSagas'\nimport { RoomSession } from './RoomSession'\nimport {\n createBaseRoomSessionObject,\n RoomSessionConnection,\n} from './BaseRoomSession'\nimport { Cantina, createCantinaObject } from './cantina'\nimport type { Client as ChatClient } from './chat/Client'\n\nexport interface Client<RoomSessionType = RoomSession>\n extends ClientContract<Client<RoomSessionType>, ClientEvents> {\n rooms: ClientAPI<RoomSessionType>['rooms']\n chat: ClientAPI<RoomSessionType>['chat']\n}\n\nexport interface MakeRoomOptions extends ConnectionOptions {\n rootElement?: HTMLElement\n applyLocalVideoOverlay?: boolean\n stopCameraWhileMuted?: boolean\n stopMicrophoneWhileMuted?: boolean\n}\n\nexport class ClientAPI<\n RoomSessionType = RoomSession\n> extends BaseClient<ClientEvents> {\n private _cantina: Cantina\n private _chat: ChatClient\n\n get rooms() {\n return {\n makeRoomObject: (makeRoomOptions: MakeRoomOptions) => {\n const {\n rootElement,\n applyLocalVideoOverlay = true,\n stopCameraWhileMuted = true,\n stopMicrophoneWhileMuted = true,\n ...options\n } = makeRoomOptions\n\n const customSagas: Array<CustomSaga<RoomSessionConnection>> = []\n\n /**\n * By default the SDK will attach the audio to\n * an Audio element (regardless of \"rootElement\")\n */\n customSagas.push(\n makeAudioElementSaga({\n speakerId: options.speakerId,\n })\n )\n\n /**\n * If the user provides a `roomElement` we'll\n * automatically handle the Video element for them\n */\n if (rootElement) {\n customSagas.push(\n makeVideoElementSaga({\n rootElement,\n applyLocalVideoOverlay,\n })\n )\n }\n\n const room = createBaseRoomSessionObject<RoomSessionType>({\n ...options,\n store: this.store,\n // @ts-expect-error\n emitter: this.emitter,\n customSagas,\n })\n\n /**\n * Stop and Restore outbound audio on audio_muted event\n */\n if (stopMicrophoneWhileMuted) {\n room.on('member.updated.audio_muted', ({ member }) => {\n try {\n if (member.id === room.memberId && 'audio_muted' in member) {\n member.audio_muted\n ? room.stopOutboundAudio()\n : room.restoreOutboundAudio()\n }\n } catch (error) {\n this.logger.error('Error handling audio_muted', error)\n }\n })\n }\n\n /**\n * Stop and Restore outbound video on video_muted event\n */\n if (stopCameraWhileMuted) {\n room.on('member.updated.video_muted', ({ member }) => {\n try {\n if (member.id === room.memberId && 'video_muted' in member) {\n member.video_muted\n ? room.stopOutboundVideo()\n : room.restoreOutboundVideo()\n }\n } catch (error) {\n this.logger.error('Error handling video_muted', error)\n }\n })\n }\n\n return room\n },\n }\n }\n\n get chat() {\n if (!this._chat) {\n this._chat = ChatNamespace.createBaseChatObject<ChatClient>({\n store: this.store,\n // Emitter is now typed but we share it across objects\n // so types won't match\n // @ts-expect-error\n emitter: this.options.emitter,\n })\n }\n return this._chat\n }\n\n get cantina() {\n if (!this._cantina) {\n // @ts-expect-error\n this._cantina = createCantinaObject(this.options)\n }\n return this._cantina\n }\n\n /**\n * Reauthenticate with the SignalWire network using a new token\n * For now it returns void since with an invalid token the server\n * will close the connection right away so we can hook on the session\n * events in case. Need to improve it.\n *\n * @internal\n */\n reauthenticate(token: string) {\n this.store.dispatch(actions.reauthAction({ token }))\n }\n}\n", "import {\n getLogger,\n CustomSagaParams,\n actions,\n sagaEffects,\n} from '@signalwire/core'\nimport type { SagaIterator, Task } from '@signalwire/core'\nimport { setMediaElementSinkId } from '@signalwire/webrtc'\nimport {\n buildVideo,\n cleanupElement,\n makeDisplayChangeFn,\n makeLayoutChangedHandler,\n setVideoMediaTrack,\n} from '../../utils/videoElement'\nimport { setAudioMediaTrack } from '../../utils/audioElement'\nimport { audioSetSpeakerAction } from '../actions'\nimport type { RoomSessionConnection } from '../../BaseRoomSession'\n\nexport const makeVideoElementSaga = ({\n rootElement,\n applyLocalVideoOverlay,\n}: {\n rootElement: HTMLElement\n applyLocalVideoOverlay?: boolean\n}) => {\n return function* videoElementSaga({\n instance: room,\n runSaga,\n }: CustomSagaParams<RoomSessionConnection>): SagaIterator {\n try {\n const layerMap = new Map()\n const videoEl = buildVideo()\n const layoutChangedHandler = makeLayoutChangedHandler({\n rootElement,\n element: videoEl,\n layerMap,\n })\n const hideOverlay = makeDisplayChangeFn('none')\n const showOverlay = makeDisplayChangeFn('block')\n\n room.on('layout.changed', (params) => {\n if (room.peer.hasVideoSender && room.localStream) {\n layoutChangedHandler({\n // @ts-expect-error\n layout: params.layout,\n localStream: room.localStream,\n myMemberId: room.memberId,\n })\n }\n })\n\n room.on('member.updated.video_muted', (params) => {\n try {\n const { member } = params\n if (member.id === room.memberId && 'video_muted' in member) {\n member.video_muted ? hideOverlay(member.id) : showOverlay(member.id)\n }\n } catch (error) {\n getLogger().error('Error handling video_muted', error)\n }\n })\n\n let videoTask: Task | undefined\n\n const trackHandler = function (event: RTCTrackEvent) {\n switch (event.track.kind) {\n case 'video': {\n videoTask = runSaga(videoElementSetupWorker, {\n applyLocalVideoOverlay,\n rootElement,\n track: event.track,\n element: videoEl,\n })\n // Remove listener when done with video\n room.off('track', trackHandler)\n break\n }\n }\n }\n room.on('track', trackHandler)\n\n room.once('destroy', () => {\n cleanupElement(rootElement)\n layerMap.clear()\n videoTask?.cancel()\n })\n } catch (error) {\n getLogger().error('videoElementSaga', error)\n }\n }\n}\n\nexport const makeAudioElementSaga = ({ speakerId }: { speakerId?: string }) => {\n return function* audioElementSaga({\n instance: room,\n runSaga,\n }: CustomSagaParams<RoomSessionConnection>): SagaIterator {\n try {\n const audioEl = new Audio()\n let audioTask: Task | undefined\n\n const trackHandler = function (event: RTCTrackEvent) {\n switch (event.track.kind) {\n case 'audio': {\n audioTask = runSaga(audioElementSetupWorker, {\n track: event.track,\n element: audioEl,\n speakerId,\n room,\n })\n // Remove listener when done with audio\n room.off('track', trackHandler)\n break\n }\n }\n }\n room.on('track', trackHandler)\n\n room.once('destroy', () => {\n audioTask?.cancel()\n })\n } catch (error) {\n getLogger().error('audioElementSaga', error)\n }\n }\n}\n\nfunction* audioElementActionsWatcher({\n element,\n room,\n}: {\n element: HTMLAudioElement\n room: RoomSessionConnection\n}): SagaIterator {\n // TODO: For now we're handling individual actions but in the future\n // we might want to have a single action per custom saga and use it\n // in a similar fashion to `executeAction`\n const setSpeakerActionType = actions.getCustomSagaActionType(\n room.__uuid,\n audioSetSpeakerAction\n )\n\n while (true) {\n const action = yield sagaEffects.take([setSpeakerActionType])\n\n try {\n switch (action.type) {\n case setSpeakerActionType:\n const response = yield sagaEffects.call(\n setMediaElementSinkId,\n element,\n action.payload\n )\n room.settleCustomSagaTrigger({\n dispatchId: action.dispatchId,\n payload: response,\n kind: 'resolve',\n })\n break\n }\n } catch (error) {\n room.settleCustomSagaTrigger({\n dispatchId: action.dispatchId,\n payload: error,\n kind: 'reject',\n })\n getLogger().error(error)\n }\n }\n}\n\nfunction* audioElementSetupWorker({\n track,\n element,\n speakerId,\n room,\n}: {\n track: MediaStreamTrack\n element: HTMLAudioElement\n speakerId?: string\n room: RoomSessionConnection\n}): SagaIterator {\n setAudioMediaTrack({ track, element })\n if (speakerId) {\n // Catch no-op since setMediaElementSinkId already provides logs\n setMediaElementSinkId(element, speakerId).catch(() => {})\n }\n\n yield sagaEffects.fork(audioElementActionsWatcher, {\n element,\n room,\n })\n}\n\nfunction* videoElementSetupWorker({\n rootElement,\n applyLocalVideoOverlay = true,\n track,\n element,\n}: {\n // TODO: we'll move this to a separate type once we define how to\n // dispatch action that only target unique sagas\n rootElement: HTMLElement\n applyLocalVideoOverlay?: boolean\n track: MediaStreamTrack\n element: HTMLVideoElement\n}): SagaIterator {\n const handleVideoTrack = (track: MediaStreamTrack) => {\n setVideoMediaTrack({ element, track })\n\n element.style.width = '100%'\n\n if (!applyLocalVideoOverlay) {\n rootElement.appendChild(element)\n return\n }\n\n const mcuWrapper = document.createElement('div')\n mcuWrapper.style.position = 'absolute'\n mcuWrapper.style.top = '0'\n mcuWrapper.style.left = '0'\n mcuWrapper.style.right = '0'\n mcuWrapper.style.bottom = '0'\n mcuWrapper.appendChild(element)\n\n const paddingWrapper = document.createElement('div')\n paddingWrapper.style.paddingBottom = '56.25%'\n paddingWrapper.appendChild(mcuWrapper)\n\n const layersWrapper = document.createElement('div')\n layersWrapper.classList.add('mcuLayers')\n paddingWrapper.appendChild(layersWrapper)\n\n const relativeWrapper = document.createElement('div')\n relativeWrapper.style.position = 'relative'\n relativeWrapper.style.width = '100%'\n relativeWrapper.style.margin = '0 auto'\n relativeWrapper.appendChild(paddingWrapper)\n\n rootElement.style.display = 'flex'\n rootElement.style.alignItems = 'center'\n rootElement.style.justifyContent = 'center'\n rootElement.appendChild(relativeWrapper)\n }\n\n handleVideoTrack(track)\n\n // TODO: take destroy\n}\n", "import {\n getLogger,\n InternalVideoLayoutLayer,\n InternalVideoLayout,\n} from '@signalwire/core'\n\nconst _addSDKPrefix = (input: string) => {\n return `sw-sdk-${input}`\n}\n\nconst buildVideo = () => {\n const video = document.createElement('video')\n video.muted = true\n video.autoplay = true\n video.playsInline = true\n\n return video\n}\n\nconst _videoReady = ({ element }: { element: HTMLVideoElement }) => {\n return new Promise<void>((resolve) => {\n element.addEventListener('canplay', function listener() {\n element.removeEventListener('canplay', listener)\n resolve()\n })\n element.addEventListener('resize', function listener() {\n element.removeEventListener('resize', listener)\n resolve()\n })\n })\n}\n\nconst _getLocationStyles = ({\n x,\n y,\n width,\n height,\n}: InternalVideoLayoutLayer) => {\n return {\n top: `${y}%`,\n left: `${x}%`,\n width: `${width}%`,\n height: `${height}%`,\n }\n}\n\nconst _buildLayer = async ({\n location,\n element,\n}: {\n location: InternalVideoLayoutLayer\n element: HTMLVideoElement\n}) => {\n if (element.readyState === HTMLMediaElement.HAVE_NOTHING) {\n await _videoReady({ element })\n }\n const { top, left, width, height } = _getLocationStyles(location)\n const layer = document.createElement('div')\n layer.style.position = 'absolute'\n layer.style.overflow = 'hidden'\n layer.style.top = top\n layer.style.left = left\n layer.style.width = width\n layer.style.height = height\n\n return layer\n}\n\ninterface LayoutChangedHandlerParams {\n layout: InternalVideoLayout\n myMemberId: string\n localStream: MediaStream\n}\n\nconst makeLayoutChangedHandler =\n ({\n layerMap,\n element,\n rootElement,\n }: {\n layerMap: Map<string, HTMLElement>\n element: HTMLVideoElement\n rootElement: HTMLElement\n }) =>\n async ({ layout, myMemberId, localStream }: LayoutChangedHandlerParams) => {\n try {\n const { layers = [] } = layout\n const location = layers.find(({ member_id }) => member_id === myMemberId)\n\n const myLayerKey = _addSDKPrefix(myMemberId)\n let myLayer = layerMap.get(myLayerKey)\n if (!location) {\n if (myLayer) {\n getLogger().debug('Current layer not visible')\n myLayer.style.display = 'none'\n }\n\n return\n }\n\n if (!myLayer) {\n myLayer = await _buildLayer({ element, location })\n myLayer.id = myLayerKey\n\n const localVideo = buildVideo()\n localVideo.srcObject = localStream\n localVideo.style.width = '100%'\n localVideo.style.height = '100%'\n\n myLayer.appendChild(localVideo)\n\n const mcuLayers = rootElement.querySelector('.mcuLayers')\n const exists = document.getElementById(myLayerKey)\n if (mcuLayers && !exists) {\n mcuLayers.appendChild(myLayer)\n layerMap.set(myLayerKey, myLayer)\n }\n\n return\n }\n\n const { top, left, width, height } = _getLocationStyles(location)\n myLayer.style.display = 'block'\n myLayer.style.top = top\n myLayer.style.left = left\n myLayer.style.width = width\n myLayer.style.height = height\n } catch (error) {\n getLogger().error('Layout Changed Error', error)\n }\n }\n\nconst makeDisplayChangeFn = (display: 'block' | 'none') => {\n return (domId: string) => {\n const el = document.getElementById(_addSDKPrefix(domId))\n if (el) {\n el.style.display = display\n }\n }\n}\n\nconst cleanupElement = (rootElement: HTMLElement) => {\n while (rootElement.firstChild) {\n rootElement.removeChild(rootElement.firstChild)\n }\n}\n\nconst setVideoMediaTrack = ({\n track,\n element,\n}: {\n track: MediaStreamTrack\n element: HTMLVideoElement\n}) => {\n element.srcObject = new MediaStream([track])\n\n track.addEventListener('ended', () => {\n element.srcObject = null\n element.remove()\n })\n}\n\nexport {\n buildVideo,\n cleanupElement,\n makeLayoutChangedHandler,\n makeDisplayChangeFn,\n setVideoMediaTrack,\n}\n", "const setAudioMediaTrack = ({\n track,\n element,\n}: {\n track: MediaStreamTrack\n element: HTMLAudioElement\n}) => {\n element.autoplay = true\n // @ts-ignore\n element.playsinline = true\n element.srcObject = new MediaStream([track])\n\n track.addEventListener('ended', () => {\n element.srcObject = null\n element.remove()\n })\n\n return element\n}\n\nexport { setAudioMediaTrack }\n", "import { actions } from '@signalwire/core'\n\nexport const audioSetSpeakerAction = actions.createAction<string>(\n 'swJs/audioSetSpeakerAction'\n)\n", "import {\n connect,\n Rooms,\n EventTransform,\n extendComponent,\n BaseComponentContract,\n BaseComponentOptions,\n BaseConnectionContract,\n toLocalEvent,\n toExternalJSON,\n} from '@signalwire/core'\nimport {\n getDisplayMedia,\n BaseConnection,\n BaseConnectionOptions,\n BaseConnectionStateEventTypes,\n} from '@signalwire/webrtc'\nimport type {\n RoomSessionObjectEvents,\n CreateScreenShareObjectOptions,\n AddDeviceOptions,\n AddCameraOptions,\n AddMicrophoneOptions,\n BaseRoomInterface,\n RoomMethods,\n StartScreenShareOptions,\n RoomSessionConnectionContract,\n} from './utils/interfaces'\nimport {\n ROOM_COMPONENT_LISTENERS,\n SCREENSHARE_AUDIO_CONSTRAINTS,\n} from './utils/constants'\nimport { audioSetSpeakerAction } from './features/actions'\nimport {\n RoomSessionScreenShareAPI,\n RoomSessionScreenShareConnection,\n RoomSessionScreenShare,\n} from './RoomSessionScreenShare'\nimport {\n RoomSessionDeviceAPI,\n RoomSessionDeviceConnection,\n RoomSessionDevice,\n} from './RoomSessionDevice'\n\nexport interface BaseRoomSession<T>\n extends RoomMethods,\n RoomSessionConnectionContract,\n BaseComponentContract,\n BaseConnectionContract<RoomSessionObjectEvents> {\n join(): Promise<T>\n leave(): Promise<void>\n}\n\nexport class RoomSessionConnection\n extends BaseConnection<RoomSessionObjectEvents>\n implements BaseRoomInterface, RoomSessionConnectionContract\n{\n private _screenShareList = new Set<RoomSessionScreenShare>()\n private _deviceList = new Set<RoomSessionDevice>()\n\n get screenShareList() {\n return Array.from(this._screenShareList)\n }\n\n get deviceList() {\n return Array.from(this._deviceList)\n }\n\n /** @internal */\n protected getEmitterTransforms() {\n return new Map<string | string[], EventTransform>([\n [\n [\n toLocalEvent('video.recording.start'),\n 'video.recording.started',\n 'video.recording.updated',\n 'video.recording.ended',\n ],\n {\n type: 'roomSessionRecording',\n instanceFactory: (_payload: any) => {\n return Rooms.createRoomSessionRecordingObject({\n store: this.store,\n // @ts-expect-error\n emitter: this.emitter,\n })\n },\n payloadTransform: (payload: any) => {\n return toExternalJSON({\n ...payload.recording,\n room_session_id: this.roomSessionId,\n })\n },\n },\n ],\n [\n [\n toLocalEvent('video.playback.start'),\n 'video.playback.started',\n 'video.playback.updated',\n 'video.playback.ended',\n ],\n {\n type: 'roomSessionPlayback',\n instanceFactory: (_payload: any) => {\n return Rooms.createRoomSessionPlaybackObject({\n store: this.store,\n // @ts-expect-error\n emitter: this.emitter,\n })\n },\n payloadTransform: (payload: any) => {\n return toExternalJSON({\n ...payload.playback,\n room_session_id: this.roomSessionId,\n })\n },\n },\n ],\n ])\n }\n\n /** @deprecated Use {@link startScreenShare} instead. */\n async createScreenShareObject(opts: CreateScreenShareObjectOptions = {}) {\n return this.startScreenShare(opts)\n }\n\n /**\n * Allow sharing the screen within the room.\n */\n async startScreenShare(opts: StartScreenShareOptions = {}) {\n const { autoJoin = true, audio = false, video = true } = opts\n const displayStream: MediaStream = await getDisplayMedia({\n audio: audio === true ? SCREENSHARE_AUDIO_CONSTRAINTS : audio,\n video,\n })\n const options: BaseConnectionOptions<RoomSessionObjectEvents> = {\n ...this.options,\n screenShare: true,\n recoverCall: false,\n localStream: displayStream,\n remoteStream: undefined,\n userVariables: {\n ...(this.options?.userVariables || {}),\n memberCallId: this.__uuid,\n memberId: this.memberId,\n },\n }\n\n const screenShare = connect<\n BaseConnectionStateEventTypes,\n RoomSessionScreenShareConnection,\n RoomSessionScreenShare\n >({\n store: this.store,\n Component: RoomSessionScreenShareAPI,\n componentListeners: ROOM_COMPONENT_LISTENERS,\n })(options)\n\n /**\n * Hangup if the user stop the screenShare from the\n * native browser button or if the videoTrack ends.\n */\n displayStream.getVideoTracks().forEach((t) => {\n t.addEventListener('ended', () => {\n if (screenShare && screenShare.active) {\n screenShare.leave()\n }\n })\n })\n\n screenShare.on('destroy', () => {\n this._screenShareList.delete(screenShare)\n })\n\n try {\n this._screenShareList.add(screenShare)\n if (autoJoin) {\n await screenShare.join()\n }\n return screenShare\n } catch (error) {\n this.logger.error('ScreenShare Error', error)\n throw error\n }\n }\n\n /**\n * Allow to add a camera to the room.\n */\n addCamera(opts: AddCameraOptions = {}) {\n const { autoJoin = true, ...video } = opts\n return this.addDevice({\n autoJoin,\n video,\n })\n }\n\n /**\n * Allow to add a microphone to the room.\n */\n addMicrophone(opts: AddMicrophoneOptions = {}) {\n const { autoJoin = true, ...audio } = opts\n return this.addDevice({\n autoJoin,\n audio,\n })\n }\n\n /**\n * Allow to add additional devices to the room like cameras or microphones.\n */\n async addDevice(opts: AddDeviceOptions = {}) {\n const { autoJoin = true, audio = false, video = false } = opts\n if (!audio && !video) {\n throw new TypeError(\n 'At least one of `audio` or `video` must be requested.'\n )\n }\n\n const options: BaseConnectionOptions<RoomSessionObjectEvents> = {\n ...this.options,\n localStream: undefined,\n remoteStream: undefined,\n audio,\n video,\n additionalDevice: true,\n recoverCall: false,\n userVariables: {\n ...(this.options?.userVariables || {}),\n memberCallId: this.__uuid,\n memberId: this.memberId,\n },\n }\n\n const roomDevice = connect<\n BaseConnectionStateEventTypes,\n RoomSessionDeviceConnection,\n RoomSessionDevice\n >({\n store: this.store,\n Component: RoomSessionDeviceAPI,\n componentListeners: ROOM_COMPONENT_LISTENERS,\n })(options)\n\n roomDevice.on('destroy', () => {\n this._deviceList.delete(roomDevice)\n })\n\n try {\n this._deviceList.add(roomDevice)\n if (autoJoin) {\n await roomDevice.join()\n }\n return roomDevice\n } catch (error) {\n this.logger.error('RoomDevice Error', error)\n throw error\n }\n }\n\n join() {\n return super.invite<BaseRoomSession<this>>()\n }\n\n leave() {\n return this.hangup()\n }\n\n updateSpeaker({ deviceId }: { deviceId: string }) {\n return this.triggerCustomSaga<undefined>(audioSetSpeakerAction(deviceId))\n }\n\n /** @internal */\n async hangup() {\n this._screenShareList.forEach((screenShare) => {\n screenShare.leave()\n })\n this._deviceList.forEach((device) => {\n device.leave()\n })\n\n return super.hangup()\n }\n\n /** @internal */\n protected _finalize() {\n this._screenShareList.clear()\n this._deviceList.clear()\n\n super._finalize()\n }\n\n /**\n * @deprecated Use {@link getLayouts} instead. `getLayoutList` will\n * be removed in v3.0.0\n */\n getLayoutList() {\n // @ts-expect-error\n return this.getLayouts()\n }\n\n /**\n * @deprecated Use {@link getMembers} instead. `getMemberList` will\n * be removed in v3.0.0\n */\n getMemberList() {\n // @ts-expect-error\n return this.getMembers()\n }\n}\n\nexport const RoomSessionAPI = extendComponent<\n RoomSessionConnection,\n RoomMethods\n>(RoomSessionConnection, {\n audioMute: Rooms.audioMuteMember,\n audioUnmute: Rooms.audioUnmuteMember,\n videoMute: Rooms.videoMuteMember,\n videoUnmute: Rooms.videoUnmuteMember,\n deaf: Rooms.deafMember,\n undeaf: Rooms.undeafMember,\n setInputVolume: Rooms.setInputVolumeMember,\n setOutputVolume: Rooms.setOutputVolumeMember,\n setMicrophoneVolume: Rooms.setInputVolumeMember,\n setSpeakerVolume: Rooms.setOutputVolumeMember,\n setInputSensitivity: Rooms.setInputSensitivityMember,\n removeMember: Rooms.removeMember,\n getMembers: Rooms.getMembers,\n getLayouts: Rooms.getLayouts,\n setLayout: Rooms.setLayout,\n hideVideoMuted: Rooms.hideVideoMuted,\n showVideoMuted: Rooms.showVideoMuted,\n getRecordings: Rooms.getRecordings,\n startRecording: Rooms.startRecording,\n getPlaybacks: Rooms.getPlaybacks,\n play: Rooms.play,\n setHideVideoMuted: Rooms.setHideVideoMuted,\n})\n\ntype RoomSessionObjectEventsHandlerMapping = RoomSessionObjectEvents &\n BaseConnectionStateEventTypes\n\n/** @internal */\nexport const createBaseRoomSessionObject = <RoomSessionType>(\n params: BaseComponentOptions<RoomSessionObjectEventsHandlerMapping>\n): BaseRoomSession<RoomSessionType> => {\n const room = connect<\n RoomSessionObjectEventsHandlerMapping,\n RoomSessionConnection,\n BaseRoomSession<RoomSessionType>\n >({\n store: params.store,\n customSagas: params.customSagas,\n Component: RoomSessionAPI,\n componentListeners: ROOM_COMPONENT_LISTENERS,\n })(params)\n\n return room\n}\n", "export const ROOM_COMPONENT_LISTENERS = {\n state: 'onStateChange',\n remoteSDP: 'onRemoteSDP',\n roomId: 'onRoomSubscribed',\n videoConstraints: 'onVideoConstraints',\n audioConstraints: 'onAudioConstraints',\n errors: 'onError',\n responses: 'onSuccess',\n}\n\nexport const SCREENSHARE_AUDIO_CONSTRAINTS: MediaTrackConstraints = {\n echoCancellation: false,\n noiseSuppression: false,\n autoGainControl: false,\n // @ts-expect-error\n googAutoGainControl: false,\n}\n", "import {\n Rooms,\n extendComponent,\n BaseConnectionContract,\n AssertSameType,\n} from '@signalwire/core'\nimport {\n BaseConnection,\n BaseConnectionStateEventTypes,\n} from '@signalwire/webrtc'\nimport { RoomSessionScreenShareDocs } from './RoomSessionScreenShare.docs'\nimport { RoomScreenShareMethods } from './utils/interfaces'\n\n/** @deprecated Use {@link RoomSessionScreenShare} instead */\nexport interface RoomScreenShare extends RoomSessionScreenShare {}\ninterface RoomSessionScreenShareMain\n extends RoomScreenShareMethods,\n BaseConnectionContract<BaseConnectionStateEventTypes> {\n join(): Promise<void>\n leave(): Promise<void>\n}\n\n/**\n * Represents a screen sharing.\n */\nexport interface RoomSessionScreenShare\n extends AssertSameType<\n RoomSessionScreenShareMain,\n RoomSessionScreenShareDocs\n > {}\n\nexport class RoomSessionScreenShareConnection extends BaseConnection<BaseConnectionStateEventTypes> {\n join() {\n return super.invite()\n }\n\n leave() {\n return super.hangup()\n }\n}\n\nexport const RoomSessionScreenShareAPI = extendComponent<\n RoomSessionScreenShareConnection,\n RoomScreenShareMethods\n>(RoomSessionScreenShareConnection, {\n audioMute: Rooms.audioMuteMember,\n audioUnmute: Rooms.audioUnmuteMember,\n videoMute: Rooms.videoMuteMember,\n videoUnmute: Rooms.videoUnmuteMember,\n setMicrophoneVolume: Rooms.setInputVolumeMember,\n setInputVolume: Rooms.setInputVolumeMember,\n setInputSensitivity: Rooms.setInputSensitivityMember,\n})\n", "import {\n Rooms,\n extendComponent,\n BaseConnectionContract,\n AssertSameType,\n} from '@signalwire/core'\nimport {\n BaseConnection,\n BaseConnectionStateEventTypes,\n} from '@signalwire/webrtc'\nimport { RoomSessionDeviceDocs } from './RoomSessionDevice.docs'\nimport { RoomSessionDeviceMethods } from './utils/interfaces'\n\n/** @deprecated Use {@link RoomSessionDevice} instead */\nexport interface RoomDevice extends RoomSessionDevice {}\ninterface RoomSessionDeviceMain\n extends RoomSessionDeviceMethods,\n BaseConnectionContract<BaseConnectionStateEventTypes> {\n join(): Promise<void>\n leave(): Promise<void>\n}\n\n/**\n * A RoomSessionDevice represents a device (such as a microphone or a camera)\n * that is at some point in its lifetime part of a {@link RoomSession}. You can\n * obtain a RoomSessionDevice from the {@link RoomSession} methods\n * {@link RoomSession.addCamera}, {@link RoomSession.addMicrophone}, and\n * {@link RoomSession.addDevice}.\n */\nexport interface RoomSessionDevice\n extends AssertSameType<RoomSessionDeviceMain, RoomSessionDeviceDocs> {}\n\nexport class RoomSessionDeviceConnection extends BaseConnection<BaseConnectionStateEventTypes> {\n join() {\n return super.invite()\n }\n\n leave() {\n return super.hangup()\n }\n}\n\nexport const RoomSessionDeviceAPI = extendComponent<\n RoomSessionDeviceConnection,\n RoomSessionDeviceMethods\n>(RoomSessionDeviceConnection, {\n audioMute: Rooms.audioMuteMember,\n audioUnmute: Rooms.audioUnmuteMember,\n videoMute: Rooms.videoMuteMember,\n videoUnmute: Rooms.videoUnmuteMember,\n setInputVolume: Rooms.setInputVolumeMember,\n setMicrophoneVolume: Rooms.setInputVolumeMember,\n setInputSensitivity: Rooms.setInputSensitivityMember,\n})\n", "import {\n BaseComponentOptions,\n BaseConsumer,\n CantinaRoomEventNames,\n InternalCantinaRoomEventNames,\n connect,\n ConsumerContract,\n EventTransform,\n toExternalJSON,\n CantinaRoomEntity,\n CantinaRoomsSubscribedEventParams,\n} from '@signalwire/core'\n\n/** @internal */\nexport type CantinaManagerEvents = Record<\n CantinaRoomEventNames,\n (room: CantinaRoomEntity) => void\n>\n\n/** @internal */\nexport interface Cantina extends ConsumerContract<CantinaManagerEvents> {}\n\n/** @internal */\nexport class CantinaAPI extends BaseConsumer<CantinaManagerEvents> {\n protected _eventsPrefix = 'cantina-manager' as const\n\n /** @internal */\n getEmitterTransforms() {\n return new Map<\n InternalCantinaRoomEventNames | InternalCantinaRoomEventNames[],\n EventTransform\n >([\n [\n ['cantina-manager.rooms.subscribed'],\n {\n type: 'roomSession',\n // For now we expose the transformed payload and not a RoomSession\n instanceFactory: ({ rooms }: CantinaRoomsSubscribedEventParams) => ({\n rooms: rooms.map((row) => toExternalJSON(row)),\n }),\n payloadTransform: ({ rooms }: CantinaRoomsSubscribedEventParams) => ({\n rooms: rooms.map((row) => toExternalJSON(row)),\n }),\n },\n ],\n [\n [\n 'cantina-manager.room.started',\n 'cantina-manager.room.added',\n 'cantina-manager.room.updated',\n 'cantina-manager.room.ended',\n 'cantina-manager.room.deleted',\n ],\n {\n type: 'roomSession',\n // For now we expose the transformed payload and not a RoomSession\n instanceFactory: (payload) => toExternalJSON(payload),\n payloadTransform: (payload) => toExternalJSON(payload),\n },\n ],\n ])\n }\n}\n\nexport const createCantinaObject = (\n params: BaseComponentOptions<CantinaManagerEvents>\n) => {\n const cantina = connect<CantinaManagerEvents, CantinaAPI, Cantina>({\n store: params.store,\n Component: CantinaAPI,\n componentListeners: {\n errors: 'onError',\n responses: 'onSuccess',\n },\n })(params)\n\n const proxy = new Proxy<Cantina>(cantina, {\n get(\n target: Cantina,\n property: string | symbol,\n receiver: ProxyHandler<Cantina>\n ) {\n if (property === '_eventsNamespace') {\n return ''\n } else if (property === 'eventChannel') {\n return 'cantina-manager.rooms'\n }\n\n return Reflect.get(target, property, receiver)\n },\n })\n return proxy\n}\n", "import { BaseJWTSession } from '@signalwire/core'\n\nexport class JWTSession extends BaseJWTSession {\n public WebSocketConstructor = WebSocket\n public agent = process.env.SDK_PKG_AGENT!\n}\n", "import { CreateRoomObjectOptions, createRoomObject } from './createRoomObject'\n\n/**\n * Using Video.joinRoom() you can automatically join a room.\n *\n * @example\n * With an HTMLDivElement with id=\"root\" in the DOM.\n * ```js\n * // <div id=\"root\"></div>\n *\n * try {\n * const roomObj = await Video.joinRoom({\n * token: '<YourJWT>',\n * rootElementId: 'root',\n * })\n *\n * // You have joined the room..\n * } catch (error) {\n * console.error('Error', error)\n * }\n * ```\n * @deprecated Use {@link RoomSession} instead.\n */\nexport const joinRoom = (roomOptions: CreateRoomObjectOptions) => {\n return createRoomObject({\n ...roomOptions,\n autoJoin: true,\n })\n}\n", "import { UserOptions, AssertSameType, getLogger } from '@signalwire/core'\nimport { createClient } from './createClient'\nimport type { MakeRoomOptions } from './Client'\nimport { BaseRoomSession } from './BaseRoomSession'\nimport { RoomSessionDocs } from './RoomSession.docs'\n\nconst VIDEO_CONSTRAINTS: MediaTrackConstraints = {\n aspectRatio: { ideal: 16 / 9 },\n}\n\n/**\n * List of properties/methods the user shouldn't be able to\n * use until they sucessfully call `roomSession.join()`.\n */\nexport const UNSAFE_PROP_ACCESS = [\n 'audioMute',\n 'audioUnmute',\n 'deaf',\n 'getLayouts',\n 'getMembers',\n 'getRecordings',\n 'hideVideoMuted',\n 'leave',\n 'removerMember',\n 'restoreOutboundAudio',\n 'restoreOutboundVideo',\n 'setInputSensitivity',\n 'setInputVolume',\n 'setLayout',\n 'setOutputVolume',\n 'showVideoMuted',\n 'startRecording',\n 'stopOutboundAudio',\n 'stopOutboundVideo',\n 'undeaf',\n 'videoMute',\n 'videoUnmute',\n 'setMicrophoneVolume',\n 'setSpeakerVolume',\n]\n\nexport interface RoomSessionOptions extends UserOptions, MakeRoomOptions {}\n\ninterface RoomSessionMain extends BaseRoomSession<RoomSessionMain> {\n new (opts: RoomSessionOptions): this\n}\n\n/**\n * A RoomSession allows you to start and control video sessions.\n *\n * For example, the following code joins a video session and listens for new\n * members joining:\n *\n * ```typescript\n * const roomSession = new SignalWire.Video.RoomSession({\n * token: '<YourRoomToken>',\n * rootElement: document.getElementById('myVideoElement'),\n * audio: true,\n * video: true,\n * })\n *\n * roomSession.on('member.joined', (e) => {\n * console.log(`${e.member.name} joined`)\n * })\n *\n * roomSession.join()\n * ```\n *\n * ## Events\n *\n * Please see {@link RoomSessionEvents} for the list of events emitted by a\n * RoomSession object.\n */\nexport interface RoomSession\n extends AssertSameType<RoomSessionMain, RoomSessionDocs<RoomSessionMain>> {}\n\n/**\n * @ignore\n * @privateRemarks\n *\n * The use of a function expression as a contructor instead\n * of a class was picked because it made a couple things\n * simpler for this use case.\n * 1. Making classes behave as factories can be tricky when\n * working with TypeScript since it's non trivial to\n * switch the type returned by the constructor\n * 2. It also generates more verbose code (once transpiled)\n * if we want to have private fields to store `room` and\n * `client`.\n */\nexport const RoomSession = function (roomOptions: RoomSessionOptions) {\n const {\n audio = true,\n video = true,\n iceServers,\n rootElement,\n applyLocalVideoOverlay = true,\n stopCameraWhileMuted = true,\n stopMicrophoneWhileMuted = true,\n speakerId,\n ...userOptions\n } = roomOptions\n\n const client = createClient<RoomSession>(userOptions)\n const room = client.rooms.makeRoomObject({\n audio,\n video: video === true ? VIDEO_CONSTRAINTS : video,\n negotiateAudio: true,\n negotiateVideo: true,\n iceServers,\n rootElement,\n applyLocalVideoOverlay,\n stopCameraWhileMuted,\n stopMicrophoneWhileMuted,\n speakerId,\n })\n\n // WebRTC connection left the room.\n room.once('destroy', () => {\n client.disconnect()\n })\n\n const join = () => {\n return new Promise(async (resolve, reject) => {\n try {\n await client.connect()\n\n room.once('room.subscribed', () => {\n resolve(room)\n })\n\n await room.join()\n } catch (error) {\n getLogger().error('RoomSession Join', error)\n reject(error)\n }\n })\n }\n\n return new Proxy<Omit<RoomSession, 'new'>>(room, {\n get(target: RoomSession, prop: any, receiver: any) {\n if (prop === 'join') {\n return join\n }\n\n if (!target.active && UNSAFE_PROP_ACCESS.includes(prop)) {\n throw new Error(\n `Tried to access the property/method \"${prop}\" before the room was connected. Please call roomSession.join() first.`\n )\n }\n\n return Reflect.get(target, prop, receiver)\n },\n })\n // For consistency with other constructors we'll make TS force the use of `new`\n} as unknown as { new (roomOptions: RoomSessionOptions): RoomSession }\n", "export {\n getDevices,\n getCameraDevices,\n getMicrophoneDevices,\n getSpeakerDevices,\n getDevicesWithPermissions,\n getCameraDevicesWithPermissions,\n getMicrophoneDevicesWithPermissions,\n getSpeakerDevicesWithPermissions,\n checkPermissions,\n checkCameraPermissions,\n checkMicrophonePermissions,\n checkSpeakerPermissions,\n requestPermissions,\n createDeviceWatcher,\n createCameraDeviceWatcher,\n createMicrophoneDeviceWatcher,\n createSpeakerDeviceWatcher,\n supportsMediaDevices,\n supportsGetUserMedia,\n supportsGetDisplayMedia,\n getUserMedia,\n getDisplayMedia,\n enumerateDevices,\n getSupportedConstraints,\n supportsMediaOutput,\n setMediaElementSinkId,\n stopStream,\n stopTrack,\n} from '@signalwire/webrtc'\n", "export * from './Client'\n", "import type {\n AssertSameType,\n ChatContract,\n ConsumerContract,\n UserOptions,\n Chat as ChatNamespace,\n} from '@signalwire/core'\nimport { getLogger } from '@signalwire/core'\nimport { createClient } from '../createClient'\n\nexport interface ClientApiEvents extends ChatNamespace.BaseChatApiEvents {}\n\nexport interface ClientFullState extends Client {}\ninterface ClientMain\n extends ChatContract,\n Omit<ConsumerContract<ClientApiEvents, ClientFullState>, 'subscribe'> {}\n\ninterface ClientDocs extends ClientMain {}\n\nexport interface Client extends AssertSameType<ClientMain, ClientDocs> {}\n\nexport interface ClientOptions extends UserOptions {}\n\nexport const Client = function (chatOptions: ClientOptions) {\n if ('production' === process.env.NODE_ENV) {\n getLogger().warn(\n '`Chat` is still under development and may change in the future without prior notice.'\n )\n }\n\n const client = createClient<Client>(chatOptions)\n const subscribe: Client['subscribe'] = async (channels) => {\n await client.connect()\n\n return client.chat.subscribe(channels)\n }\n const publish: Client['publish'] = async (params) => {\n await client.connect()\n\n return client.chat.publish(params)\n }\n\n return new Proxy<Client>(client.chat, {\n get(target: Client, prop: keyof Client, receiver: any) {\n if (prop === 'subscribe') {\n return subscribe\n } else if (prop === 'publish') {\n return publish\n }\n\n return Reflect.get(target, prop, receiver)\n },\n })\n // For consistency with other constructors we'll make TS force the use of `new`\n} as unknown as { new (chatOptions: ClientOptions): Client }\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/index.js CHANGED
@@ -79,7 +79,7 @@ var src_exports = {};
79
79
  __export(src_exports, {
80
80
  Video: () => video_exports,
81
81
  WebRTC: () => webrtc_exports,
82
- __sw__PubSub: () => Chat_exports
82
+ __sw__Chat: () => chat_exports
83
83
  });
84
84
 
85
85
  // src/video.ts
@@ -864,7 +864,7 @@ var JWTSession = class extends import_core9.BaseJWTSession {
864
864
  constructor() {
865
865
  super(...arguments);
866
866
  __publicField(this, "WebSocketConstructor", WebSocket);
867
- __publicField(this, "agent", "@signalwire/js/3.7.0-dev.202201061621.3f851e2.0");
867
+ __publicField(this, "agent", "@signalwire/js/3.7.0");
868
868
  }
869
869
  };
870
870
 
@@ -1093,13 +1093,15 @@ __export(webrtc_exports, {
1093
1093
  });
1094
1094
  var import_webrtc5 = require("@signalwire/webrtc");
1095
1095
 
1096
- // src/chat/Chat.ts
1097
- var Chat_exports = {};
1098
- __export(Chat_exports, {
1099
- Chat: () => Chat
1096
+ // src/chat/index.ts
1097
+ var chat_exports = {};
1098
+ __export(chat_exports, {
1099
+ Client: () => Client2
1100
1100
  });
1101
+
1102
+ // src/chat/Client.ts
1101
1103
  var import_core13 = require("@signalwire/core");
1102
- var Chat = function(chatOptions) {
1104
+ var Client2 = function(chatOptions) {
1103
1105
  if (process.env.NODE_ENV === "production") {
1104
1106
  (0, import_core13.getLogger)().warn("`Chat` is still under development and may change in the future without prior notice.");
1105
1107
  }