@whereby.com/browser-sdk 2.0.0-beta1 → 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 +12 -24
  2. package/dist/embed/index.d.ts +4 -1
  3. package/dist/embed/{index.js → index.esm.js} +117 -110
  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 +50 -27
  10. package/dist/LocalMedia.d.ts +0 -63
  11. package/dist/LocalMedia.js +0 -211
  12. package/dist/RoomConnection.d.ts +0 -184
  13. package/dist/RoomConnection.js +0 -627
  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 -63
  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 -53
  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 -29
  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 -28
  72. package/dist/react/useLocalMedia.js +0 -109
  73. package/dist/react/useRoomConnection.d.ts +0 -55
  74. package/dist/react/useRoomConnection.js +0 -315
  75. package/dist/utils/debounce.d.ts +0 -9
  76. package/dist/utils/debounce.js +0 -20
  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-beta1.js +0 -2001
  82. package/dist/version.d.ts +0 -1
  83. package/dist/version.js +0 -1
@@ -1,315 +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_STARTED":
46
- return Object.assign(Object.assign({}, state), { cloudRecording: {
47
- status: action.payload.status,
48
- startedAt: action.payload.startedAt,
49
- } });
50
- case "CLOUD_RECORDING_STOPPED":
51
- delete state.cloudRecording;
52
- return Object.assign({}, state);
53
- case "ROOM_JOINED":
54
- return Object.assign(Object.assign({}, state), { localParticipant: action.payload.localParticipant, remoteParticipants: action.payload.remoteParticipants, waitingParticipants: action.payload.waitingParticipants, connectionStatus: "connected" });
55
- case "CONNECTION_STATUS_CHANGED":
56
- return Object.assign(Object.assign({}, state), { connectionStatus: action.payload.connectionStatus });
57
- case "PARTICIPANT_AUDIO_ENABLED":
58
- return Object.assign(Object.assign({}, state), { remoteParticipants: updateParticipant(state.remoteParticipants, action.payload.participantId, {
59
- isAudioEnabled: action.payload.isAudioEnabled,
60
- }) });
61
- case "PARTICIPANT_JOINED":
62
- return Object.assign(Object.assign({}, state), { remoteParticipants: [...state.remoteParticipants, action.payload.paritipant] });
63
- case "PARTICIPANT_LEFT":
64
- return Object.assign(Object.assign({}, state), { remoteParticipants: [...state.remoteParticipants.filter((p) => p.id !== action.payload.participantId)] });
65
- case "PARTICIPANT_STREAM_ADDED":
66
- return Object.assign(Object.assign({}, state), { remoteParticipants: updateParticipant(state.remoteParticipants, action.payload.participantId, {
67
- stream: action.payload.stream,
68
- }) });
69
- case "PARTICIPANT_VIDEO_ENABLED":
70
- return Object.assign(Object.assign({}, state), { remoteParticipants: updateParticipant(state.remoteParticipants, action.payload.participantId, {
71
- isVideoEnabled: action.payload.isVideoEnabled,
72
- }) });
73
- case "PARTICIPANT_METADATA_CHANGED":
74
- return Object.assign(Object.assign({}, state), { remoteParticipants: [
75
- ...state.remoteParticipants.map((p) => p.id === action.payload.participantId ? Object.assign(Object.assign({}, p), { displayName: action.payload.displayName }) : p),
76
- ] });
77
- case "LOCAL_CLIENT_DISPLAY_NAME_CHANGED":
78
- if (!state.localParticipant)
79
- return state;
80
- return Object.assign(Object.assign({}, state), { localParticipant: Object.assign(Object.assign({}, state.localParticipant), { displayName: action.payload.displayName }) });
81
- case "SCREENSHARE_STARTED":
82
- return Object.assign(Object.assign({}, state), { screenshares: addScreenshare(state.screenshares, {
83
- participantId: action.payload.participantId,
84
- id: action.payload.id,
85
- hasAudioTrack: action.payload.hasAudioTrack,
86
- stream: action.payload.stream,
87
- isLocal: action.payload.isLocal,
88
- }) });
89
- case "SCREENSHARE_STOPPED":
90
- return Object.assign(Object.assign({}, state), { screenshares: state.screenshares.filter((ss) => ss.id !== action.payload.id) });
91
- case "LOCAL_SCREENSHARE_START_ERROR":
92
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: undefined });
93
- case "LOCAL_SCREENSHARE_STARTING":
94
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: "starting" });
95
- case "LOCAL_SCREENSHARE_STARTED":
96
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: "active" });
97
- case "LOCAL_SCREENSHARE_STOPPED":
98
- return Object.assign(Object.assign({}, state), { localScreenshareStatus: undefined, screenshares: state.screenshares.filter((ss) => !ss.isLocal) });
99
- case "LOCAL_CAMERA_ENABLED":
100
- if (!state.localParticipant)
101
- return state;
102
- return Object.assign(Object.assign({}, state), { localParticipant: Object.assign(Object.assign({}, state.localParticipant), { isVideoEnabled: action.payload }) });
103
- case "LOCAL_MICROPHONE_ENABLED":
104
- if (!state.localParticipant)
105
- return state;
106
- return Object.assign(Object.assign({}, state), { localParticipant: Object.assign(Object.assign({}, state.localParticipant), { isAudioEnabled: action.payload }) });
107
- case "STREAMING_STARTED":
108
- return Object.assign(Object.assign({}, state), { liveStream: {
109
- status: action.payload.status,
110
- startedAt: action.payload.startedAt,
111
- } });
112
- case "STREAMING_STOPPED":
113
- delete state.liveStream;
114
- return Object.assign({}, state);
115
- case "WAITING_PARTICIPANT_JOINED":
116
- return Object.assign(Object.assign({}, state), { waitingParticipants: [
117
- ...state.waitingParticipants,
118
- { id: action.payload.participantId, displayName: action.payload.displayName },
119
- ] });
120
- case "WAITING_PARTICIPANT_LEFT":
121
- return Object.assign(Object.assign({}, state), { waitingParticipants: state.waitingParticipants.filter((wp) => wp.id !== action.payload.participantId) });
122
- default:
123
- throw state;
124
- }
125
- }
126
- const defaultRoomConnectionOptions = {
127
- localMediaConstraints: {
128
- audio: true,
129
- video: true,
130
- },
131
- };
132
- export function useRoomConnection(roomUrl, roomConnectionOptions = defaultRoomConnectionOptions) {
133
- const [roomConnection] = useState(() => {
134
- var _a;
135
- 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 }));
136
- });
137
- const [state, dispatch] = useReducer(reducer, initialState);
138
- function createEventListener(eventName, listener, options) {
139
- return {
140
- eventName,
141
- listener,
142
- options,
143
- };
144
- }
145
- const eventListeners = React.useMemo(() => [
146
- createEventListener("chat_message", (e) => {
147
- dispatch({ type: "CHAT_MESSAGE", payload: e.detail });
148
- }),
149
- createEventListener("cloud_recording_started", (e) => {
150
- const { status, startedAt } = e.detail;
151
- dispatch({ type: "CLOUD_RECORDING_STARTED", payload: { status, startedAt } });
152
- }),
153
- createEventListener("cloud_recording_stopped", () => {
154
- dispatch({ type: "CLOUD_RECORDING_STOPPED" });
155
- }),
156
- createEventListener("local_camera_enabled", (e) => {
157
- const { enabled } = e.detail;
158
- dispatch({ type: "LOCAL_CAMERA_ENABLED", payload: enabled });
159
- }),
160
- createEventListener("local_microphone_enabled", (e) => {
161
- const { enabled } = e.detail;
162
- dispatch({ type: "LOCAL_MICROPHONE_ENABLED", payload: enabled });
163
- }),
164
- createEventListener("participant_audio_enabled", (e) => {
165
- const { participantId, isAudioEnabled } = e.detail;
166
- dispatch({ type: "PARTICIPANT_AUDIO_ENABLED", payload: { participantId, isAudioEnabled } });
167
- }),
168
- createEventListener("participant_joined", (e) => {
169
- const { remoteParticipant } = e.detail;
170
- dispatch({
171
- type: "PARTICIPANT_JOINED",
172
- payload: {
173
- paritipant: convertRemoteParticipantToRemoteParticipantState(remoteParticipant),
174
- },
175
- });
176
- }),
177
- createEventListener("participant_left", (e) => {
178
- const { participantId } = e.detail;
179
- dispatch({ type: "PARTICIPANT_LEFT", payload: { participantId } });
180
- }),
181
- createEventListener("participant_metadata_changed", (e) => {
182
- const { participantId, displayName } = e.detail;
183
- dispatch({ type: "PARTICIPANT_METADATA_CHANGED", payload: { participantId, displayName } });
184
- }),
185
- createEventListener("participant_stream_added", (e) => {
186
- const { participantId, stream } = e.detail;
187
- dispatch({ type: "PARTICIPANT_STREAM_ADDED", payload: { participantId, stream } });
188
- }),
189
- createEventListener("participant_video_enabled", (e) => {
190
- const { participantId, isVideoEnabled } = e.detail;
191
- dispatch({ type: "PARTICIPANT_VIDEO_ENABLED", payload: { participantId, isVideoEnabled } });
192
- }),
193
- createEventListener("connection_status_changed", (e) => {
194
- const { connectionStatus } = e.detail;
195
- dispatch({
196
- type: "CONNECTION_STATUS_CHANGED",
197
- payload: { connectionStatus },
198
- });
199
- }),
200
- createEventListener("room_joined", (e) => {
201
- const { localParticipant, remoteParticipants, waitingParticipants } = e.detail;
202
- dispatch({
203
- type: "ROOM_JOINED",
204
- payload: {
205
- localParticipant,
206
- remoteParticipants: remoteParticipants.map(convertRemoteParticipantToRemoteParticipantState),
207
- waitingParticipants,
208
- },
209
- });
210
- }),
211
- createEventListener("screenshare_started", (e) => {
212
- const { participantId, stream, id, hasAudioTrack, isLocal } = e.detail;
213
- dispatch({
214
- type: "SCREENSHARE_STARTED",
215
- payload: { participantId, stream, id, hasAudioTrack, isLocal },
216
- });
217
- }),
218
- createEventListener("screenshare_stopped", (e) => {
219
- var _a;
220
- const { participantId, id } = e.detail;
221
- dispatch({
222
- type: "SCREENSHARE_STOPPED",
223
- payload: { participantId, id },
224
- });
225
- if (participantId === ((_a = state.localParticipant) === null || _a === void 0 ? void 0 : _a.id)) {
226
- dispatch({ type: "LOCAL_SCREENSHARE_STOPPED" });
227
- }
228
- }),
229
- createEventListener("streaming_started", (e) => {
230
- const { status, startedAt } = e.detail;
231
- dispatch({ type: "STREAMING_STARTED", payload: { status, startedAt } });
232
- }),
233
- createEventListener("streaming_stopped", () => {
234
- dispatch({ type: "STREAMING_STOPPED" });
235
- }),
236
- createEventListener("waiting_participant_joined", (e) => {
237
- const { participantId, displayName } = e.detail;
238
- dispatch({
239
- type: "WAITING_PARTICIPANT_JOINED",
240
- payload: { participantId, displayName },
241
- });
242
- }),
243
- createEventListener("waiting_participant_left", (e) => {
244
- const { participantId } = e.detail;
245
- dispatch({
246
- type: "WAITING_PARTICIPANT_LEFT",
247
- payload: { participantId },
248
- });
249
- }),
250
- ], []);
251
- useEffect(() => {
252
- eventListeners.forEach(({ eventName, listener }) => {
253
- roomConnection.addEventListener(eventName, listener);
254
- });
255
- roomConnection.join();
256
- return () => {
257
- eventListeners.forEach(({ eventName, listener }) => {
258
- roomConnection.removeEventListener(eventName, listener);
259
- });
260
- roomConnection.leave();
261
- };
262
- }, []);
263
- return {
264
- state,
265
- actions: {
266
- knock: () => {
267
- roomConnection.knock();
268
- },
269
- sendChatMessage: (text) => {
270
- roomConnection.sendChatMessage(text);
271
- },
272
- setDisplayName: (displayName) => {
273
- roomConnection.setDisplayName(displayName);
274
- dispatch({ type: "LOCAL_CLIENT_DISPLAY_NAME_CHANGED", payload: { displayName } });
275
- },
276
- toggleCamera: (enabled) => {
277
- roomConnection.localMedia.toggleCameraEnabled(enabled);
278
- },
279
- toggleMicrophone: (enabled) => {
280
- roomConnection.localMedia.toggleMichrophoneEnabled(enabled);
281
- },
282
- acceptWaitingParticipant: (participantId) => {
283
- roomConnection.acceptWaitingParticipant(participantId);
284
- },
285
- rejectWaitingParticipant: (participantId) => {
286
- roomConnection.rejectWaitingParticipant(participantId);
287
- },
288
- startScreenshare: () => __awaiter(this, void 0, void 0, function* () {
289
- dispatch({ type: "LOCAL_SCREENSHARE_STARTING" });
290
- try {
291
- yield roomConnection.startScreenshare();
292
- dispatch({ type: "LOCAL_SCREENSHARE_STARTED" });
293
- }
294
- catch (error) {
295
- dispatch({ type: "LOCAL_SCREENSHARE_START_ERROR", payload: error });
296
- }
297
- }),
298
- stopScreenshare: () => {
299
- roomConnection.stopScreenshare();
300
- },
301
- },
302
- components: {
303
- VideoView: (props) => React.createElement(VideoView, Object.assign({}, props, {
304
- onResize: ({ stream, width, height, }) => {
305
- roomConnection.updateStreamResolution({
306
- streamId: stream.id,
307
- width,
308
- height,
309
- });
310
- },
311
- })),
312
- },
313
- _ref: roomConnection,
314
- };
315
- }
@@ -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,20 +0,0 @@
1
- import assert from "assert";
2
- export default function debounce(fn, { delay = 500, edges } = {}) {
3
- assert.ok(typeof fn === "function", "fn<function> is required");
4
- let timeout;
5
- let nCalls = 0;
6
- return (...args) => {
7
- nCalls += 1;
8
- if (edges && nCalls === 1) {
9
- fn(...args);
10
- }
11
- clearTimeout(timeout);
12
- timeout = setTimeout(() => {
13
- if (!edges || nCalls > 1) {
14
- fn(...args);
15
- }
16
- timeout = undefined;
17
- nCalls = 0;
18
- }, delay);
19
- };
20
- }
@@ -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";