@whereby.com/browser-sdk 2.0.0-beta2 → 2.0.0-beta3

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 (83) hide show
  1. package/README.md +0 -14
  2. package/dist/embed/index.d.ts +4 -1
  3. package/dist/embed/{index.js → index.esm.js} +117 -109
  4. package/dist/react/index.d.ts +397 -6
  5. package/dist/react/index.esm.js +8245 -0
  6. package/dist/utils/index.d.ts +5 -2
  7. package/dist/utils/{fakeWebcamFrame.js → index.esm.js} +68 -47
  8. package/dist/v2-beta3.js +15 -0
  9. package/package.json +22 -12
  10. package/dist/LocalMedia.d.ts +0 -70
  11. package/dist/LocalMedia.js +0 -208
  12. package/dist/RoomConnection.d.ts +0 -190
  13. package/dist/RoomConnection.js +0 -646
  14. package/dist/RoomParticipant.d.ts +0 -50
  15. package/dist/RoomParticipant.js +0 -48
  16. package/dist/api/ApiClient.d.ts +0 -26
  17. package/dist/api/ApiClient.js +0 -61
  18. package/dist/api/Credentials.d.ts +0 -17
  19. package/dist/api/Credentials.js +0 -16
  20. package/dist/api/HttpClient.d.ts +0 -16
  21. package/dist/api/HttpClient.js +0 -52
  22. package/dist/api/MultipartHttpClient.d.ts +0 -10
  23. package/dist/api/MultipartHttpClient.js +0 -25
  24. package/dist/api/OrganizationApiClient.d.ts +0 -16
  25. package/dist/api/OrganizationApiClient.js +0 -28
  26. package/dist/api/Response.d.ts +0 -29
  27. package/dist/api/Response.js +0 -9
  28. package/dist/api/credentialsService/index.d.ts +0 -27
  29. package/dist/api/credentialsService/index.js +0 -89
  30. package/dist/api/deviceService/index.d.ts +0 -9
  31. package/dist/api/deviceService/index.js +0 -23
  32. package/dist/api/extractUtils.d.ts +0 -16
  33. package/dist/api/extractUtils.js +0 -51
  34. package/dist/api/index.d.ts +0 -7
  35. package/dist/api/index.js +0 -7
  36. package/dist/api/localStorageWrapper/index.d.ts +0 -2
  37. package/dist/api/localStorageWrapper/index.js +0 -15
  38. package/dist/api/models/Account.d.ts +0 -20
  39. package/dist/api/models/Account.js +0 -24
  40. package/dist/api/models/Meeting.d.ts +0 -12
  41. package/dist/api/models/Meeting.js +0 -29
  42. package/dist/api/models/Organization.d.ts +0 -102
  43. package/dist/api/models/Organization.js +0 -81
  44. package/dist/api/models/Room.d.ts +0 -4
  45. package/dist/api/models/Room.js +0 -38
  46. package/dist/api/models/account/EmbeddedFreeTierStatus.d.ts +0 -13
  47. package/dist/api/models/account/EmbeddedFreeTierStatus.js +0 -17
  48. package/dist/api/modules/AbstractStore.d.ts +0 -5
  49. package/dist/api/modules/AbstractStore.js +0 -1
  50. package/dist/api/modules/ChromeStorageStore.d.ts +0 -10
  51. package/dist/api/modules/ChromeStorageStore.js +0 -21
  52. package/dist/api/modules/LocalStorageStore.d.ts +0 -9
  53. package/dist/api/modules/LocalStorageStore.js +0 -35
  54. package/dist/api/modules/tests/__mocks__/storage.d.ts +0 -10
  55. package/dist/api/modules/tests/__mocks__/storage.js +0 -19
  56. package/dist/api/organizationService/index.d.ts +0 -46
  57. package/dist/api/organizationService/index.js +0 -158
  58. package/dist/api/organizationServiceCache/index.d.ts +0 -13
  59. package/dist/api/organizationServiceCache/index.js +0 -16
  60. package/dist/api/parameterAssertUtils.d.ts +0 -13
  61. package/dist/api/parameterAssertUtils.js +0 -64
  62. package/dist/api/roomService/index.d.ts +0 -54
  63. package/dist/api/roomService/index.js +0 -160
  64. package/dist/api/test/helpers.d.ts +0 -7
  65. package/dist/api/test/helpers.js +0 -32
  66. package/dist/api/types.d.ts +0 -5
  67. package/dist/api/types.js +0 -1
  68. package/dist/react/VideoView.d.ts +0 -15
  69. package/dist/react/VideoView.js +0 -37
  70. package/dist/react/index.js +0 -4
  71. package/dist/react/useLocalMedia.d.ts +0 -29
  72. package/dist/react/useLocalMedia.js +0 -109
  73. package/dist/react/useRoomConnection.d.ts +0 -57
  74. package/dist/react/useRoomConnection.js +0 -340
  75. package/dist/utils/debounce.d.ts +0 -9
  76. package/dist/utils/debounce.js +0 -18
  77. package/dist/utils/fakeAudioStream.d.ts +0 -1
  78. package/dist/utils/fakeAudioStream.js +0 -18
  79. package/dist/utils/fakeWebcamFrame.d.ts +0 -1
  80. package/dist/utils/index.js +0 -2
  81. package/dist/v2-beta2.js +0 -2000
  82. package/dist/version.d.ts +0 -1
  83. package/dist/version.js +0 -1
@@ -1,340 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import React, { useEffect, useReducer, useState } from "react";
3
- import VideoView from "./VideoView";
4
- import RoomConnection from "../RoomConnection";
5
- const initialState = {
6
- chatMessages: [],
7
- remoteParticipants: [],
8
- connectionStatus: "initializing",
9
- screenshares: [],
10
- waitingParticipants: [],
11
- };
12
- function updateParticipant(remoteParticipants, participantId, updates) {
13
- const existingParticipant = remoteParticipants.find((p) => p.id === participantId);
14
- if (!existingParticipant) {
15
- return remoteParticipants;
16
- }
17
- const index = remoteParticipants.indexOf(existingParticipant);
18
- return [
19
- ...remoteParticipants.slice(0, index),
20
- Object.assign(Object.assign({}, existingParticipant), updates),
21
- ...remoteParticipants.slice(index + 1),
22
- ];
23
- }
24
- function convertRemoteParticipantToRemoteParticipantState(p) {
25
- return {
26
- displayName: p.displayName,
27
- id: p.id,
28
- isAudioEnabled: p.isAudioEnabled,
29
- isLocalParticipant: p.isLocalParticipant,
30
- isVideoEnabled: p.isVideoEnabled,
31
- stream: p.stream,
32
- };
33
- }
34
- function addScreenshare(screenshares, screenshare) {
35
- const existingScreenshare = screenshares.find((ss) => ss.id === screenshare.id);
36
- if (existingScreenshare) {
37
- return screenshares;
38
- }
39
- return [...screenshares, screenshare];
40
- }
41
- function reducer(state, action) {
42
- switch (action.type) {
43
- case "CHAT_MESSAGE":
44
- return Object.assign(Object.assign({}, state), { chatMessages: [...state.chatMessages, action.payload] });
45
- case "CLOUD_RECORDING_REQUEST_STARTED":
46
- return Object.assign(Object.assign({}, state), { cloudRecording: {
47
- status: "requested",
48
- } });
49
- case "CLOUD_RECORDING_STARTED":
50
- return Object.assign(Object.assign({}, state), { cloudRecording: {
51
- status: action.payload.status,
52
- startedAt: action.payload.startedAt,
53
- } });
54
- case "CLOUD_RECORDING_STARTED_ERROR":
55
- return Object.assign(Object.assign({}, state), { cloudRecording: {
56
- status: action.payload.status,
57
- error: action.payload.error,
58
- } });
59
- case "CLOUD_RECORDING_STOPPED":
60
- delete state.cloudRecording;
61
- return Object.assign({}, state);
62
- case "ROOM_JOINED":
63
- return Object.assign(Object.assign({}, state), { localParticipant: action.payload.localParticipant, remoteParticipants: action.payload.remoteParticipants, waitingParticipants: action.payload.waitingParticipants, connectionStatus: "connected" });
64
- case "CONNECTION_STATUS_CHANGED":
65
- return Object.assign(Object.assign({}, state), { connectionStatus: action.payload.connectionStatus });
66
- case "PARTICIPANT_AUDIO_ENABLED":
67
- return Object.assign(Object.assign({}, state), { remoteParticipants: updateParticipant(state.remoteParticipants, action.payload.participantId, {
68
- isAudioEnabled: action.payload.isAudioEnabled,
69
- }) });
70
- case "PARTICIPANT_JOINED":
71
- return Object.assign(Object.assign({}, state), { remoteParticipants: [...state.remoteParticipants, action.payload.paritipant] });
72
- case "PARTICIPANT_LEFT":
73
- return Object.assign(Object.assign({}, state), { remoteParticipants: [...state.remoteParticipants.filter((p) => p.id !== action.payload.participantId)] });
74
- case "PARTICIPANT_STREAM_ADDED":
75
- return Object.assign(Object.assign({}, state), { remoteParticipants: updateParticipant(state.remoteParticipants, action.payload.participantId, {
76
- stream: action.payload.stream,
77
- }) });
78
- case "PARTICIPANT_VIDEO_ENABLED":
79
- return Object.assign(Object.assign({}, state), { remoteParticipants: updateParticipant(state.remoteParticipants, action.payload.participantId, {
80
- isVideoEnabled: action.payload.isVideoEnabled,
81
- }) });
82
- case "PARTICIPANT_METADATA_CHANGED":
83
- return Object.assign(Object.assign({}, state), { remoteParticipants: [
84
- ...state.remoteParticipants.map((p) => p.id === action.payload.participantId ? Object.assign(Object.assign({}, p), { displayName: action.payload.displayName }) : p),
85
- ] });
86
- case "LOCAL_CLIENT_DISPLAY_NAME_CHANGED":
87
- if (!state.localParticipant)
88
- return state;
89
- return Object.assign(Object.assign({}, state), { localParticipant: Object.assign(Object.assign({}, state.localParticipant), { displayName: action.payload.displayName }) });
90
- case "SCREENSHARE_STARTED":
91
- return Object.assign(Object.assign({}, state), { screenshares: addScreenshare(state.screenshares, {
92
- participantId: action.payload.participantId,
93
- id: action.payload.id,
94
- hasAudioTrack: action.payload.hasAudioTrack,
95
- stream: action.payload.stream,
96
- isLocal: action.payload.isLocal,
97
- }) });
98
- case "SCREENSHARE_STOPPED":
99
- return Object.assign(Object.assign({}, state), { screenshares: state.screenshares.filter((ss) => ss.id !== action.payload.id) });
100
- case "LOCAL_SCREENSHARE_START_ERROR":
101
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: undefined });
102
- case "LOCAL_SCREENSHARE_STARTING":
103
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: "starting" });
104
- case "LOCAL_SCREENSHARE_STARTED":
105
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: "active" });
106
- case "LOCAL_SCREENSHARE_STOPPED":
107
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: undefined, screenshares: state.screenshares.filter((ss) => !ss.isLocal) });
108
- case "LOCAL_CAMERA_ENABLED":
109
- if (!state.localParticipant)
110
- return state;
111
- return Object.assign(Object.assign({}, state), { localParticipant: Object.assign(Object.assign({}, state.localParticipant), { isVideoEnabled: action.payload }) });
112
- case "LOCAL_MICROPHONE_ENABLED":
113
- if (!state.localParticipant)
114
- return state;
115
- return Object.assign(Object.assign({}, state), { localParticipant: Object.assign(Object.assign({}, state.localParticipant), { isAudioEnabled: action.payload }) });
116
- case "STREAMING_STARTED":
117
- return Object.assign(Object.assign({}, state), { liveStream: {
118
- status: action.payload.status,
119
- startedAt: action.payload.startedAt,
120
- } });
121
- case "STREAMING_STOPPED":
122
- delete state.liveStream;
123
- return Object.assign({}, state);
124
- case "WAITING_PARTICIPANT_JOINED":
125
- return Object.assign(Object.assign({}, state), { waitingParticipants: [
126
- ...state.waitingParticipants,
127
- { id: action.payload.participantId, displayName: action.payload.displayName },
128
- ] });
129
- case "WAITING_PARTICIPANT_LEFT":
130
- return Object.assign(Object.assign({}, state), { waitingParticipants: state.waitingParticipants.filter((wp) => wp.id !== action.payload.participantId) });
131
- default:
132
- throw state;
133
- }
134
- }
135
- const defaultRoomConnectionOptions = {
136
- localMediaOptions: {
137
- audio: true,
138
- video: true,
139
- },
140
- };
141
- export function useRoomConnection(roomUrl, roomConnectionOptions = defaultRoomConnectionOptions) {
142
- const [roomConnection] = useState(() => {
143
- var _a;
144
- return new RoomConnection(roomUrl, Object.assign(Object.assign({}, roomConnectionOptions), { localMedia: ((_a = roomConnectionOptions === null || roomConnectionOptions === void 0 ? void 0 : roomConnectionOptions.localMedia) === null || _a === void 0 ? void 0 : _a._ref) || undefined }));
145
- });
146
- const [state, dispatch] = useReducer(reducer, initialState);
147
- function createEventListener(eventName, listener, options) {
148
- return {
149
- eventName,
150
- listener,
151
- options,
152
- };
153
- }
154
- const eventListeners = React.useMemo(() => [
155
- createEventListener("chat_message", (e) => {
156
- dispatch({ type: "CHAT_MESSAGE", payload: e.detail });
157
- }),
158
- createEventListener("cloud_recording_request_started", () => {
159
- dispatch({ type: "CLOUD_RECORDING_REQUEST_STARTED" });
160
- }),
161
- createEventListener("cloud_recording_started", (e) => {
162
- const { status, startedAt } = e.detail;
163
- dispatch({ type: "CLOUD_RECORDING_STARTED", payload: { status, startedAt } });
164
- }),
165
- createEventListener("cloud_recording_started_error", (e) => {
166
- dispatch({ type: "CLOUD_RECORDING_STARTED_ERROR", payload: e.detail });
167
- }),
168
- createEventListener("cloud_recording_stopped", () => {
169
- dispatch({ type: "CLOUD_RECORDING_STOPPED" });
170
- }),
171
- createEventListener("local_camera_enabled", (e) => {
172
- const { enabled } = e.detail;
173
- dispatch({ type: "LOCAL_CAMERA_ENABLED", payload: enabled });
174
- }),
175
- createEventListener("local_microphone_enabled", (e) => {
176
- const { enabled } = e.detail;
177
- dispatch({ type: "LOCAL_MICROPHONE_ENABLED", payload: enabled });
178
- }),
179
- createEventListener("participant_audio_enabled", (e) => {
180
- const { participantId, isAudioEnabled } = e.detail;
181
- dispatch({ type: "PARTICIPANT_AUDIO_ENABLED", payload: { participantId, isAudioEnabled } });
182
- }),
183
- createEventListener("participant_joined", (e) => {
184
- const { remoteParticipant } = e.detail;
185
- dispatch({
186
- type: "PARTICIPANT_JOINED",
187
- payload: {
188
- paritipant: convertRemoteParticipantToRemoteParticipantState(remoteParticipant),
189
- },
190
- });
191
- }),
192
- createEventListener("participant_left", (e) => {
193
- const { participantId } = e.detail;
194
- dispatch({ type: "PARTICIPANT_LEFT", payload: { participantId } });
195
- }),
196
- createEventListener("participant_metadata_changed", (e) => {
197
- const { participantId, displayName } = e.detail;
198
- dispatch({ type: "PARTICIPANT_METADATA_CHANGED", payload: { participantId, displayName } });
199
- }),
200
- createEventListener("participant_stream_added", (e) => {
201
- const { participantId, stream } = e.detail;
202
- dispatch({ type: "PARTICIPANT_STREAM_ADDED", payload: { participantId, stream } });
203
- }),
204
- createEventListener("participant_video_enabled", (e) => {
205
- const { participantId, isVideoEnabled } = e.detail;
206
- dispatch({ type: "PARTICIPANT_VIDEO_ENABLED", payload: { participantId, isVideoEnabled } });
207
- }),
208
- createEventListener("connection_status_changed", (e) => {
209
- const { connectionStatus } = e.detail;
210
- dispatch({
211
- type: "CONNECTION_STATUS_CHANGED",
212
- payload: { connectionStatus },
213
- });
214
- }),
215
- createEventListener("room_joined", (e) => {
216
- const { localParticipant, remoteParticipants, waitingParticipants } = e.detail;
217
- dispatch({
218
- type: "ROOM_JOINED",
219
- payload: {
220
- localParticipant,
221
- remoteParticipants: remoteParticipants.map(convertRemoteParticipantToRemoteParticipantState),
222
- waitingParticipants,
223
- },
224
- });
225
- }),
226
- createEventListener("screenshare_started", (e) => {
227
- const { participantId, stream, id, hasAudioTrack, isLocal } = e.detail;
228
- dispatch({
229
- type: "SCREENSHARE_STARTED",
230
- payload: { participantId, stream, id, hasAudioTrack, isLocal },
231
- });
232
- }),
233
- createEventListener("screenshare_stopped", (e) => {
234
- var _a;
235
- const { participantId, id } = e.detail;
236
- dispatch({
237
- type: "SCREENSHARE_STOPPED",
238
- payload: { participantId, id },
239
- });
240
- if (participantId === ((_a = state.localParticipant) === null || _a === void 0 ? void 0 : _a.id)) {
241
- dispatch({ type: "LOCAL_SCREENSHARE_STOPPED" });
242
- }
243
- }),
244
- createEventListener("streaming_started", (e) => {
245
- const { status, startedAt } = e.detail;
246
- dispatch({ type: "STREAMING_STARTED", payload: { status, startedAt } });
247
- }),
248
- createEventListener("streaming_stopped", () => {
249
- dispatch({ type: "STREAMING_STOPPED" });
250
- }),
251
- createEventListener("waiting_participant_joined", (e) => {
252
- const { participantId, displayName } = e.detail;
253
- dispatch({
254
- type: "WAITING_PARTICIPANT_JOINED",
255
- payload: { participantId, displayName },
256
- });
257
- }),
258
- createEventListener("waiting_participant_left", (e) => {
259
- const { participantId } = e.detail;
260
- dispatch({
261
- type: "WAITING_PARTICIPANT_LEFT",
262
- payload: { participantId },
263
- });
264
- }),
265
- ], []);
266
- useEffect(() => {
267
- eventListeners.forEach(({ eventName, listener }) => {
268
- roomConnection.addEventListener(eventName, listener);
269
- });
270
- roomConnection.join();
271
- return () => {
272
- eventListeners.forEach(({ eventName, listener }) => {
273
- roomConnection.removeEventListener(eventName, listener);
274
- });
275
- roomConnection.leave();
276
- };
277
- }, []);
278
- return {
279
- state,
280
- actions: {
281
- knock: () => {
282
- roomConnection.knock();
283
- },
284
- sendChatMessage: (text) => {
285
- roomConnection.sendChatMessage(text);
286
- },
287
- setDisplayName: (displayName) => {
288
- roomConnection.setDisplayName(displayName);
289
- dispatch({ type: "LOCAL_CLIENT_DISPLAY_NAME_CHANGED", payload: { displayName } });
290
- },
291
- toggleCamera: (enabled) => {
292
- roomConnection.localMedia.toggleCameraEnabled(enabled);
293
- },
294
- toggleMicrophone: (enabled) => {
295
- roomConnection.localMedia.toggleMichrophoneEnabled(enabled);
296
- },
297
- acceptWaitingParticipant: (participantId) => {
298
- roomConnection.acceptWaitingParticipant(participantId);
299
- },
300
- rejectWaitingParticipant: (participantId) => {
301
- roomConnection.rejectWaitingParticipant(participantId);
302
- },
303
- startCloudRecording: () => {
304
- var _a;
305
- if (state.cloudRecording && ["recording", "requested"].includes((_a = state.cloudRecording) === null || _a === void 0 ? void 0 : _a.status)) {
306
- return;
307
- }
308
- roomConnection.startCloudRecording();
309
- },
310
- stopCloudRecording: () => {
311
- roomConnection.stopCloudRecording();
312
- },
313
- startScreenshare: () => __awaiter(this, void 0, void 0, function* () {
314
- dispatch({ type: "LOCAL_SCREENSHARE_STARTING" });
315
- try {
316
- yield roomConnection.startScreenshare();
317
- dispatch({ type: "LOCAL_SCREENSHARE_STARTED" });
318
- }
319
- catch (error) {
320
- dispatch({ type: "LOCAL_SCREENSHARE_START_ERROR", payload: error });
321
- }
322
- }),
323
- stopScreenshare: () => {
324
- roomConnection.stopScreenshare();
325
- },
326
- },
327
- components: {
328
- VideoView: (props) => React.createElement(VideoView, Object.assign({}, props, {
329
- onResize: ({ stream, width, height, }) => {
330
- roomConnection.updateStreamResolution({
331
- streamId: stream.id,
332
- width,
333
- height,
334
- });
335
- },
336
- })),
337
- },
338
- _ref: roomConnection,
339
- };
340
- }
@@ -1,9 +0,0 @@
1
- interface Options {
2
- delay?: number;
3
- edges?: boolean;
4
- }
5
- interface DebouncedFunction {
6
- (...args: any[]): void;
7
- }
8
- export default function debounce(fn: DebouncedFunction, { delay, edges }?: Options): DebouncedFunction;
9
- export {};
@@ -1,18 +0,0 @@
1
- export default function debounce(fn, { delay = 500, edges } = {}) {
2
- let timeout;
3
- let nCalls = 0;
4
- return (...args) => {
5
- nCalls += 1;
6
- if (edges && nCalls === 1) {
7
- fn(...args);
8
- }
9
- clearTimeout(timeout);
10
- timeout = setTimeout(() => {
11
- if (!edges || nCalls > 1) {
12
- fn(...args);
13
- }
14
- timeout = undefined;
15
- nCalls = 0;
16
- }, delay);
17
- };
18
- }
@@ -1 +0,0 @@
1
- export default function fakeAudioStream(): MediaStream;
@@ -1,18 +0,0 @@
1
- export default function fakeAudioStream() {
2
- const audioCtx = new AudioContext();
3
- const oscillator = audioCtx.createOscillator();
4
- const destination = audioCtx.createMediaStreamDestination();
5
- oscillator.connect(destination);
6
- oscillator.frequency.value = 400;
7
- oscillator.type = "sine";
8
- setInterval(() => {
9
- if (oscillator.frequency.value <= 900) {
10
- oscillator.frequency.value += 10;
11
- }
12
- else {
13
- oscillator.frequency.value = 200;
14
- }
15
- }, 20);
16
- oscillator.start();
17
- return destination.stream;
18
- }
@@ -1 +0,0 @@
1
- export default function fakeWebcamFrame(canvas: HTMLCanvasElement): void;
@@ -1,2 +0,0 @@
1
- export { default as fakeAudioStream } from "./fakeAudioStream";
2
- export { default as fakeWebcamFrame } from "./fakeWebcamFrame";