@whereby.com/browser-sdk 2.1.0-beta.1 → 2.1.0-beta.2
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/cdn/v2-embed-beta.js +16 -0
- package/dist/cdn/v2-react-beta.js +3 -0
- package/dist/core/index.d.ts +2320 -0
- package/dist/core/index.js +63283 -0
- package/dist/embed/index.d.ts +109 -0
- package/dist/embed/index.esm.js +156 -0
- package/dist/react/index.d.ts +860 -0
- package/dist/react/index.esm.js +10585 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.esm.js +70 -0
- package/package.json +1 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ReactHTMLElement } from 'react';
|
|
2
|
+
|
|
3
|
+
interface WherebyEmbedElementAttributes extends ReactHTMLElement<HTMLElement> {
|
|
4
|
+
audio: string;
|
|
5
|
+
avatarUrl: string;
|
|
6
|
+
background: string;
|
|
7
|
+
breakout: string;
|
|
8
|
+
cameraAccess: string;
|
|
9
|
+
chat: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
emptyRoomInvitation: string;
|
|
12
|
+
externalId: string;
|
|
13
|
+
floatSelf: string;
|
|
14
|
+
groups: string;
|
|
15
|
+
help: string;
|
|
16
|
+
lang: string;
|
|
17
|
+
leaveButton: string;
|
|
18
|
+
locking: string;
|
|
19
|
+
logo: string;
|
|
20
|
+
lowData: string;
|
|
21
|
+
metadata: string;
|
|
22
|
+
minimal: string;
|
|
23
|
+
moreButton: string;
|
|
24
|
+
participantCount: string;
|
|
25
|
+
people: string;
|
|
26
|
+
pipButton: string;
|
|
27
|
+
precallReview: string;
|
|
28
|
+
recording: string;
|
|
29
|
+
room: string;
|
|
30
|
+
settingsButton: string;
|
|
31
|
+
screenshare: string;
|
|
32
|
+
style: {
|
|
33
|
+
[key: string]: string;
|
|
34
|
+
};
|
|
35
|
+
subgridLabels: string;
|
|
36
|
+
title: string;
|
|
37
|
+
video: string;
|
|
38
|
+
virtualBackgroundUrl: string;
|
|
39
|
+
}
|
|
40
|
+
interface WherebyEmbedElementEventMap {
|
|
41
|
+
ready: CustomEvent;
|
|
42
|
+
knock: CustomEvent;
|
|
43
|
+
participantupdate: CustomEvent<{
|
|
44
|
+
count: number;
|
|
45
|
+
}>;
|
|
46
|
+
join: CustomEvent;
|
|
47
|
+
leave: CustomEvent<{
|
|
48
|
+
removed: boolean;
|
|
49
|
+
}>;
|
|
50
|
+
participant_join: CustomEvent<{
|
|
51
|
+
participant: {
|
|
52
|
+
metadata: string;
|
|
53
|
+
};
|
|
54
|
+
}>;
|
|
55
|
+
participant_leave: CustomEvent<{
|
|
56
|
+
participant: {
|
|
57
|
+
metadata: string;
|
|
58
|
+
};
|
|
59
|
+
}>;
|
|
60
|
+
microphone_toggle: CustomEvent<{
|
|
61
|
+
enabled: boolean;
|
|
62
|
+
}>;
|
|
63
|
+
camera_toggle: CustomEvent<{
|
|
64
|
+
enabled: boolean;
|
|
65
|
+
}>;
|
|
66
|
+
chat_toggle: CustomEvent<{
|
|
67
|
+
open: boolean;
|
|
68
|
+
}>;
|
|
69
|
+
pip_toggle: CustomEvent<{
|
|
70
|
+
open: boolean;
|
|
71
|
+
}>;
|
|
72
|
+
deny_device_permission: CustomEvent<{
|
|
73
|
+
denied: boolean;
|
|
74
|
+
}>;
|
|
75
|
+
screenshare_toggle: CustomEvent<{
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
}>;
|
|
78
|
+
streaming_status_change: CustomEvent<{
|
|
79
|
+
status: string;
|
|
80
|
+
}>;
|
|
81
|
+
connection_status_change: CustomEvent<{
|
|
82
|
+
status: "stable" | "unstable";
|
|
83
|
+
}>;
|
|
84
|
+
}
|
|
85
|
+
interface WherebyEmbedElementCommands {
|
|
86
|
+
startRecording: () => void;
|
|
87
|
+
stopRecording: () => void;
|
|
88
|
+
startStreaming: () => void;
|
|
89
|
+
stopStreaming: () => void;
|
|
90
|
+
toggleCamera: (enabled?: boolean) => void;
|
|
91
|
+
toggleMicrophone: (enabled?: boolean) => void;
|
|
92
|
+
toggleScreenshare: (enabled?: boolean) => void;
|
|
93
|
+
toogleChat: (enabled?: boolean) => void;
|
|
94
|
+
}
|
|
95
|
+
interface WherebyEmbedElement extends HTMLIFrameElement, WherebyEmbedElementCommands {
|
|
96
|
+
addEventListener<K extends keyof (WherebyEmbedElementEventMap & HTMLElementEventMap)>(type: K, listener: (this: HTMLIFrameElement, ev: (WherebyEmbedElementEventMap & HTMLElementEventMap)[K]) => void, options?: boolean | AddEventListenerOptions | undefined): void;
|
|
97
|
+
}
|
|
98
|
+
declare global {
|
|
99
|
+
namespace JSX {
|
|
100
|
+
interface IntrinsicElements {
|
|
101
|
+
["whereby-embed"]: Partial<WherebyEmbedElementAttributes>;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
declare const _default: {
|
|
106
|
+
sdkVersion: string;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export { type WherebyEmbedElement, _default as default };
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { define, ref } from 'heresy';
|
|
2
|
+
|
|
3
|
+
function parseRoomUrlAndSubdomain(roomAttribute, subdomainAttribute) {
|
|
4
|
+
if (!roomAttribute) {
|
|
5
|
+
throw new Error("Missing room attribute");
|
|
6
|
+
}
|
|
7
|
+
// Get subdomain from room URL, or use it specified
|
|
8
|
+
const m = /https:\/\/([^.]+)(\.whereby\.com|-ip-\d+-\d+-\d+-\d+.hereby.dev:4443)\/.+/.exec(roomAttribute);
|
|
9
|
+
const subdomain = (m && m[1]) || subdomainAttribute;
|
|
10
|
+
if (!subdomain) {
|
|
11
|
+
throw new Error("Missing subdomain attribute");
|
|
12
|
+
}
|
|
13
|
+
if (!m) {
|
|
14
|
+
throw new Error("Could not parse room URL");
|
|
15
|
+
}
|
|
16
|
+
const roomUrl = new URL(roomAttribute);
|
|
17
|
+
return {
|
|
18
|
+
subdomain,
|
|
19
|
+
roomUrl,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const sdkVersion = "2.1.0-beta.2";
|
|
24
|
+
|
|
25
|
+
const boolAttrs = [
|
|
26
|
+
"audio",
|
|
27
|
+
"background",
|
|
28
|
+
"cameraAccess",
|
|
29
|
+
"chat",
|
|
30
|
+
"people",
|
|
31
|
+
"embed",
|
|
32
|
+
"emptyRoomInvitation",
|
|
33
|
+
"help",
|
|
34
|
+
"leaveButton",
|
|
35
|
+
"precallReview",
|
|
36
|
+
"screenshare",
|
|
37
|
+
"video",
|
|
38
|
+
"floatSelf",
|
|
39
|
+
"recording",
|
|
40
|
+
"logo",
|
|
41
|
+
"locking",
|
|
42
|
+
"participantCount",
|
|
43
|
+
"settingsButton",
|
|
44
|
+
"pipButton",
|
|
45
|
+
"moreButton",
|
|
46
|
+
"personality",
|
|
47
|
+
"subgridLabels",
|
|
48
|
+
"lowData",
|
|
49
|
+
"breakout",
|
|
50
|
+
];
|
|
51
|
+
define("WherebyEmbed", {
|
|
52
|
+
oninit() {
|
|
53
|
+
this.iframe = ref();
|
|
54
|
+
},
|
|
55
|
+
onconnected() {
|
|
56
|
+
window.addEventListener("message", this.onmessage.bind(this));
|
|
57
|
+
},
|
|
58
|
+
ondisconnected() {
|
|
59
|
+
window.removeEventListener("message", this.onmessage.bind(this));
|
|
60
|
+
},
|
|
61
|
+
observedAttributes: [
|
|
62
|
+
"displayName",
|
|
63
|
+
"minimal",
|
|
64
|
+
"room",
|
|
65
|
+
"subdomain",
|
|
66
|
+
"lang",
|
|
67
|
+
"metadata",
|
|
68
|
+
"groups",
|
|
69
|
+
"virtualBackgroundUrl",
|
|
70
|
+
"avatarUrl",
|
|
71
|
+
"externalId",
|
|
72
|
+
"title",
|
|
73
|
+
...boolAttrs,
|
|
74
|
+
].map((a) => a.toLowerCase()),
|
|
75
|
+
onattributechanged({ attributeName, oldValue }) {
|
|
76
|
+
if (["room", "subdomain"].includes(attributeName) && oldValue == null)
|
|
77
|
+
return;
|
|
78
|
+
this.render();
|
|
79
|
+
},
|
|
80
|
+
style(self) {
|
|
81
|
+
return `
|
|
82
|
+
${self} {
|
|
83
|
+
display: block;
|
|
84
|
+
}
|
|
85
|
+
${self} iframe {
|
|
86
|
+
border: none;
|
|
87
|
+
height: 100%;
|
|
88
|
+
width: 100%;
|
|
89
|
+
}
|
|
90
|
+
`;
|
|
91
|
+
},
|
|
92
|
+
// Commands
|
|
93
|
+
_postCommand(command, args = []) {
|
|
94
|
+
if (this.iframe.current) {
|
|
95
|
+
this.iframe.current.contentWindow.postMessage({ command, args }, this.roomUrl.origin);
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
startRecording() {
|
|
99
|
+
this._postCommand("start_recording");
|
|
100
|
+
},
|
|
101
|
+
stopRecording() {
|
|
102
|
+
this._postCommand("stop_recording");
|
|
103
|
+
},
|
|
104
|
+
startStreaming() {
|
|
105
|
+
this._postCommand("start_streaming");
|
|
106
|
+
},
|
|
107
|
+
stopStreaming() {
|
|
108
|
+
this._postCommand("stop_streaming");
|
|
109
|
+
},
|
|
110
|
+
toggleCamera(enabled) {
|
|
111
|
+
this._postCommand("toggle_camera", [enabled]);
|
|
112
|
+
},
|
|
113
|
+
toggleMicrophone(enabled) {
|
|
114
|
+
this._postCommand("toggle_microphone", [enabled]);
|
|
115
|
+
},
|
|
116
|
+
toggleScreenshare(enabled) {
|
|
117
|
+
this._postCommand("toggle_screenshare", [enabled]);
|
|
118
|
+
},
|
|
119
|
+
toggleChat(enabled) {
|
|
120
|
+
this._postCommand("toggle_chat", [enabled]);
|
|
121
|
+
},
|
|
122
|
+
onmessage({ origin, data, }) {
|
|
123
|
+
if (!this.roomUrl || origin !== this.roomUrl.origin)
|
|
124
|
+
return;
|
|
125
|
+
const { type, payload: detail } = data;
|
|
126
|
+
this.dispatchEvent(new CustomEvent(type, { detail }));
|
|
127
|
+
},
|
|
128
|
+
render() {
|
|
129
|
+
const { avatarurl: avatarUrl, displayname: displayName, lang, metadata, externalid: externalId, minimal, room, groups, virtualbackgroundurl: virtualBackgroundUrl, title, } = this;
|
|
130
|
+
let roomUrl, subdomain;
|
|
131
|
+
try {
|
|
132
|
+
({ roomUrl, subdomain } = parseRoomUrlAndSubdomain(room, this.subdomain));
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return this.html `Whereby: ${error instanceof Error ? error.message : "unknown error"}`;
|
|
136
|
+
}
|
|
137
|
+
this.roomUrl = roomUrl;
|
|
138
|
+
Object.entries(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ jsApi: true, we: sdkVersion, iframeSource: subdomain }, (displayName && { displayName })), (lang && { lang: lang })), (metadata && { metadata: metadata })), (externalId && { externalId })), (groups && { groups: groups })), (virtualBackgroundUrl && { virtualBackgroundUrl: virtualBackgroundUrl })), (avatarUrl && { avatarUrl: avatarUrl })), (minimal != null && { embed: minimal })), boolAttrs.reduce(
|
|
139
|
+
// add to URL if set in any way
|
|
140
|
+
(o, v) => (this[v.toLowerCase()] != null ? Object.assign(Object.assign({}, o), { [v]: this[v.toLowerCase()] }) : o), {}))).forEach(([k, v]) => {
|
|
141
|
+
if (!this.roomUrl.searchParams.has(k)) {
|
|
142
|
+
this.roomUrl.searchParams.set(k, v);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
this.html `
|
|
146
|
+
<iframe
|
|
147
|
+
title=${title || "Video calling component"}
|
|
148
|
+
ref=${this.iframe}
|
|
149
|
+
src=${this.roomUrl}
|
|
150
|
+
allow="autoplay; camera; microphone; fullscreen; speaker; display-capture; media-capture" />
|
|
151
|
+
`;
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
var index = { sdkVersion: sdkVersion };
|
|
155
|
+
|
|
156
|
+
export { index as default };
|