@whereby.com/core 0.26.0 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +102 -16
- package/dist/index.d.cts +258 -9
- package/dist/index.d.mts +258 -9
- package/dist/index.d.ts +258 -9
- package/dist/index.mjs +97 -17
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -23,6 +23,37 @@ function createAppAuthorizedThunk(authorizationSelector, thunk) {
|
|
|
23
23
|
return thunk(payload)(dispatch, getState, extra);
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
+
function createRoomConnectedThunk(thunk) {
|
|
27
|
+
return createAppThunk((payload) => (dispatch, getState, extra) => {
|
|
28
|
+
const connectionStatus = getState().roomConnection.status;
|
|
29
|
+
if (connectionStatus !== "connected") {
|
|
30
|
+
console.warn("Action cannot be performed outside of a connected room");
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return thunk(payload)(dispatch, getState, extra);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function createAsyncRoomConnectedThunk(typePrefix, payloadCreator) {
|
|
37
|
+
return createAppAsyncThunk(typePrefix, (arg, thunkApi) => {
|
|
38
|
+
const { getState } = thunkApi;
|
|
39
|
+
const connectionStatus = getState().roomConnection.status;
|
|
40
|
+
if (connectionStatus !== "connected") {
|
|
41
|
+
console.warn("Action cannot be performed outside of a connected room");
|
|
42
|
+
return Promise.reject("Action cannot be performed outside of a connected room");
|
|
43
|
+
}
|
|
44
|
+
return payloadCreator(arg, thunkApi);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function createAuthorizedRoomConnectedThunk(authorizationSelector, thunk) {
|
|
48
|
+
return createAppThunk((payload) => (dispatch, getState, extra) => {
|
|
49
|
+
const connectionStatus = getState().roomConnection.status;
|
|
50
|
+
if (connectionStatus !== "connected") {
|
|
51
|
+
console.warn("Action cannot be performed outside of a connected room");
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return createAppAuthorizedThunk(authorizationSelector, thunk)(payload)(dispatch, getState, extra);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
26
57
|
|
|
27
58
|
const listenerMiddleware = toolkit.createListenerMiddleware();
|
|
28
59
|
const startAppListening = listenerMiddleware.startListening;
|
|
@@ -45,7 +76,7 @@ const createReactor = (selectors, callback) => {
|
|
|
45
76
|
});
|
|
46
77
|
};
|
|
47
78
|
|
|
48
|
-
const coreVersion = "0.
|
|
79
|
+
const coreVersion = "0.27.1";
|
|
49
80
|
|
|
50
81
|
const initialState$g = {
|
|
51
82
|
isNodeSdk: false,
|
|
@@ -110,6 +141,7 @@ const signalEvents = {
|
|
|
110
141
|
spotlightRemoved: createSignalEventAction("spotlightRemoved"),
|
|
111
142
|
streamingStopped: createSignalEventAction("streamingStopped"),
|
|
112
143
|
videoEnabled: createSignalEventAction("videoEnabled"),
|
|
144
|
+
videoEnableRequested: createSignalEventAction("videoEnableRequested"),
|
|
113
145
|
liveTranscriptionStarted: createSignalEventAction("liveTranscriptionStarted"),
|
|
114
146
|
liveTranscriptionStopped: createSignalEventAction("liveTranscriptionStopped"),
|
|
115
147
|
};
|
|
@@ -117,6 +149,7 @@ const signalEvents = {
|
|
|
117
149
|
const ROOM_ACTION_PERMISSIONS_BY_ROLE = {
|
|
118
150
|
canLockRoom: ["host"],
|
|
119
151
|
canRequestAudioEnable: ["host"],
|
|
152
|
+
canRequestVideoEnable: ["host"],
|
|
120
153
|
canKickClient: ["host"],
|
|
121
154
|
canEndMeeting: ["host"],
|
|
122
155
|
canAskToSpeak: ["host"],
|
|
@@ -150,6 +183,7 @@ const selectRoomKey = (state) => state.authorization.roomKey;
|
|
|
150
183
|
const selectAuthorizationRoleName = (state) => state.authorization.roleName;
|
|
151
184
|
const selectIsAuthorizedToLockRoom = toolkit.createSelector(selectAuthorizationRoleName, (localParticipantRole) => ROOM_ACTION_PERMISSIONS_BY_ROLE.canLockRoom.includes(localParticipantRole));
|
|
152
185
|
const selectIsAuthorizedToRequestAudioEnable = toolkit.createSelector(selectAuthorizationRoleName, (localParticipantRole) => ROOM_ACTION_PERMISSIONS_BY_ROLE.canRequestAudioEnable.includes(localParticipantRole));
|
|
186
|
+
const selectIsAuthorizedToRequestVideoEnable = toolkit.createSelector(selectAuthorizationRoleName, (localParticipantRole) => ROOM_ACTION_PERMISSIONS_BY_ROLE.canRequestVideoEnable.includes(localParticipantRole));
|
|
153
187
|
const selectIsAuthorizedToKickClient = toolkit.createSelector(selectAuthorizationRoleName, (localParticipantRole) => ROOM_ACTION_PERMISSIONS_BY_ROLE.canKickClient.includes(localParticipantRole));
|
|
154
188
|
const selectIsAuthorizedToEndMeeting = toolkit.createSelector(selectAuthorizationRoleName, (localParticipantRole) => ROOM_ACTION_PERMISSIONS_BY_ROLE.canEndMeeting.includes(localParticipantRole));
|
|
155
189
|
const selectIsAuthorizedToAskToSpeak = toolkit.createSelector(selectAuthorizationRoleName, (localParticipantRole) => ROOM_ACTION_PERMISSIONS_BY_ROLE.canAskToSpeak.includes(localParticipantRole));
|
|
@@ -270,6 +304,7 @@ function forwardSocketEvents(socket, dispatch) {
|
|
|
270
304
|
socket.on("spotlight_removed", (payload) => dispatch(signalEvents.spotlightRemoved(payload)));
|
|
271
305
|
socket.on("live_transcription_started", (payload) => dispatch(signalEvents.liveTranscriptionStarted(payload)));
|
|
272
306
|
socket.on("live_transcription_stopped", (payload) => dispatch(signalEvents.liveTranscriptionStopped(payload)));
|
|
307
|
+
socket.on("video_enable_requested", (payload) => dispatch(signalEvents.videoEnableRequested(payload)));
|
|
273
308
|
}
|
|
274
309
|
const SIGNAL_BASE_URL = "wss://signal.appearin.net" ;
|
|
275
310
|
function createSocket() {
|
|
@@ -410,7 +445,7 @@ const chatSlice = toolkit.createSlice({
|
|
|
410
445
|
});
|
|
411
446
|
},
|
|
412
447
|
});
|
|
413
|
-
const doSendChatMessage =
|
|
448
|
+
const doSendChatMessage = createRoomConnectedThunk((payload) => (_, getState) => {
|
|
414
449
|
const state = getState();
|
|
415
450
|
const socket = selectSignalConnectionRaw(state).socket;
|
|
416
451
|
socket === null || socket === void 0 ? void 0 : socket.emit("chat_message", { text: payload.text });
|
|
@@ -455,7 +490,7 @@ const cloudRecordingSlice = toolkit.createSlice({
|
|
|
455
490
|
},
|
|
456
491
|
});
|
|
457
492
|
const { recordingRequestStarted } = cloudRecordingSlice.actions;
|
|
458
|
-
const doStartCloudRecording =
|
|
493
|
+
const doStartCloudRecording = createRoomConnectedThunk(() => (dispatch, getState) => {
|
|
459
494
|
const state = getState();
|
|
460
495
|
const socket = selectSignalConnectionRaw(state).socket;
|
|
461
496
|
const status = selectCloudRecordingStatus(state);
|
|
@@ -467,7 +502,7 @@ const doStartCloudRecording = createAppThunk(() => (dispatch, getState) => {
|
|
|
467
502
|
});
|
|
468
503
|
dispatch(recordingRequestStarted());
|
|
469
504
|
});
|
|
470
|
-
const doStopCloudRecording =
|
|
505
|
+
const doStopCloudRecording = createRoomConnectedThunk(() => (dispatch, getState) => {
|
|
471
506
|
const state = getState();
|
|
472
507
|
const socket = selectSignalConnectionRaw(state).socket;
|
|
473
508
|
socket === null || socket === void 0 ? void 0 : socket.emit("stop_recording");
|
|
@@ -1111,6 +1146,15 @@ startAppListening({
|
|
|
1111
1146
|
}
|
|
1112
1147
|
},
|
|
1113
1148
|
});
|
|
1149
|
+
startAppListening({
|
|
1150
|
+
actionCreator: signalEvents.videoEnableRequested,
|
|
1151
|
+
effect: ({ payload }, { dispatch }) => {
|
|
1152
|
+
const { enable } = payload;
|
|
1153
|
+
if (!enable) {
|
|
1154
|
+
dispatch(toggleCameraEnabled({ enabled: false }));
|
|
1155
|
+
}
|
|
1156
|
+
},
|
|
1157
|
+
});
|
|
1114
1158
|
|
|
1115
1159
|
const NON_PERSON_ROLES = ["recorder", "streamer"];
|
|
1116
1160
|
|
|
@@ -1131,7 +1175,7 @@ const localParticipantSlice = toolkit.createSlice({
|
|
|
1131
1175
|
name: "localParticipant",
|
|
1132
1176
|
initialState: initialState$a,
|
|
1133
1177
|
reducers: {
|
|
1134
|
-
|
|
1178
|
+
setDisplayName: (state, action) => {
|
|
1135
1179
|
return Object.assign(Object.assign({}, state), { displayName: action.payload.displayName });
|
|
1136
1180
|
},
|
|
1137
1181
|
},
|
|
@@ -1155,8 +1199,17 @@ const localParticipantSlice = toolkit.createSlice({
|
|
|
1155
1199
|
});
|
|
1156
1200
|
},
|
|
1157
1201
|
});
|
|
1158
|
-
const {
|
|
1159
|
-
const
|
|
1202
|
+
const { setDisplayName } = localParticipantSlice.actions;
|
|
1203
|
+
const doSetDisplayName = createRoomConnectedThunk((payload) => (dispatch, getState) => {
|
|
1204
|
+
const state = getState();
|
|
1205
|
+
const socket = selectSignalConnectionRaw(state).socket;
|
|
1206
|
+
socket === null || socket === void 0 ? void 0 : socket.emit("send_client_metadata", {
|
|
1207
|
+
type: "UserData",
|
|
1208
|
+
payload: { displayName: payload.displayName },
|
|
1209
|
+
});
|
|
1210
|
+
dispatch(setDisplayName({ displayName: payload.displayName }));
|
|
1211
|
+
});
|
|
1212
|
+
const doEnableAudio = createAsyncRoomConnectedThunk("localParticipant/doEnableAudio", (payload, { dispatch, getState }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1160
1213
|
const state = getState();
|
|
1161
1214
|
const socket = selectSignalConnectionRaw(state).socket;
|
|
1162
1215
|
socket === null || socket === void 0 ? void 0 : socket.emit("enable_audio", { enabled: payload.enabled });
|
|
@@ -1165,13 +1218,13 @@ const doEnableAudio = createAppAsyncThunk("localParticipant/doEnableAudio", (pay
|
|
|
1165
1218
|
}
|
|
1166
1219
|
return payload.enabled;
|
|
1167
1220
|
}));
|
|
1168
|
-
const doEnableVideo =
|
|
1221
|
+
const doEnableVideo = createAsyncRoomConnectedThunk("localParticipant/doEnableVideo", (payload, { getState }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1169
1222
|
const state = getState();
|
|
1170
1223
|
const socket = selectSignalConnectionRaw(state).socket;
|
|
1171
1224
|
socket === null || socket === void 0 ? void 0 : socket.emit("enable_video", { enabled: payload.enabled });
|
|
1172
1225
|
return payload.enabled;
|
|
1173
1226
|
}));
|
|
1174
|
-
const doSetLocalStickyReaction =
|
|
1227
|
+
const doSetLocalStickyReaction = createAsyncRoomConnectedThunk("localParticipant/doSetLocalStickyReaction", (payload, { getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1175
1228
|
var _a;
|
|
1176
1229
|
const state = getState();
|
|
1177
1230
|
const currentStickyReaction = selectLocalParticipantStickyReaction(state);
|
|
@@ -1183,7 +1236,7 @@ const doSetLocalStickyReaction = createAppAsyncThunk("localParticipant/doSetLoca
|
|
|
1183
1236
|
const stickyReaction = enabled ? { reaction: "✋", timestamp: new Date().toISOString() } : null;
|
|
1184
1237
|
return stickyReaction;
|
|
1185
1238
|
}));
|
|
1186
|
-
const doSendClientMetadata =
|
|
1239
|
+
const doSendClientMetadata = createRoomConnectedThunk(() => (_, getState) => {
|
|
1187
1240
|
const state = getState();
|
|
1188
1241
|
const socket = selectSignalConnectionRaw(state).socket;
|
|
1189
1242
|
const payload = {
|
|
@@ -1585,7 +1638,7 @@ const remoteParticipantsSlice = toolkit.createSlice({
|
|
|
1585
1638
|
},
|
|
1586
1639
|
});
|
|
1587
1640
|
const { participantStreamAdded, participantStreamIdAdded, streamStatusUpdated } = remoteParticipantsSlice.actions;
|
|
1588
|
-
const doRequestAudioEnable =
|
|
1641
|
+
const doRequestAudioEnable = createAuthorizedRoomConnectedThunk((state) => selectIsAuthorizedToRequestAudioEnable(state), (payload) => (_, getState) => {
|
|
1589
1642
|
const state = getState();
|
|
1590
1643
|
const canEnableRemoteAudio = selectIsAuthorizedToAskToSpeak(state);
|
|
1591
1644
|
if (payload.enable && !canEnableRemoteAudio) {
|
|
@@ -1595,6 +1648,11 @@ const doRequestAudioEnable = createAppAuthorizedThunk((state) => selectIsAuthori
|
|
|
1595
1648
|
const socket = selectSignalConnectionRaw(state).socket;
|
|
1596
1649
|
socket === null || socket === void 0 ? void 0 : socket.emit("request_audio_enable", payload);
|
|
1597
1650
|
});
|
|
1651
|
+
const doRequestVideoEnable = createAuthorizedRoomConnectedThunk((state) => selectIsAuthorizedToRequestVideoEnable(state), (payload) => (_, getState) => {
|
|
1652
|
+
const state = getState();
|
|
1653
|
+
const socket = selectSignalConnectionRaw(state).socket;
|
|
1654
|
+
socket === null || socket === void 0 ? void 0 : socket.emit("request_video_enable", payload);
|
|
1655
|
+
});
|
|
1598
1656
|
const selectRemoteParticipantsRaw = (state) => state.remoteParticipants;
|
|
1599
1657
|
const selectRemoteClients = (state) => state.remoteParticipants.remoteParticipants;
|
|
1600
1658
|
const selectRemoteParticipants = toolkit.createSelector(selectRemoteClients, (clients) => clients.filter((c) => !NON_PERSON_ROLES.includes(c.roleName)));
|
|
@@ -1632,7 +1690,7 @@ const localScreenshareSlice = toolkit.createSlice({
|
|
|
1632
1690
|
},
|
|
1633
1691
|
});
|
|
1634
1692
|
const { stopScreenshare } = localScreenshareSlice.actions;
|
|
1635
|
-
const doStartScreenshare =
|
|
1693
|
+
const doStartScreenshare = createAsyncRoomConnectedThunk("localScreenshare/doStartScreenshare", (_, { dispatch, getState, rejectWithValue }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1636
1694
|
var _a;
|
|
1637
1695
|
try {
|
|
1638
1696
|
const state = getState();
|
|
@@ -1656,7 +1714,7 @@ const doStartScreenshare = createAppAsyncThunk("localScreenshare/doStartScreensh
|
|
|
1656
1714
|
return rejectWithValue(error);
|
|
1657
1715
|
}
|
|
1658
1716
|
}));
|
|
1659
|
-
const doStopScreenshare =
|
|
1717
|
+
const doStopScreenshare = createRoomConnectedThunk(() => (dispatch, getState) => {
|
|
1660
1718
|
const state = getState();
|
|
1661
1719
|
const screenshareStream = selectLocalScreenshareStream(state);
|
|
1662
1720
|
if (!screenshareStream) {
|
|
@@ -2282,6 +2340,28 @@ startAppListening({
|
|
|
2282
2340
|
})));
|
|
2283
2341
|
},
|
|
2284
2342
|
});
|
|
2343
|
+
startAppListening({
|
|
2344
|
+
actionCreator: signalEvents.videoEnableRequested,
|
|
2345
|
+
effect: ({ payload }, { dispatch, getState }) => {
|
|
2346
|
+
const { enable, requestedByClientId } = payload;
|
|
2347
|
+
const state = getState();
|
|
2348
|
+
const client = selectRemoteParticipants(state).find(({ id }) => id === requestedByClientId);
|
|
2349
|
+
if (!client) {
|
|
2350
|
+
console.warn("Could not find remote client that requested a local video change");
|
|
2351
|
+
return;
|
|
2352
|
+
}
|
|
2353
|
+
dispatch(doSetNotification(createNotificationEvent({
|
|
2354
|
+
type: enable ? "requestVideoEnable" : "requestVideoDisable",
|
|
2355
|
+
message: enable
|
|
2356
|
+
? `${client.displayName} has requested for you to start video`
|
|
2357
|
+
: `${client.displayName} has stopped your video`,
|
|
2358
|
+
props: {
|
|
2359
|
+
client,
|
|
2360
|
+
enable,
|
|
2361
|
+
},
|
|
2362
|
+
})));
|
|
2363
|
+
},
|
|
2364
|
+
});
|
|
2285
2365
|
startAppListening({
|
|
2286
2366
|
actionCreator: signalEvents.clientMetadataReceived,
|
|
2287
2367
|
effect: (action, { dispatch, getOriginalState, getState }) => {
|
|
@@ -2390,7 +2470,7 @@ const rtcAnalyticsCustomEvents = {
|
|
|
2390
2470
|
getOutput: () => ({}),
|
|
2391
2471
|
},
|
|
2392
2472
|
displayName: {
|
|
2393
|
-
actions: [
|
|
2473
|
+
actions: [setDisplayName],
|
|
2394
2474
|
rtcEventName: "displayName",
|
|
2395
2475
|
getValue: (state) => selectAppDisplayName(state),
|
|
2396
2476
|
getOutput: (value) => ({ displayName: value }),
|
|
@@ -2691,7 +2771,7 @@ const waitingParticipantsSlice = toolkit.createSlice({
|
|
|
2691
2771
|
});
|
|
2692
2772
|
},
|
|
2693
2773
|
});
|
|
2694
|
-
const doAcceptWaitingParticipant =
|
|
2774
|
+
const doAcceptWaitingParticipant = createRoomConnectedThunk((payload) => (dispatch, getState) => {
|
|
2695
2775
|
const { participantId } = payload;
|
|
2696
2776
|
const state = getState();
|
|
2697
2777
|
const socket = selectSignalConnectionSocket(state);
|
|
@@ -2701,7 +2781,7 @@ const doAcceptWaitingParticipant = createAppThunk((payload) => (dispatch, getSta
|
|
|
2701
2781
|
response: {},
|
|
2702
2782
|
});
|
|
2703
2783
|
});
|
|
2704
|
-
const doRejectWaitingParticipant =
|
|
2784
|
+
const doRejectWaitingParticipant = createRoomConnectedThunk((payload) => (dispatch, getState) => {
|
|
2705
2785
|
const { participantId } = payload;
|
|
2706
2786
|
const state = getState();
|
|
2707
2787
|
const socket = selectSignalConnectionSocket(state);
|
|
@@ -3805,7 +3885,10 @@ exports.connectionMonitorStopped = connectionMonitorStopped;
|
|
|
3805
3885
|
exports.createAppAsyncThunk = createAppAsyncThunk;
|
|
3806
3886
|
exports.createAppAuthorizedThunk = createAppAuthorizedThunk;
|
|
3807
3887
|
exports.createAppThunk = createAppThunk;
|
|
3888
|
+
exports.createAsyncRoomConnectedThunk = createAsyncRoomConnectedThunk;
|
|
3889
|
+
exports.createAuthorizedRoomConnectedThunk = createAuthorizedRoomConnectedThunk;
|
|
3808
3890
|
exports.createReactor = createReactor;
|
|
3891
|
+
exports.createRoomConnectedThunk = createRoomConnectedThunk;
|
|
3809
3892
|
exports.createServices = createServices;
|
|
3810
3893
|
exports.createStore = createStore;
|
|
3811
3894
|
exports.createWebRtcEmitter = createWebRtcEmitter;
|
|
@@ -3835,6 +3918,7 @@ exports.doOrganizationFetch = doOrganizationFetch;
|
|
|
3835
3918
|
exports.doRejectWaitingParticipant = doRejectWaitingParticipant;
|
|
3836
3919
|
exports.doRemoveSpotlight = doRemoveSpotlight;
|
|
3837
3920
|
exports.doRequestAudioEnable = doRequestAudioEnable;
|
|
3921
|
+
exports.doRequestVideoEnable = doRequestVideoEnable;
|
|
3838
3922
|
exports.doRtcAnalyticsCustomEventsInitialize = doRtcAnalyticsCustomEventsInitialize;
|
|
3839
3923
|
exports.doRtcManagerCreated = doRtcManagerCreated;
|
|
3840
3924
|
exports.doRtcManagerInitialize = doRtcManagerInitialize;
|
|
@@ -3933,6 +4017,7 @@ exports.selectIsAuthorizedToEndMeeting = selectIsAuthorizedToEndMeeting;
|
|
|
3933
4017
|
exports.selectIsAuthorizedToKickClient = selectIsAuthorizedToKickClient;
|
|
3934
4018
|
exports.selectIsAuthorizedToLockRoom = selectIsAuthorizedToLockRoom;
|
|
3935
4019
|
exports.selectIsAuthorizedToRequestAudioEnable = selectIsAuthorizedToRequestAudioEnable;
|
|
4020
|
+
exports.selectIsAuthorizedToRequestVideoEnable = selectIsAuthorizedToRequestVideoEnable;
|
|
3936
4021
|
exports.selectIsAuthorizedToSpotlight = selectIsAuthorizedToSpotlight;
|
|
3937
4022
|
exports.selectIsCameraEnabled = selectIsCameraEnabled;
|
|
3938
4023
|
exports.selectIsCloudRecording = selectIsCloudRecording;
|
|
@@ -4018,6 +4103,7 @@ exports.selectWaitingParticipantsRaw = selectWaitingParticipantsRaw;
|
|
|
4018
4103
|
exports.setCurrentCameraDeviceId = setCurrentCameraDeviceId;
|
|
4019
4104
|
exports.setCurrentMicrophoneDeviceId = setCurrentMicrophoneDeviceId;
|
|
4020
4105
|
exports.setCurrentSpeakerDeviceId = setCurrentSpeakerDeviceId;
|
|
4106
|
+
exports.setDisplayName = setDisplayName;
|
|
4021
4107
|
exports.setLocalMediaOptions = setLocalMediaOptions;
|
|
4022
4108
|
exports.setLocalMediaStream = setLocalMediaStream;
|
|
4023
4109
|
exports.setRoomKey = setRoomKey;
|