@signalwire/js 3.23.3 → 3.23.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/dist/core/src/BaseClient.d.ts.map +1 -1
  2. package/dist/core/src/BaseComponent.d.ts +8 -114
  3. package/dist/core/src/BaseComponent.d.ts.map +1 -1
  4. package/dist/core/src/BaseConsumer.d.ts +2 -2
  5. package/dist/core/src/BaseConsumer.d.ts.map +1 -1
  6. package/dist/core/src/BaseSession.d.ts.map +1 -1
  7. package/dist/core/src/RPCMessages/RPCConnect.d.ts +1 -0
  8. package/dist/core/src/RPCMessages/RPCConnect.d.ts.map +1 -1
  9. package/dist/core/src/chat/BaseChat.d.ts +5 -6
  10. package/dist/core/src/chat/BaseChat.d.ts.map +1 -1
  11. package/dist/core/src/chat/workers/chatWorker.d.ts.map +1 -1
  12. package/dist/core/src/index.d.ts +4 -5
  13. package/dist/core/src/index.d.ts.map +1 -1
  14. package/dist/core/src/memberPosition/workers.d.ts +1 -1
  15. package/dist/core/src/memberPosition/workers.d.ts.map +1 -1
  16. package/dist/core/src/pubSub/BasePubSub.d.ts +8 -9
  17. package/dist/core/src/pubSub/BasePubSub.d.ts.map +1 -1
  18. package/dist/core/src/pubSub/workers/pubSubWorker.d.ts.map +1 -1
  19. package/dist/core/src/redux/actions.d.ts +0 -9
  20. package/dist/core/src/redux/actions.d.ts.map +1 -1
  21. package/dist/core/src/redux/features/session/sessionSaga.d.ts +2 -3
  22. package/dist/core/src/redux/features/session/sessionSaga.d.ts.map +1 -1
  23. package/dist/core/src/redux/index.d.ts +1 -0
  24. package/dist/core/src/redux/index.d.ts.map +1 -1
  25. package/dist/core/src/redux/interfaces.d.ts +0 -1
  26. package/dist/core/src/redux/interfaces.d.ts.map +1 -1
  27. package/dist/core/src/redux/rootSaga.d.ts +10 -10
  28. package/dist/core/src/redux/rootSaga.d.ts.map +1 -1
  29. package/dist/core/src/redux/utils/useInstanceMap.d.ts +6 -0
  30. package/dist/core/src/redux/utils/useInstanceMap.d.ts.map +1 -0
  31. package/dist/core/src/redux/utils/useSession.d.ts +16 -0
  32. package/dist/core/src/redux/utils/useSession.d.ts.map +1 -0
  33. package/dist/core/src/rooms/RoomSessionPlayback.d.ts +20 -3
  34. package/dist/core/src/rooms/RoomSessionPlayback.d.ts.map +1 -1
  35. package/dist/core/src/rooms/RoomSessionRecording.d.ts +18 -5
  36. package/dist/core/src/rooms/RoomSessionRecording.d.ts.map +1 -1
  37. package/dist/core/src/rooms/RoomSessionStream.d.ts +19 -5
  38. package/dist/core/src/rooms/RoomSessionStream.d.ts.map +1 -1
  39. package/dist/core/src/rooms/index.d.ts +0 -4
  40. package/dist/core/src/rooms/index.d.ts.map +1 -1
  41. package/dist/core/src/rooms/methods.d.ts +6 -2
  42. package/dist/core/src/rooms/methods.d.ts.map +1 -1
  43. package/dist/core/src/testUtils.d.ts +3 -2
  44. package/dist/core/src/testUtils.d.ts.map +1 -1
  45. package/dist/core/src/types/chat.d.ts +0 -1
  46. package/dist/core/src/types/chat.d.ts.map +1 -1
  47. package/dist/core/src/types/index.d.ts +2 -0
  48. package/dist/core/src/types/index.d.ts.map +1 -1
  49. package/dist/core/src/types/messaging.d.ts +0 -1
  50. package/dist/core/src/types/messaging.d.ts.map +1 -1
  51. package/dist/core/src/types/pubSub.d.ts +0 -1
  52. package/dist/core/src/types/pubSub.d.ts.map +1 -1
  53. package/dist/core/src/types/video.d.ts +8 -7
  54. package/dist/core/src/types/video.d.ts.map +1 -1
  55. package/dist/core/src/types/videoRoomDevice.d.ts +6 -4
  56. package/dist/core/src/types/videoRoomDevice.d.ts.map +1 -1
  57. package/dist/core/src/types/videoRoomSession.d.ts +9 -0
  58. package/dist/core/src/types/videoRoomSession.d.ts.map +1 -1
  59. package/dist/core/src/types/voiceCall.d.ts +16 -5
  60. package/dist/core/src/types/voiceCall.d.ts.map +1 -1
  61. package/dist/core/src/utils/eventUtils.d.ts +2 -0
  62. package/dist/core/src/utils/eventUtils.d.ts.map +1 -0
  63. package/dist/core/src/utils/eventUtils.test.d.ts +2 -0
  64. package/dist/core/src/utils/eventUtils.test.d.ts.map +1 -0
  65. package/dist/core/src/utils/index.d.ts +3 -2
  66. package/dist/core/src/utils/index.d.ts.map +1 -1
  67. package/dist/core/src/utils/interfaces.d.ts +9 -117
  68. package/dist/core/src/utils/interfaces.d.ts.map +1 -1
  69. package/dist/index.esm.js +365 -320
  70. package/dist/index.esm.js.map +3 -3
  71. package/dist/index.js +366 -342
  72. package/dist/index.js.map +3 -3
  73. package/dist/index.umd.js +3 -3
  74. package/dist/index.umd.js.map +1 -1
  75. package/dist/js/src/BaseRoomSession.d.ts +5 -15
  76. package/dist/js/src/BaseRoomSession.d.ts.map +1 -1
  77. package/dist/js/src/Client.d.ts.map +1 -1
  78. package/dist/js/src/RoomSession.d.ts.map +1 -1
  79. package/dist/js/src/cantina/VideoManager.d.ts +4 -5
  80. package/dist/js/src/cantina/VideoManager.d.ts.map +1 -1
  81. package/dist/js/src/cantina/workers/index.d.ts +2 -0
  82. package/dist/js/src/cantina/workers/index.d.ts.map +1 -0
  83. package/dist/js/src/cantina/workers/videoManagerRoomWorker.d.ts +4 -0
  84. package/dist/js/src/cantina/workers/videoManagerRoomWorker.d.ts.map +1 -0
  85. package/dist/js/src/cantina/workers/videoManagerRoomsWorker.d.ts +4 -0
  86. package/dist/js/src/cantina/workers/videoManagerRoomsWorker.d.ts.map +1 -0
  87. package/dist/js/src/cantina/workers/videoManagerWorker.d.ts +7 -0
  88. package/dist/js/src/cantina/workers/videoManagerWorker.d.ts.map +1 -0
  89. package/dist/js/src/createRoomObject.d.ts.map +1 -1
  90. package/dist/js/src/fabric/WSClient.d.ts.map +1 -1
  91. package/dist/js/src/features/mediaElements/mediaElementsSagas.d.ts.map +1 -1
  92. package/dist/js/src/testUtils.d.ts +2 -0
  93. package/dist/js/src/testUtils.d.ts.map +1 -1
  94. package/dist/js/src/utils/interfaces.d.ts +2 -2
  95. package/dist/js/src/utils/interfaces.d.ts.map +1 -1
  96. package/dist/js/src/utils/videoElement.d.ts.map +1 -1
  97. package/dist/js/src/video/childMemberJoinedWorker.d.ts.map +1 -1
  98. package/dist/js/src/video/memberListUpdatedWorker.d.ts.map +1 -1
  99. package/dist/js/src/video/videoPlaybackWorker.d.ts +4 -0
  100. package/dist/js/src/video/videoPlaybackWorker.d.ts.map +1 -0
  101. package/dist/js/src/video/videoRecordWorker.d.ts +4 -0
  102. package/dist/js/src/video/videoRecordWorker.d.ts.map +1 -0
  103. package/dist/js/src/video/videoStreamWorker.d.ts +4 -0
  104. package/dist/js/src/video/videoStreamWorker.d.ts.map +1 -0
  105. package/dist/js/src/video/videoWorker.d.ts +7 -0
  106. package/dist/js/src/video/videoWorker.d.ts.map +1 -0
  107. package/dist/js/src/video/workers.d.ts +1 -1
  108. package/dist/js/src/video/workers.d.ts.map +1 -1
  109. package/dist/js/tsconfig.build.tsbuildinfo +1 -1
  110. package/dist/webrtc/src/BaseConnection.d.ts +4 -5
  111. package/dist/webrtc/src/BaseConnection.d.ts.map +1 -1
  112. package/dist/webrtc/src/RTCPeer.d.ts +1 -1
  113. package/dist/webrtc/src/RTCPeer.d.ts.map +1 -1
  114. package/dist/webrtc/src/workers/roomSubscribedWorker.d.ts.map +1 -1
  115. package/dist/webrtc/src/workers/vertoEventWorker.d.ts.map +1 -1
  116. package/package.json +4 -4
  117. package/src/BaseRoomSession.test.ts +4 -6
  118. package/src/BaseRoomSession.ts +47 -211
  119. package/src/Client.ts +1 -11
  120. package/src/RoomSession.ts +5 -5
  121. package/src/RoomSessionDevice.test.ts +0 -1
  122. package/src/RoomSessionScreenShare.test.ts +0 -1
  123. package/src/cantina/VideoManager.test.ts +0 -2
  124. package/src/cantina/VideoManager.ts +10 -51
  125. package/src/cantina/workers/index.ts +1 -0
  126. package/src/cantina/workers/videoManagerRoomWorker.ts +28 -0
  127. package/src/cantina/workers/videoManagerRoomsWorker.ts +33 -0
  128. package/src/cantina/workers/videoManagerWorker.ts +64 -0
  129. package/src/createRoomObject.ts +0 -1
  130. package/src/fabric/WSClient.ts +1 -2
  131. package/src/features/mediaElements/mediaElementsSagas.ts +7 -3
  132. package/src/utils/interfaces.ts +4 -2
  133. package/src/utils/videoElement.ts +1 -0
  134. package/src/video/childMemberJoinedWorker.test.ts +11 -12
  135. package/src/video/childMemberJoinedWorker.ts +0 -9
  136. package/src/video/memberListUpdatedWorker.ts +15 -15
  137. package/src/video/videoPlaybackWorker.ts +54 -0
  138. package/src/video/videoRecordWorker.ts +54 -0
  139. package/src/video/videoStreamWorker.ts +48 -0
  140. package/src/video/videoWorker.ts +96 -0
  141. package/src/video/workers.ts +1 -1
  142. package/dist/core/src/ApplyEventListeners.d.ts +0 -11
  143. package/dist/core/src/ApplyEventListeners.d.ts.map +0 -1
  144. package/dist/core/src/redux/features/pubSub/pubSubSaga.d.ts +0 -10
  145. package/dist/core/src/redux/features/pubSub/pubSubSaga.d.ts.map +0 -1
  146. package/dist/core/src/redux/features/pubSub/pubSubSaga.test.d.ts +0 -2
  147. package/dist/core/src/redux/features/pubSub/pubSubSaga.test.d.ts.map +0 -1
  148. package/dist/core/src/redux/features/session/sessionSaga.test.d.ts +0 -2
  149. package/dist/core/src/redux/features/session/sessionSaga.test.d.ts.map +0 -1
  150. package/dist/core/src/rooms/RoomSessionRTPlayback.d.ts +0 -47
  151. package/dist/core/src/rooms/RoomSessionRTPlayback.d.ts.map +0 -1
  152. package/dist/core/src/rooms/RoomSessionRTPlayback.test.d.ts +0 -2
  153. package/dist/core/src/rooms/RoomSessionRTPlayback.test.d.ts.map +0 -1
  154. package/dist/core/src/rooms/RoomSessionRTRecording.d.ts +0 -37
  155. package/dist/core/src/rooms/RoomSessionRTRecording.d.ts.map +0 -1
  156. package/dist/core/src/rooms/RoomSessionRTRecording.test.d.ts +0 -2
  157. package/dist/core/src/rooms/RoomSessionRTRecording.test.d.ts.map +0 -1
  158. package/dist/core/src/rooms/RoomSessionRTStream.d.ts +0 -36
  159. package/dist/core/src/rooms/RoomSessionRTStream.d.ts.map +0 -1
  160. package/dist/core/src/rooms/RoomSessionRTStream.test.d.ts +0 -2
  161. package/dist/core/src/rooms/RoomSessionRTStream.test.d.ts.map +0 -1
  162. package/dist/core/src/rooms/methodsRT.d.ts +0 -65
  163. package/dist/core/src/rooms/methodsRT.d.ts.map +0 -1
  164. package/dist/core/src/utils/eventTransformUtils.d.ts +0 -16
  165. package/dist/core/src/utils/eventTransformUtils.d.ts.map +0 -1
  166. package/dist/core/src/utils/eventTransformUtils.test.d.ts +0 -2
  167. package/dist/core/src/utils/eventTransformUtils.test.d.ts.map +0 -1
  168. package/dist/core/src/utils/proxyUtils.d.ts +0 -17
  169. package/dist/core/src/utils/proxyUtils.d.ts.map +0 -1
  170. package/dist/js/src/cantina/workers.d.ts +0 -4
  171. package/dist/js/src/cantina/workers.d.ts.map +0 -1
  172. package/dist/js/src/video/memberPositionWorker.d.ts +0 -3
  173. package/dist/js/src/video/memberPositionWorker.d.ts.map +0 -1
  174. package/src/cantina/workers.ts +0 -28
  175. package/src/video/memberPositionWorker.ts +0 -15
package/dist/index.esm.js CHANGED
@@ -143,7 +143,7 @@ __export(video_exports, {
143
143
  });
144
144
 
145
145
  // src/createRoomObject.ts
146
- import { getLogger as getLogger7 } from "@signalwire/core";
146
+ import { getLogger as getLogger13 } from "@signalwire/core";
147
147
 
148
148
  // src/createClient.ts
149
149
  import {
@@ -164,7 +164,8 @@ import {
164
164
  import {
165
165
  getLogger as getLogger2,
166
166
  actions as actions2,
167
- sagaEffects
167
+ sagaEffects,
168
+ LOCAL_EVENT_PREFIX
168
169
  } from "@signalwire/core";
169
170
  import { setMediaElementSinkId } from "@signalwire/webrtc";
170
171
 
@@ -249,6 +250,7 @@ var makeLayoutChangedHandler = ({ localOverlay, rootElement }) => async ({ layou
249
250
  localVideo.style.width = "100%";
250
251
  localVideo.style.height = "100%";
251
252
  localVideo.style.pointerEvents = "none";
253
+ localVideo.style.objectFit = "cover";
252
254
  myLayer.appendChild(localVideo);
253
255
  const mcuLayers = rootElement.querySelector(".mcuLayers");
254
256
  const exists = mcuLayers == null ? void 0 : mcuLayers.querySelector(`#${myLayer.id}`);
@@ -437,7 +439,7 @@ var makeVideoElementSaga = ({
437
439
  localOverlay.hide();
438
440
  }
439
441
  };
440
- room.on("_internal.mirror.video", (value) => {
442
+ room.on(`${LOCAL_EVENT_PREFIX}.mirror.video`, (value) => {
441
443
  localOverlay.setLocalOverlayMirror(value);
442
444
  });
443
445
  room.on("layout.changed", (params) => {
@@ -553,7 +555,7 @@ function* audioElementActionsWatcher({
553
555
  switch (action.type) {
554
556
  case setSpeakerActionType:
555
557
  const response = yield sagaEffects.call(setMediaElementSinkId, element, action.payload);
556
- room.emit("_internal.speaker.updated", action.payload);
558
+ room.emit(`${LOCAL_EVENT_PREFIX}.speaker.updated`, action.payload);
557
559
  room.settleCustomSagaTrigger({
558
560
  dispatchId: action.dispatchId,
559
561
  payload: response,
@@ -661,11 +663,10 @@ function* videoElementSetupWorker({
661
663
  // src/BaseRoomSession.ts
662
664
  import {
663
665
  connect,
664
- Rooms as Rooms3,
666
+ Rooms as Rooms6,
665
667
  extendComponent as extendComponent3,
666
- toLocalEvent,
667
- toExternalJSON,
668
- MemberPosition as MemberPosition2
668
+ LOCAL_EVENT_PREFIX as LOCAL_EVENT_PREFIX2,
669
+ validateEventsToSubscribe as validateEventsToSubscribe2
669
670
  } from "@signalwire/core";
670
671
  import {
671
672
  getDisplayMedia,
@@ -740,7 +741,7 @@ import {
740
741
  } from "@signalwire/core";
741
742
  var noop = () => {
742
743
  };
743
- var EXTERNAL_MEMBER_LIST_UPDATED_EVENT = "video.memberList.updated";
744
+ var EXTERNAL_MEMBER_LIST_UPDATED_EVENT = "memberList.updated";
744
745
  var INTERNAL_MEMBER_LIST_UPDATED_EVENT = toInternalEventName({
745
746
  event: EXTERNAL_MEMBER_LIST_UPDATED_EVENT
746
747
  });
@@ -760,7 +761,7 @@ var getMemberListEventsToSubscribe = (subscriptions) => {
760
761
  });
761
762
  };
762
763
  var shouldHandleMemberList = (subscriptions) => {
763
- return subscriptions.some((event) => event.includes(INTERNAL_MEMBER_LIST_UPDATED_EVENT));
764
+ return subscriptions.some((event) => event.includes(EXTERNAL_MEMBER_LIST_UPDATED_EVENT));
764
765
  };
765
766
  var getMembersFromAction = (action) => {
766
767
  if (action.type === "video.room.joined") {
@@ -803,7 +804,8 @@ var initMemberListSubscriptions = (room, subscriptions) => {
803
804
  };
804
805
  };
805
806
  function* membersListUpdatedWatcher({
806
- pubSubChannel
807
+ swEventChannel,
808
+ instance
807
809
  }) {
808
810
  const memberList = /* @__PURE__ */ new Map();
809
811
  function* worker(pubSubAction) {
@@ -813,20 +815,17 @@ function* membersListUpdatedWatcher({
813
815
  room_session_id: roomSessionId,
814
816
  members
815
817
  };
816
- yield sagaEffects2.put(pubSubChannel, {
817
- type: SYNTHETIC_MEMBER_LIST_UPDATED_EVENT,
818
- payload: memberListPayload
819
- });
818
+ instance.emit(SYNTHETIC_MEMBER_LIST_UPDATED_EVENT, memberListPayload);
820
819
  }
821
820
  while (true) {
822
- const pubSubAction = yield sagaEffects2.take(pubSubChannel, ({ type }) => {
821
+ const pubSubAction = yield sagaEffects2.take(swEventChannel, ({ type }) => {
823
822
  return isMemberListEvent(type);
824
823
  });
825
824
  yield sagaEffects2.fork(worker, pubSubAction);
826
825
  }
827
826
  }
828
827
  var memberListUpdatedWorker = function* membersChangedWorker({
829
- channels: { pubSubChannel },
828
+ channels: { swEventChannel },
830
829
  instance
831
830
  }) {
832
831
  const subscriptions = instance.getSubscriptions();
@@ -835,29 +834,18 @@ var memberListUpdatedWorker = function* membersChangedWorker({
835
834
  }
836
835
  const { cleanup } = initMemberListSubscriptions(instance, subscriptions);
837
836
  yield sagaEffects2.fork(membersListUpdatedWatcher, {
838
- pubSubChannel
837
+ swEventChannel,
838
+ instance
839
839
  });
840
840
  instance.once("destroy", () => {
841
841
  cleanup();
842
842
  });
843
843
  };
844
844
 
845
- // src/video/memberPositionWorker.ts
846
- import {
847
- MemberPosition,
848
- sagaEffects as sagaEffects3
849
- } from "@signalwire/core";
850
- var memberPositionWorker = function* memberPositionWorker2(options) {
851
- if (!options.initialState) {
852
- throw new Error("[memberPositionWorker] Missing initialState");
853
- }
854
- yield sagaEffects3.fork(MemberPosition.memberPositionWorker, options);
855
- };
856
-
857
845
  // src/video/childMemberJoinedWorker.ts
858
846
  import {
859
847
  getLogger as getLogger3,
860
- sagaEffects as sagaEffects4,
848
+ sagaEffects as sagaEffects3,
861
849
  componentSelectors,
862
850
  componentActions
863
851
  } from "@signalwire/core";
@@ -869,7 +857,7 @@ var childMemberJoinedWorker = function* (options) {
869
857
  if (!parentId) {
870
858
  throw new Error("Missing parentId for childMemberJoinedWorker");
871
859
  }
872
- const action = yield sagaEffects4.take(swEventChannel, (action2) => {
860
+ const action = yield sagaEffects3.take(swEventChannel, (action2) => {
873
861
  if (action2.type === "video.member.joined") {
874
862
  return action2.payload.member.parent_id === parentId;
875
863
  }
@@ -877,14 +865,12 @@ var childMemberJoinedWorker = function* (options) {
877
865
  });
878
866
  const { member } = action.payload;
879
867
  if (member == null ? void 0 : member.parent_id) {
880
- const byId = yield sagaEffects4.select(componentSelectors.getComponentsById);
868
+ const byId = yield sagaEffects3.select(componentSelectors.getComponentsById);
881
869
  const parent = Object.values(byId).find((row) => {
882
870
  return "memberId" in row && row.memberId === member.parent_id;
883
871
  });
884
872
  if (parent) {
885
- instance._attachListeners(member.id);
886
- instance.applyEmitterTransforms();
887
- yield sagaEffects4.put(componentActions.upsert({
873
+ yield sagaEffects3.put(componentActions.upsert({
888
874
  id: instance.callId,
889
875
  roomId: action.payload.room_id,
890
876
  roomSessionId: action.payload.room_session_id,
@@ -898,6 +884,193 @@ var childMemberJoinedWorker = function* (options) {
898
884
  getLogger3().trace("childMemberJoinedWorker ended");
899
885
  };
900
886
 
887
+ // src/video/videoWorker.ts
888
+ import {
889
+ getLogger as getLogger7,
890
+ sagaEffects as sagaEffects4,
891
+ MemberPosition,
892
+ stripNamespacePrefix as stripNamespacePrefix3
893
+ } from "@signalwire/core";
894
+
895
+ // src/video/videoStreamWorker.ts
896
+ import {
897
+ getLogger as getLogger4,
898
+ Rooms as Rooms3
899
+ } from "@signalwire/core";
900
+ var videoStreamWorker = function* (options) {
901
+ getLogger4().trace("videoStreamWorker started");
902
+ const {
903
+ instance: roomSession,
904
+ action: { type, payload },
905
+ instanceMap: { get, set, remove }
906
+ } = options;
907
+ let streamInstance = get(payload.stream.id);
908
+ if (!streamInstance) {
909
+ streamInstance = Rooms3.createRoomSessionStreamObject({
910
+ store: roomSession.store,
911
+ payload
912
+ });
913
+ } else {
914
+ streamInstance.setPayload(payload);
915
+ }
916
+ set(payload.stream.id, streamInstance);
917
+ switch (type) {
918
+ case "video.stream.started":
919
+ roomSession.emit("stream.started", streamInstance);
920
+ break;
921
+ case "video.stream.ended":
922
+ roomSession.emit("stream.ended", streamInstance);
923
+ remove(payload.stream.id);
924
+ break;
925
+ default:
926
+ getLogger4().warn(`Unknown video.stream event: "${type}"`);
927
+ break;
928
+ }
929
+ getLogger4().trace("videoStreamWorker ended");
930
+ };
931
+
932
+ // src/video/videoRecordWorker.ts
933
+ import {
934
+ getLogger as getLogger5,
935
+ Rooms as Rooms4,
936
+ stripNamespacePrefix
937
+ } from "@signalwire/core";
938
+ var videoRecordWorker = function* (options) {
939
+ getLogger5().trace("videoRecordWorker started");
940
+ const {
941
+ instance: roomSession,
942
+ action: { type, payload },
943
+ instanceMap: { get, set, remove }
944
+ } = options;
945
+ let recordingInstance = get(payload.recording.id);
946
+ if (!recordingInstance) {
947
+ recordingInstance = Rooms4.createRoomSessionRecordingObject({
948
+ store: roomSession.store,
949
+ payload
950
+ });
951
+ } else {
952
+ recordingInstance.setPayload(payload);
953
+ }
954
+ set(payload.recording.id, recordingInstance);
955
+ const event = stripNamespacePrefix(type);
956
+ switch (type) {
957
+ case "video.recording.started":
958
+ case "video.recording.updated": {
959
+ roomSession.emit(event, recordingInstance);
960
+ break;
961
+ }
962
+ case "video.recording.ended":
963
+ roomSession.emit(event, recordingInstance);
964
+ remove(payload.recording.id);
965
+ break;
966
+ default:
967
+ getLogger5().warn(`Unknown video.stream event: "${type}"`);
968
+ break;
969
+ }
970
+ getLogger5().trace("videoRecordWorker ended");
971
+ };
972
+
973
+ // src/video/videoPlaybackWorker.ts
974
+ import {
975
+ getLogger as getLogger6,
976
+ Rooms as Rooms5,
977
+ stripNamespacePrefix as stripNamespacePrefix2
978
+ } from "@signalwire/core";
979
+ var videoPlaybackWorker = function* (options) {
980
+ getLogger6().trace("videoPlaybackWorker started");
981
+ const {
982
+ instance: roomSession,
983
+ action: { type, payload },
984
+ instanceMap: { get, set, remove }
985
+ } = options;
986
+ let playbackInstance = get(payload.playback.id);
987
+ if (!playbackInstance) {
988
+ playbackInstance = Rooms5.createRoomSessionPlaybackObject({
989
+ store: roomSession.store,
990
+ payload
991
+ });
992
+ } else {
993
+ playbackInstance.setPayload(payload);
994
+ }
995
+ set(payload.playback.id, playbackInstance);
996
+ const event = stripNamespacePrefix2(type);
997
+ switch (type) {
998
+ case "video.playback.started":
999
+ case "video.playback.updated": {
1000
+ roomSession.emit(event, playbackInstance);
1001
+ break;
1002
+ }
1003
+ case "video.playback.ended":
1004
+ roomSession.emit(event, playbackInstance);
1005
+ remove(payload.playback.id);
1006
+ break;
1007
+ default:
1008
+ getLogger6().warn(`Unknown video.stream event: "${type}"`);
1009
+ break;
1010
+ }
1011
+ getLogger6().trace("videoPlaybackWorker ended");
1012
+ };
1013
+
1014
+ // src/video/videoWorker.ts
1015
+ var videoWorker = function* (options) {
1016
+ const { channels, instance: roomSession } = options;
1017
+ const { swEventChannel } = channels;
1018
+ function* worker(action) {
1019
+ const { type, payload } = action;
1020
+ switch (type) {
1021
+ case "video.room.subscribed":
1022
+ yield sagaEffects4.spawn(MemberPosition.memberPositionWorker, __spreadProps(__spreadValues({}, options), {
1023
+ instance: roomSession,
1024
+ initialState: payload
1025
+ }));
1026
+ break;
1027
+ case "video.playback.started":
1028
+ case "video.playback.updated":
1029
+ case "video.playback.ended":
1030
+ yield sagaEffects4.fork(videoPlaybackWorker, __spreadValues({
1031
+ action
1032
+ }, options));
1033
+ return;
1034
+ case "video.recording.started":
1035
+ case "video.recording.updated":
1036
+ case "video.recording.ended":
1037
+ yield sagaEffects4.fork(videoRecordWorker, __spreadValues({
1038
+ action
1039
+ }, options));
1040
+ return;
1041
+ case "video.stream.ended":
1042
+ case "video.stream.started":
1043
+ yield sagaEffects4.fork(videoStreamWorker, __spreadValues({
1044
+ action
1045
+ }, options));
1046
+ return;
1047
+ case "video.room.audience_count": {
1048
+ roomSession.emit("room.audienceCount", payload);
1049
+ return;
1050
+ }
1051
+ case "video.member.talking": {
1052
+ const { member } = payload;
1053
+ if ("talking" in member) {
1054
+ const suffix = member.talking ? "started" : "ended";
1055
+ roomSession.emit(`member.talking.${suffix}`, payload);
1056
+ const deprecatedSuffix = member.talking ? "start" : "stop";
1057
+ roomSession.emit(`member.talking.${deprecatedSuffix}`, payload);
1058
+ }
1059
+ break;
1060
+ }
1061
+ default:
1062
+ break;
1063
+ }
1064
+ roomSession.emit(stripNamespacePrefix3(type), payload);
1065
+ }
1066
+ const isVideoEvent = (action) => action.type.startsWith("video.");
1067
+ while (true) {
1068
+ const action = yield sagaEffects4.take(swEventChannel, isVideoEvent);
1069
+ yield sagaEffects4.fork(worker, action);
1070
+ }
1071
+ getLogger7().trace("videoWorker ended");
1072
+ };
1073
+
901
1074
  // src/BaseRoomSession.ts
902
1075
  var RoomSessionConnection = class extends BaseConnection3 {
903
1076
  constructor(options) {
@@ -907,6 +1080,9 @@ var RoomSessionConnection = class extends BaseConnection3 {
907
1080
  __publicField(this, "_mirrored");
908
1081
  __publicField(this, "_audioEl");
909
1082
  this._mirrored = options.mirrorLocalVideoOverlay;
1083
+ this.runWorker("videoWorker", {
1084
+ worker: videoWorker
1085
+ });
910
1086
  }
911
1087
  get screenShareList() {
912
1088
  return Array.from(this._screenShareList);
@@ -928,173 +1104,11 @@ var RoomSessionConnection = class extends BaseConnection3 {
928
1104
  return (_b = (_a = authState == null ? void 0 : authState.room) == null ? void 0 : _a.scopes) != null ? _b : [];
929
1105
  });
930
1106
  }
931
- getEmitterTransforms() {
932
- return /* @__PURE__ */ new Map([
933
- [
934
- ["video.room.joined"],
935
- {
936
- type: "roomSession",
937
- instanceFactory: () => {
938
- return {};
939
- },
940
- payloadTransform: (payload) => {
941
- return payload;
942
- },
943
- nestedFieldsToProcess: {
944
- recordings: {
945
- eventTransformType: "roomSessionRecording",
946
- processInstancePayload: (payload) => ({ recording: payload })
947
- },
948
- playbacks: {
949
- eventTransformType: "roomSessionPlayback",
950
- processInstancePayload: (payload) => ({ playback: payload })
951
- },
952
- streams: {
953
- eventTransformType: "roomSessionStream",
954
- processInstancePayload: (payload) => ({ stream: payload })
955
- }
956
- }
957
- }
958
- ],
959
- [
960
- [toLocalEvent("video.recording.list")],
961
- {
962
- type: "roomSessionRecordingList",
963
- instanceFactory: (_payload) => {
964
- return {};
965
- },
966
- payloadTransform: (payload) => {
967
- return payload;
968
- },
969
- nestedFieldsToProcess: {
970
- recordings: {
971
- eventTransformType: "roomSessionRecording",
972
- processInstancePayload: (payload) => ({ recording: payload })
973
- }
974
- }
975
- }
976
- ],
977
- [
978
- [toLocalEvent("video.playback.list")],
979
- {
980
- type: "roomSessionPlaybackList",
981
- instanceFactory: (_payload) => {
982
- return {};
983
- },
984
- payloadTransform: (payload) => {
985
- return payload;
986
- },
987
- nestedFieldsToProcess: {
988
- playbacks: {
989
- eventTransformType: "roomSessionPlayback",
990
- processInstancePayload: (payload) => ({ playback: payload })
991
- }
992
- }
993
- }
994
- ],
995
- [
996
- [
997
- toLocalEvent("video.recording.start"),
998
- "video.recording.started",
999
- "video.recording.updated",
1000
- "video.recording.ended"
1001
- ],
1002
- {
1003
- type: "roomSessionRecording",
1004
- instanceFactory: (_payload) => {
1005
- return Rooms3.createRoomSessionRecordingObject({
1006
- store: this.store,
1007
- emitter: this.emitter
1008
- });
1009
- },
1010
- payloadTransform: (payload) => {
1011
- return toExternalJSON(__spreadProps(__spreadValues({}, payload.recording), {
1012
- room_session_id: this.roomSessionId
1013
- }));
1014
- }
1015
- }
1016
- ],
1017
- [
1018
- [
1019
- toLocalEvent("video.playback.start"),
1020
- "video.playback.started",
1021
- "video.playback.updated",
1022
- "video.playback.ended"
1023
- ],
1024
- {
1025
- type: "roomSessionPlayback",
1026
- instanceFactory: (_payload) => {
1027
- return Rooms3.createRoomSessionPlaybackObject({
1028
- store: this.store,
1029
- emitter: this.emitter
1030
- });
1031
- },
1032
- payloadTransform: (payload) => {
1033
- return toExternalJSON(__spreadProps(__spreadValues({}, payload.playback), {
1034
- room_session_id: this.roomSessionId
1035
- }));
1036
- }
1037
- }
1038
- ],
1039
- [
1040
- [toLocalEvent("video.stream.list")],
1041
- {
1042
- type: "roomSessionStreamList",
1043
- instanceFactory: (_payload) => {
1044
- return {};
1045
- },
1046
- payloadTransform: (payload) => {
1047
- return payload;
1048
- },
1049
- nestedFieldsToProcess: {
1050
- streams: {
1051
- eventTransformType: "roomSessionStream",
1052
- processInstancePayload: (payload) => {
1053
- return { stream: payload };
1054
- }
1055
- }
1056
- }
1057
- }
1058
- ],
1059
- [
1060
- [
1061
- toLocalEvent("video.stream.start"),
1062
- "video.stream.started",
1063
- "video.stream.ended"
1064
- ],
1065
- {
1066
- type: "roomSessionStream",
1067
- instanceFactory: (_payload) => {
1068
- return Rooms3.createRoomSessionStreamObject({
1069
- store: this.store,
1070
- emitter: this.emitter
1071
- });
1072
- },
1073
- payloadTransform: (payload) => {
1074
- return toExternalJSON(__spreadProps(__spreadValues({}, payload.stream), {
1075
- room_session_id: this.roomSessionId
1076
- }));
1077
- }
1078
- }
1079
- ]
1080
- ]);
1081
- }
1082
- getCompoundEvents() {
1083
- return new Map([
1084
- ...MemberPosition2.MEMBER_POSITION_COMPOUND_EVENTS
1085
- ]);
1086
- }
1087
1107
  attachPreConnectWorkers() {
1088
1108
  this.runWorker("memberListUpdated", {
1089
1109
  worker: memberListUpdatedWorker
1090
1110
  });
1091
1111
  }
1092
- attachOnSubscribedWorkers(payload) {
1093
- this.runWorker("memberPositionWorker", {
1094
- worker: memberPositionWorker,
1095
- initialState: payload
1096
- });
1097
- }
1098
1112
  async createScreenShareObject(opts = {}) {
1099
1113
  return this.startScreenShare(opts);
1100
1114
  }
@@ -1228,7 +1242,7 @@ var RoomSessionConnection = class extends BaseConnection3 {
1228
1242
  }
1229
1243
  updateSpeaker({ deviceId }) {
1230
1244
  const prevId = this._audioEl.sinkId;
1231
- this.once("_internal.speaker.updated", async (newId) => {
1245
+ this.once(`${LOCAL_EVENT_PREFIX2}.speaker.updated`, async (newId) => {
1232
1246
  const prevSpeaker = await getSpeakerById(prevId);
1233
1247
  const newSpeaker = await getSpeakerById(newId);
1234
1248
  const isSame = (newSpeaker == null ? void 0 : newSpeaker.deviceId) === (prevSpeaker == null ? void 0 : prevSpeaker.deviceId);
@@ -1285,7 +1299,6 @@ var RoomSessionConnection = class extends BaseConnection3 {
1285
1299
  if (this._audioEl)
1286
1300
  return this._audioEl;
1287
1301
  this._audioEl = new Audio();
1288
- console.log("listener attached!");
1289
1302
  this._attachSpeakerTrackListener();
1290
1303
  return this._audioEl;
1291
1304
  }
@@ -1314,49 +1327,53 @@ var RoomSessionConnection = class extends BaseConnection3 {
1314
1327
  mirrored: this._mirrored,
1315
1328
  setMirrored: (value) => {
1316
1329
  this._mirrored = value;
1317
- this.emit("_internal.mirror.video", this._mirrored);
1330
+ this.emit(`${LOCAL_EVENT_PREFIX2}.mirror.video`, this._mirrored);
1318
1331
  }
1319
1332
  };
1320
1333
  }
1334
+ getSubscriptions() {
1335
+ const eventNamesWithPrefix = this.eventNames().map((event) => `video.${event}`);
1336
+ return validateEventsToSubscribe2(eventNamesWithPrefix);
1337
+ }
1321
1338
  };
1322
1339
  var RoomSessionAPI = extendComponent3(RoomSessionConnection, {
1323
- audioMute: Rooms3.audioMuteMember,
1324
- audioUnmute: Rooms3.audioUnmuteMember,
1325
- videoMute: Rooms3.videoMuteMember,
1326
- videoUnmute: Rooms3.videoUnmuteMember,
1327
- deaf: Rooms3.deafMember,
1328
- undeaf: Rooms3.undeafMember,
1329
- setInputVolume: Rooms3.setInputVolumeMember,
1330
- setOutputVolume: Rooms3.setOutputVolumeMember,
1331
- setMicrophoneVolume: Rooms3.setInputVolumeMember,
1332
- setSpeakerVolume: Rooms3.setOutputVolumeMember,
1333
- setInputSensitivity: Rooms3.setInputSensitivityMember,
1334
- removeMember: Rooms3.removeMember,
1335
- removeAllMembers: Rooms3.removeAllMembers,
1336
- getMembers: Rooms3.getMembers,
1337
- getLayouts: Rooms3.getLayouts,
1338
- setLayout: Rooms3.setLayout,
1339
- setPositions: Rooms3.setPositions,
1340
- setMemberPosition: Rooms3.setMemberPosition,
1341
- hideVideoMuted: Rooms3.hideVideoMuted,
1342
- showVideoMuted: Rooms3.showVideoMuted,
1343
- getRecordings: Rooms3.getRecordings,
1344
- startRecording: Rooms3.startRecording,
1345
- getPlaybacks: Rooms3.getPlaybacks,
1346
- play: Rooms3.play,
1347
- setHideVideoMuted: Rooms3.setHideVideoMuted,
1348
- getMeta: Rooms3.getMeta,
1349
- setMeta: Rooms3.setMeta,
1350
- updateMeta: Rooms3.updateMeta,
1351
- deleteMeta: Rooms3.deleteMeta,
1352
- getMemberMeta: Rooms3.getMemberMeta,
1353
- setMemberMeta: Rooms3.setMemberMeta,
1354
- updateMemberMeta: Rooms3.updateMemberMeta,
1355
- deleteMemberMeta: Rooms3.deleteMemberMeta,
1356
- promote: Rooms3.promote,
1357
- demote: Rooms3.demote,
1358
- getStreams: Rooms3.getStreams,
1359
- startStream: Rooms3.startStream
1340
+ audioMute: Rooms6.audioMuteMember,
1341
+ audioUnmute: Rooms6.audioUnmuteMember,
1342
+ videoMute: Rooms6.videoMuteMember,
1343
+ videoUnmute: Rooms6.videoUnmuteMember,
1344
+ deaf: Rooms6.deafMember,
1345
+ undeaf: Rooms6.undeafMember,
1346
+ setInputVolume: Rooms6.setInputVolumeMember,
1347
+ setOutputVolume: Rooms6.setOutputVolumeMember,
1348
+ setMicrophoneVolume: Rooms6.setInputVolumeMember,
1349
+ setSpeakerVolume: Rooms6.setOutputVolumeMember,
1350
+ setInputSensitivity: Rooms6.setInputSensitivityMember,
1351
+ removeMember: Rooms6.removeMember,
1352
+ removeAllMembers: Rooms6.removeAllMembers,
1353
+ getMembers: Rooms6.getMembers,
1354
+ getLayouts: Rooms6.getLayouts,
1355
+ setLayout: Rooms6.setLayout,
1356
+ setPositions: Rooms6.setPositions,
1357
+ setMemberPosition: Rooms6.setMemberPosition,
1358
+ hideVideoMuted: Rooms6.hideVideoMuted,
1359
+ showVideoMuted: Rooms6.showVideoMuted,
1360
+ getRecordings: Rooms6.getRecordings,
1361
+ startRecording: Rooms6.startRecording,
1362
+ getPlaybacks: Rooms6.getPlaybacks,
1363
+ play: Rooms6.play,
1364
+ setHideVideoMuted: Rooms6.setHideVideoMuted,
1365
+ getMeta: Rooms6.getMeta,
1366
+ setMeta: Rooms6.setMeta,
1367
+ updateMeta: Rooms6.updateMeta,
1368
+ deleteMeta: Rooms6.deleteMeta,
1369
+ getMemberMeta: Rooms6.getMemberMeta,
1370
+ setMemberMeta: Rooms6.setMemberMeta,
1371
+ updateMemberMeta: Rooms6.updateMemberMeta,
1372
+ deleteMemberMeta: Rooms6.deleteMemberMeta,
1373
+ promote: Rooms6.promote,
1374
+ demote: Rooms6.demote,
1375
+ getStreams: Rooms6.getStreams,
1376
+ startStream: Rooms6.startStream
1360
1377
  });
1361
1378
  var createBaseRoomSessionObject = (params) => {
1362
1379
  const room = connect({
@@ -1369,67 +1386,97 @@ var createBaseRoomSessionObject = (params) => {
1369
1386
 
1370
1387
  // src/cantina/VideoManager.ts
1371
1388
  import {
1372
- BaseConsumer,
1373
1389
  connect as connect2,
1374
- toExternalJSON as toExternalJSON2
1390
+ validateEventsToSubscribe as validateEventsToSubscribe3,
1391
+ BaseConsumer
1392
+ } from "@signalwire/core";
1393
+
1394
+ // src/cantina/workers/videoManagerWorker.ts
1395
+ import { getLogger as getLogger10, sagaEffects as sagaEffects5 } from "@signalwire/core";
1396
+
1397
+ // src/cantina/workers/videoManagerRoomsWorker.ts
1398
+ import {
1399
+ getLogger as getLogger8,
1400
+ toExternalJSON,
1401
+ stripNamespacePrefix as stripNamespacePrefix4
1375
1402
  } from "@signalwire/core";
1403
+ var videoManagerRoomsWorker = function* (options) {
1404
+ getLogger8().trace("videoManagerRoomsWorker started");
1405
+ const {
1406
+ instance: client,
1407
+ action: { type, payload }
1408
+ } = options;
1409
+ const modPayload = {
1410
+ rooms: payload.rooms.map((row) => toExternalJSON(row))
1411
+ };
1412
+ client.emit(stripNamespacePrefix4(type), modPayload);
1413
+ getLogger8().trace("videoManagerRoomsWorker ended");
1414
+ };
1376
1415
 
1377
- // src/cantina/workers.ts
1378
- import { getLogger as getLogger4, sagaEffects as sagaEffects5 } from "@signalwire/core";
1416
+ // src/cantina/workers/videoManagerRoomWorker.ts
1417
+ import {
1418
+ getLogger as getLogger9,
1419
+ toExternalJSON as toExternalJSON2,
1420
+ stripNamespacePrefix as stripNamespacePrefix5
1421
+ } from "@signalwire/core";
1422
+ var videoManagerRoomWorker = function* (options) {
1423
+ getLogger9().trace("videoManagerRoomWorker started");
1424
+ const {
1425
+ instance: client,
1426
+ action: { type, payload }
1427
+ } = options;
1428
+ client.emit(stripNamespacePrefix5(type), toExternalJSON2(payload));
1429
+ getLogger9().trace("videoManagerRoomWorker ended");
1430
+ };
1431
+
1432
+ // src/cantina/workers/videoManagerWorker.ts
1379
1433
  var videoManagerWorker = function* (options) {
1380
- getLogger4().trace("videoManagerWorker started");
1381
- const { channels } = options;
1382
- const { swEventChannel, pubSubChannel } = channels;
1434
+ getLogger10().trace("videoManagerWorker started");
1435
+ const {
1436
+ channels: { swEventChannel }
1437
+ } = options;
1438
+ function* worker(action) {
1439
+ const { type } = action;
1440
+ switch (type) {
1441
+ case "video-manager.rooms.subscribed":
1442
+ yield sagaEffects5.fork(videoManagerRoomsWorker, __spreadValues({
1443
+ action
1444
+ }, options));
1445
+ break;
1446
+ case "video-manager.room.added":
1447
+ case "video-manager.room.deleted":
1448
+ case "video-manager.room.ended":
1449
+ case "video-manager.room.started":
1450
+ case "video-manager.room.updated":
1451
+ yield sagaEffects5.fork(videoManagerRoomWorker, __spreadValues({
1452
+ action
1453
+ }, options));
1454
+ break;
1455
+ default:
1456
+ getLogger10().warn(`Unknown video-manager event: "${type}"`);
1457
+ break;
1458
+ }
1459
+ }
1383
1460
  while (true) {
1384
1461
  const action = yield sagaEffects5.take(swEventChannel, (action2) => {
1385
1462
  return action2.type.startsWith("video-manager.");
1386
1463
  });
1387
- yield sagaEffects5.put(pubSubChannel, action);
1464
+ yield sagaEffects5.fork(worker, action);
1388
1465
  }
1466
+ getLogger10().trace("videoManagerWorker ended");
1389
1467
  };
1390
1468
 
1391
1469
  // src/cantina/VideoManager.ts
1392
1470
  var VideoManagerAPI = class extends BaseConsumer {
1393
1471
  constructor(options) {
1394
1472
  super(options);
1395
- __publicField(this, "_eventsPrefix", "video-manager");
1396
1473
  this.runWorker("videoManagerWorker", {
1397
1474
  worker: videoManagerWorker
1398
1475
  });
1399
1476
  }
1400
- getEmitterTransforms() {
1401
- return /* @__PURE__ */ new Map([
1402
- [
1403
- ["video-manager.rooms.subscribed"],
1404
- {
1405
- type: "roomSession",
1406
- instanceFactory: ({
1407
- rooms
1408
- }) => ({
1409
- rooms: rooms.map((row) => toExternalJSON2(row))
1410
- }),
1411
- payloadTransform: ({
1412
- rooms
1413
- }) => ({
1414
- rooms: rooms.map((row) => toExternalJSON2(row))
1415
- })
1416
- }
1417
- ],
1418
- [
1419
- [
1420
- "video-manager.room.started",
1421
- "video-manager.room.added",
1422
- "video-manager.room.updated",
1423
- "video-manager.room.ended",
1424
- "video-manager.room.deleted"
1425
- ],
1426
- {
1427
- type: "roomSession",
1428
- instanceFactory: (payload) => toExternalJSON2(payload),
1429
- payloadTransform: (payload) => toExternalJSON2(payload)
1430
- }
1431
- ]
1432
- ]);
1477
+ getSubscriptions() {
1478
+ const eventNamesWithPrefix = this.eventNames().map((event) => `video-manager.${event}`);
1479
+ return validateEventsToSubscribe3(eventNamesWithPrefix);
1433
1480
  }
1434
1481
  };
1435
1482
  var createVideoManagerObject = (params) => {
@@ -1484,7 +1531,6 @@ var ClientAPI = class extends BaseClient {
1484
1531
  }
1485
1532
  const room = createBaseRoomSessionObject(__spreadProps(__spreadValues({}, options), {
1486
1533
  store: this.store,
1487
- emitter: this.emitter,
1488
1534
  customSagas
1489
1535
  }));
1490
1536
  if (stopMicrophoneWhileMuted) {
@@ -1516,8 +1562,7 @@ var ClientAPI = class extends BaseClient {
1516
1562
  get chat() {
1517
1563
  if (!this._chat) {
1518
1564
  this._chat = ChatNamespace.createBaseChatObject({
1519
- store: this.store,
1520
- emitter: this.options.emitter
1565
+ store: this.store
1521
1566
  });
1522
1567
  }
1523
1568
  return this._chat;
@@ -1525,8 +1570,7 @@ var ClientAPI = class extends BaseClient {
1525
1570
  get pubSub() {
1526
1571
  if (!this._pubSub) {
1527
1572
  this._pubSub = PubSubNamespace.createBasePubSubObject({
1528
- store: this.store,
1529
- emitter: this.options.emitter
1573
+ store: this.store
1530
1574
  });
1531
1575
  }
1532
1576
  return this._pubSub;
@@ -1546,12 +1590,12 @@ var ClientAPI = class extends BaseClient {
1546
1590
  import jwtDecode2 from "jwt-decode";
1547
1591
  import {
1548
1592
  BaseJWTSession,
1549
- getLogger as getLogger6
1593
+ getLogger as getLogger12
1550
1594
  } from "@signalwire/core";
1551
1595
 
1552
1596
  // src/utils/storage.ts
1553
1597
  import jwtDecode from "jwt-decode";
1554
- import { getLogger as getLogger5 } from "@signalwire/core";
1598
+ import { getLogger as getLogger11 } from "@signalwire/core";
1555
1599
  var getStorage = () => {
1556
1600
  if (window && window.sessionStorage) {
1557
1601
  return window.sessionStorage;
@@ -1566,7 +1610,7 @@ var sessionStorageManager = (token) => {
1566
1610
  roomName = (_a = jwtPayload == null ? void 0 : jwtPayload.r) != null ? _a : "";
1567
1611
  } catch (e) {
1568
1612
  if (process.env.NODE_ENV !== "production") {
1569
- getLogger5().error("[sessionStorageManager] error decoding JWT", token);
1613
+ getLogger11().error("[sessionStorageManager] error decoding JWT", token);
1570
1614
  }
1571
1615
  roomName = "";
1572
1616
  }
@@ -1593,7 +1637,7 @@ var JWTSession = class extends BaseJWTSession {
1593
1637
  });
1594
1638
  } catch (e) {
1595
1639
  if (process.env.NODE_ENV !== "production") {
1596
- getLogger6().debug("[JWTSession] error decoding the JWT");
1640
+ getLogger12().debug("[JWTSession] error decoding the JWT");
1597
1641
  }
1598
1642
  }
1599
1643
  super(__spreadProps(__spreadValues({}, options), {
@@ -1602,7 +1646,7 @@ var JWTSession = class extends BaseJWTSession {
1602
1646
  this.options = options;
1603
1647
  __publicField(this, "WebSocketConstructor", WebSocket);
1604
1648
  __publicField(this, "CloseEventConstructor", SwCloseEvent);
1605
- __publicField(this, "agent", "@signalwire/js/browser/3.23.3");
1649
+ __publicField(this, "agent", "@signalwire/js/browser/3.23.4");
1606
1650
  __publicField(this, "tokenTyp");
1607
1651
  this.tokenTyp = (_a = decodedJwt.typ) != null ? _a : "VRT";
1608
1652
  }
@@ -1732,7 +1776,7 @@ var createRoomObject = (roomOptions) => {
1732
1776
  rootElement = el;
1733
1777
  } else {
1734
1778
  rootElement = document.body;
1735
- getLogger7().warn(`We couldn't find an element with id: ${rootElementId}: using 'document.body' instead.`);
1779
+ getLogger13().warn(`We couldn't find an element with id: ${rootElementId}: using 'document.body' instead.`);
1736
1780
  }
1737
1781
  }
1738
1782
  const roomObject = client.rooms.makeRoomObject({
@@ -1759,7 +1803,7 @@ var createRoomObject = (roomOptions) => {
1759
1803
  });
1760
1804
  await roomObject.join();
1761
1805
  } catch (error) {
1762
- getLogger7().error("Join", error);
1806
+ getLogger13().error("Join", error);
1763
1807
  client.disconnect();
1764
1808
  reject2(error);
1765
1809
  }
@@ -1795,11 +1839,11 @@ var joinRoom = (roomOptions) => {
1795
1839
 
1796
1840
  // src/RoomSession.ts
1797
1841
  import {
1798
- getLogger as getLogger9
1842
+ getLogger as getLogger15
1799
1843
  } from "@signalwire/core";
1800
1844
 
1801
1845
  // src/utils/roomSession.ts
1802
- import { getLogger as getLogger8 } from "@signalwire/core";
1846
+ import { getLogger as getLogger14 } from "@signalwire/core";
1803
1847
  var getJoinMediaParams = (options) => {
1804
1848
  const {
1805
1849
  authState,
@@ -1810,7 +1854,7 @@ var getJoinMediaParams = (options) => {
1810
1854
  receiveAudio,
1811
1855
  receiveVideo
1812
1856
  } = options;
1813
- getLogger8().debug("getJoinMediaParams options", __spreadValues({}, options));
1857
+ getLogger14().debug("getJoinMediaParams options", __spreadValues({}, options));
1814
1858
  const { audio_allowed, video_allowed, join_as } = authState;
1815
1859
  const joinAs = join_as != null ? join_as : "member";
1816
1860
  const canSend = joinAs === "member";
@@ -1823,16 +1867,16 @@ var getJoinMediaParams = (options) => {
1823
1867
  const reqToReceiveAudio = Boolean(receiveAudio != null ? receiveAudio : audio);
1824
1868
  const reqToReceiveVideo = Boolean(receiveVideo != null ? receiveVideo : video);
1825
1869
  if (!canSendAudio && reqToSendAudio) {
1826
- getLogger8().info("Not allowed to send audio on this room. Default values will be used.");
1870
+ getLogger14().info("Not allowed to send audio on this room. Default values will be used.");
1827
1871
  }
1828
1872
  if (!canSendVideo && reqToSendVideo) {
1829
- getLogger8().info("Not allowed to send video on this room. Default values will be used.");
1873
+ getLogger14().info("Not allowed to send video on this room. Default values will be used.");
1830
1874
  }
1831
1875
  if (!canReceiveAudio && reqToReceiveAudio) {
1832
- getLogger8().info("Not allowed to receive video from the room. Default values will be used.");
1876
+ getLogger14().info("Not allowed to receive video from the room. Default values will be used.");
1833
1877
  }
1834
1878
  if (!canReceiveVideo && reqToReceiveVideo) {
1835
- getLogger8().info("Not allowed to receive video from the room. Default values will be used.");
1879
+ getLogger14().info("Not allowed to receive video from the room. Default values will be used.");
1836
1880
  }
1837
1881
  return {
1838
1882
  mustSendAudio: canSendAudio && reqToSendAudio,
@@ -1882,7 +1926,9 @@ var UNSAFE_PROP_ACCESS = [
1882
1926
  "updateMemberMeta",
1883
1927
  "deleteMemberMeta",
1884
1928
  "promote",
1885
- "demote"
1929
+ "demote",
1930
+ "lock",
1931
+ "unlock"
1886
1932
  ];
1887
1933
  var REQUIRED_EVENTS = [
1888
1934
  "member.joined",
@@ -1923,7 +1969,7 @@ var RoomSession = function(roomOptions) {
1923
1969
  const deprecatedParams = ["audio", "video"];
1924
1970
  deprecatedParams.forEach((param) => {
1925
1971
  if (param in roomOptions) {
1926
- getLogger9().warn(`The '${param}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`);
1972
+ getLogger15().warn(`The '${param}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`);
1927
1973
  }
1928
1974
  });
1929
1975
  const allowReattach = (roomOptions == null ? void 0 : roomOptions.reattach) !== false;
@@ -1981,7 +2027,7 @@ var RoomSession = function(roomOptions) {
1981
2027
  reattachManager.destroy();
1982
2028
  client.disconnect();
1983
2029
  });
1984
- client.once("session.disconnected", () => {
2030
+ client.session.once("session.disconnected", () => {
1985
2031
  room.destroy();
1986
2032
  });
1987
2033
  const join = (params) => {
@@ -1993,7 +2039,7 @@ var RoomSession = function(roomOptions) {
1993
2039
  const audio = (_a2 = params == null ? void 0 : params.audio) != null ? _a2 : audioFromConstructor;
1994
2040
  const video = (_b = params == null ? void 0 : params.video) != null ? _b : videoFromConstructor;
1995
2041
  const authState = client._sessionAuthState;
1996
- getLogger9().debug("getJoinMediaParams authState?", authState);
2042
+ getLogger15().debug("getJoinMediaParams authState?", authState);
1997
2043
  if (authState && authState.type === "video") {
1998
2044
  const mediaOptions = getJoinMediaParams(__spreadValues({
1999
2045
  authState,
@@ -2006,7 +2052,7 @@ var RoomSession = function(roomOptions) {
2006
2052
  ${JSON.stringify(params, null, 2)}
2007
2053
  `));
2008
2054
  }
2009
- getLogger9().debug("Set mediaOptions", mediaOptions);
2055
+ getLogger15().debug("Set mediaOptions", mediaOptions);
2010
2056
  room.updateMediaOptions({
2011
2057
  audio: mediaOptions.mustSendAudio ? audio || true : false,
2012
2058
  video: mediaOptions.mustSendVideo ? video || true : false,
@@ -2014,15 +2060,14 @@ ${JSON.stringify(params, null, 2)}
2014
2060
  negotiateVideo: mediaOptions.mustRecvVideo
2015
2061
  });
2016
2062
  }
2017
- room.once("room.subscribed", (payload) => {
2018
- room.attachOnSubscribedWorkers(payload);
2063
+ room.once("room.subscribed", () => {
2019
2064
  resolve(room);
2020
2065
  });
2021
2066
  reattachManager.init();
2022
2067
  REQUIRED_EVENTS.forEach((event) => room.once(event, noop2));
2023
2068
  await room.join();
2024
2069
  } catch (error) {
2025
- getLogger9().error("RoomSession Join", error);
2070
+ getLogger15().error("RoomSession Join", error);
2026
2071
  client.disconnect();
2027
2072
  reject(error);
2028
2073
  }
@@ -2204,29 +2249,29 @@ var SWClient = class {
2204
2249
  };
2205
2250
 
2206
2251
  // src/fabric/WSClient.ts
2207
- import { getLogger as getLogger11, VertoSubscribe } from "@signalwire/core";
2252
+ import { getLogger as getLogger17, VertoSubscribe } from "@signalwire/core";
2208
2253
 
2209
2254
  // src/fabric/WSClientWorker.ts
2210
2255
  import {
2211
- getLogger as getLogger10,
2256
+ getLogger as getLogger16,
2212
2257
  sagaEffects as sagaEffects6
2213
2258
  } from "@signalwire/core";
2214
2259
  var WSClientWorker = function* (options) {
2215
- getLogger10().debug("WSClientWorker started");
2260
+ getLogger16().debug("WSClientWorker started");
2216
2261
  const { channels, instance } = options;
2217
2262
  const { swEventChannel } = channels;
2218
- getLogger10().debug("WSClientWorker instance", instance);
2263
+ getLogger16().debug("WSClientWorker instance", instance);
2219
2264
  while (true) {
2220
2265
  const action = yield sagaEffects6.take(swEventChannel, (action2) => {
2221
- getLogger10().debug("WSClientWorker action", action2);
2266
+ getLogger16().debug("WSClientWorker action", action2);
2222
2267
  if (action2.type === "webrtc.message") {
2223
2268
  return action2.payload.method === "verto.invite";
2224
2269
  }
2225
2270
  return false;
2226
2271
  });
2227
- getLogger10().debug("Build new call to answer", action);
2272
+ getLogger16().debug("Build new call to answer", action);
2228
2273
  }
2229
- getLogger10().trace("WSClientWorker ended");
2274
+ getLogger16().trace("WSClientWorker ended");
2230
2275
  };
2231
2276
 
2232
2277
  // src/fabric/WSClient.ts
@@ -2234,7 +2279,7 @@ var WSClient = class {
2234
2279
  constructor(options) {
2235
2280
  this.options = options;
2236
2281
  __publicField(this, "wsClient");
2237
- __publicField(this, "logger", getLogger11());
2282
+ __publicField(this, "logger", getLogger17());
2238
2283
  this.wsClient = createClient({
2239
2284
  host: this.options.host,
2240
2285
  token: this.options.token,
@@ -2279,18 +2324,18 @@ var WSClient = class {
2279
2324
  call.start = () => {
2280
2325
  return new Promise(async (resolve2, reject2) => {
2281
2326
  try {
2282
- call.emitter.once("verto.display", () => resolve2(call));
2327
+ call.once("verto.display", () => resolve2(call));
2283
2328
  call.once("room.subscribed", () => resolve2(call));
2284
2329
  await call.join();
2285
2330
  } catch (error) {
2286
- getLogger11().error("WSClient call start", error);
2331
+ getLogger17().error("WSClient call start", error);
2287
2332
  reject2(error);
2288
2333
  }
2289
2334
  });
2290
2335
  };
2291
2336
  resolve(call);
2292
2337
  } catch (error) {
2293
- getLogger11().error("WSClient dial", error);
2338
+ getLogger17().error("WSClient dial", error);
2294
2339
  reject(error);
2295
2340
  }
2296
2341
  });
@@ -2344,10 +2389,10 @@ var WSClient = class {
2344
2389
  nodeId
2345
2390
  });
2346
2391
  call.once("destroy", () => {
2347
- getLogger11().debug("RTC Connection Destroyed");
2392
+ getLogger17().debug("RTC Connection Destroyed");
2348
2393
  });
2349
2394
  call.attachPreConnectWorkers();
2350
- getLogger11().debug("Resolving Call", call);
2395
+ getLogger17().debug("Resolving Call", call);
2351
2396
  resolve({ resultType: "inboundCall", resultObject: call });
2352
2397
  } catch (error) {
2353
2398
  reject(error);