@digitalsamba/embedded-sdk 0.0.13 → 0.0.17
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/README.md +1 -0
- package/dist/cjs/index.d.ts +16 -3
- package/dist/cjs/index.js +120 -14
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +89 -15
- package/dist/cjs/types.js +0 -6
- package/dist/cjs/utils/PermissionManager/index.d.ts +13 -0
- package/dist/cjs/utils/PermissionManager/index.js +74 -0
- package/dist/cjs/utils/PermissionManager/types.d.ts +23 -0
- package/dist/cjs/utils/PermissionManager/types.js +2 -0
- package/dist/cjs/utils/proxy.d.ts +1 -0
- package/dist/cjs/utils/proxy.js +21 -0
- package/dist/cjs/utils/vars.d.ts +23 -0
- package/dist/cjs/utils/vars.js +48 -0
- package/dist/esm/index.d.ts +16 -3
- package/dist/esm/index.js +118 -12
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +89 -15
- package/dist/esm/types.js +1 -5
- package/dist/esm/utils/PermissionManager/index.d.ts +13 -0
- package/dist/esm/utils/PermissionManager/index.js +70 -0
- package/dist/esm/utils/PermissionManager/types.d.ts +23 -0
- package/dist/esm/utils/PermissionManager/types.js +1 -0
- package/dist/esm/utils/proxy.d.ts +1 -0
- package/dist/esm/utils/proxy.js +17 -0
- package/dist/esm/utils/vars.d.ts +23 -0
- package/dist/esm/utils/vars.js +45 -0
- package/dist/index.html +98 -3
- package/dist/initial-config-demo.html +303 -0
- package/dist/permissions-demo.html +289 -0
- package/dist/types/index.d.ts +16 -3
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/types.d.ts +89 -15
- package/dist/types/utils/PermissionManager/index.d.ts +13 -0
- package/dist/types/utils/PermissionManager/types.d.ts +23 -0
- package/dist/types/utils/proxy.d.ts +1 -0
- package/dist/types/utils/vars.d.ts +23 -0
- package/dist/umd/index.js +1 -1
- package/package.json +1 -1
@@ -0,0 +1,13 @@
|
|
1
|
+
import { CheckPermissionsOptions, HasPermissionsOptions, LookupPermissionOptions, PermissionsMap, RefinePermissionsOptions } from './types';
|
2
|
+
import { PermissionTypes } from '../vars';
|
3
|
+
import { EmbeddedInstance } from '../../types';
|
4
|
+
export declare class PermissionManager {
|
5
|
+
parent: EmbeddedInstance;
|
6
|
+
permissionsMap: PermissionsMap;
|
7
|
+
constructor(parent: EmbeddedInstance);
|
8
|
+
lookupDynamicPermission: (permission: PermissionTypes, dynamicPermissions: PermissionTypes[] | undefined) => boolean;
|
9
|
+
lookupPermission: (options: LookupPermissionOptions) => boolean;
|
10
|
+
checkPermissions: ({ permissions, targetRole, permissionsMap, role, dynamicPermissions, }: CheckPermissionsOptions) => boolean;
|
11
|
+
refinePermissions: (permissions: PermissionTypes | PermissionTypes[], { targetRole, role, userId, users, permissionsMap, localUser }: RefinePermissionsOptions) => boolean;
|
12
|
+
hasPermissions: (permissions: PermissionTypes | PermissionTypes[], { targetRole, role, userId }?: HasPermissionsOptions) => boolean;
|
13
|
+
}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.PermissionManager = void 0;
|
4
|
+
class PermissionManager {
|
5
|
+
constructor(parent) {
|
6
|
+
this.permissionsMap = {};
|
7
|
+
this.lookupDynamicPermission = (permission, dynamicPermissions) => {
|
8
|
+
if (!dynamicPermissions) {
|
9
|
+
return false;
|
10
|
+
}
|
11
|
+
return dynamicPermissions.includes(permission);
|
12
|
+
};
|
13
|
+
this.lookupPermission = (options) => {
|
14
|
+
const { permissionsMap, permission, targetRole, role, dynamicPermissions } = options;
|
15
|
+
if (dynamicPermissions) {
|
16
|
+
const granted = this.lookupDynamicPermission(permission, dynamicPermissions);
|
17
|
+
if (granted) {
|
18
|
+
return true;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
if (permissionsMap[role][permission]) {
|
22
|
+
return true;
|
23
|
+
}
|
24
|
+
return Boolean(permissionsMap[role][`${permission}_${targetRole}`]);
|
25
|
+
};
|
26
|
+
this.checkPermissions = ({ permissions, targetRole, permissionsMap, role, dynamicPermissions, }) => {
|
27
|
+
if (Array.isArray(permissions)) {
|
28
|
+
return permissions.some((permission) => this.lookupPermission({ permission, targetRole, role, permissionsMap, dynamicPermissions }));
|
29
|
+
}
|
30
|
+
return this.lookupPermission({
|
31
|
+
permission: permissions,
|
32
|
+
targetRole,
|
33
|
+
role,
|
34
|
+
permissionsMap,
|
35
|
+
dynamicPermissions,
|
36
|
+
});
|
37
|
+
};
|
38
|
+
this.refinePermissions = (permissions, { targetRole, role, userId, users, permissionsMap, localUser }) => {
|
39
|
+
const options = {
|
40
|
+
permissionsMap,
|
41
|
+
permissions,
|
42
|
+
targetRole,
|
43
|
+
role: localUser.role,
|
44
|
+
dynamicPermissions: localUser.dynamicPermissions,
|
45
|
+
};
|
46
|
+
if (role) {
|
47
|
+
options.role = role;
|
48
|
+
options.dynamicPermissions = undefined;
|
49
|
+
}
|
50
|
+
if (userId && users) {
|
51
|
+
options.role = users[userId].role;
|
52
|
+
options.dynamicPermissions = users[userId].dynamicPermissions;
|
53
|
+
}
|
54
|
+
return this.checkPermissions(options);
|
55
|
+
};
|
56
|
+
this.hasPermissions = (permissions, { targetRole, role, userId } = {}) => {
|
57
|
+
const users = this.parent.stored.users;
|
58
|
+
const localUser = this.parent.localUser;
|
59
|
+
if (!localUser) {
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
return this.refinePermissions(permissions, {
|
63
|
+
permissionsMap: this.permissionsMap,
|
64
|
+
role,
|
65
|
+
targetRole,
|
66
|
+
users,
|
67
|
+
userId,
|
68
|
+
localUser,
|
69
|
+
});
|
70
|
+
};
|
71
|
+
this.parent = parent;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
exports.PermissionManager = PermissionManager;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { User, UserId } from '../../types';
|
2
|
+
import { PermissionTypes } from '../vars';
|
3
|
+
export type PermissionsMap = Record<string, Record<string, boolean>>;
|
4
|
+
export interface HasPermissionsOptions {
|
5
|
+
targetRole?: string;
|
6
|
+
role?: string;
|
7
|
+
userId?: UserId;
|
8
|
+
}
|
9
|
+
export interface RefinePermissionsOptions extends HasPermissionsOptions {
|
10
|
+
permissionsMap: PermissionsMap;
|
11
|
+
localUser: User;
|
12
|
+
users?: Record<UserId, User>;
|
13
|
+
}
|
14
|
+
export interface LookupPermissionOptions {
|
15
|
+
permissionsMap: PermissionsMap;
|
16
|
+
permission: PermissionTypes;
|
17
|
+
role: string;
|
18
|
+
targetRole?: string;
|
19
|
+
dynamicPermissions?: PermissionTypes[];
|
20
|
+
}
|
21
|
+
export interface CheckPermissionsOptions extends Omit<LookupPermissionOptions, 'permission'> {
|
22
|
+
permissions: PermissionTypes | PermissionTypes[];
|
23
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const createWatchedProxy: <G>(initialState: G, onChange: (newState: G) => void) => any;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.createWatchedProxy = void 0;
|
4
|
+
const createHandler = (onChange) => {
|
5
|
+
const handler = {
|
6
|
+
get(target, key) {
|
7
|
+
if (typeof target[key] === 'object' && target[key] !== null) {
|
8
|
+
return new Proxy(target[key], handler);
|
9
|
+
}
|
10
|
+
return target[key];
|
11
|
+
},
|
12
|
+
set(target, prop, value) {
|
13
|
+
target[prop] = value;
|
14
|
+
onChange(target);
|
15
|
+
return target;
|
16
|
+
},
|
17
|
+
};
|
18
|
+
return handler;
|
19
|
+
};
|
20
|
+
const createWatchedProxy = (initialState, onChange) => new Proxy(initialState, createHandler(onChange));
|
21
|
+
exports.createWatchedProxy = createWatchedProxy;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { Stored } from '../types';
|
2
|
+
export declare const CONNECT_TIMEOUT = 10000;
|
3
|
+
export declare const internalEvents: Record<string, boolean>;
|
4
|
+
export declare enum LayoutMode {
|
5
|
+
tiled = "tiled",
|
6
|
+
auto = "auto"
|
7
|
+
}
|
8
|
+
export declare enum PermissionTypes {
|
9
|
+
broadcast = "broadcast",
|
10
|
+
manageBroadcast = "manage_broadcast",
|
11
|
+
endSession = "end_session",
|
12
|
+
startSession = "start_session",
|
13
|
+
removeParticipant = "remove_participant",
|
14
|
+
screenshare = "screenshare",
|
15
|
+
manageScreenshare = "manage_screenshare",
|
16
|
+
recording = "recording",
|
17
|
+
generalChat = "general_chat",
|
18
|
+
remoteMuting = "remote_muting",
|
19
|
+
askRemoteUnmute = "ask_remote_unmute",
|
20
|
+
raiseHand = "raise_hand",
|
21
|
+
manageRoles = "manage_roles"
|
22
|
+
}
|
23
|
+
export declare const defaultStoredState: Stored;
|
@@ -0,0 +1,48 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.defaultStoredState = exports.PermissionTypes = exports.LayoutMode = exports.internalEvents = exports.CONNECT_TIMEOUT = void 0;
|
4
|
+
exports.CONNECT_TIMEOUT = 10000;
|
5
|
+
exports.internalEvents = {
|
6
|
+
roomJoined: true,
|
7
|
+
};
|
8
|
+
var LayoutMode;
|
9
|
+
(function (LayoutMode) {
|
10
|
+
LayoutMode["tiled"] = "tiled";
|
11
|
+
LayoutMode["auto"] = "auto";
|
12
|
+
})(LayoutMode = exports.LayoutMode || (exports.LayoutMode = {}));
|
13
|
+
var PermissionTypes;
|
14
|
+
(function (PermissionTypes) {
|
15
|
+
PermissionTypes["broadcast"] = "broadcast";
|
16
|
+
PermissionTypes["manageBroadcast"] = "manage_broadcast";
|
17
|
+
PermissionTypes["endSession"] = "end_session";
|
18
|
+
PermissionTypes["startSession"] = "start_session";
|
19
|
+
PermissionTypes["removeParticipant"] = "remove_participant";
|
20
|
+
PermissionTypes["screenshare"] = "screenshare";
|
21
|
+
PermissionTypes["manageScreenshare"] = "manage_screenshare";
|
22
|
+
PermissionTypes["recording"] = "recording";
|
23
|
+
PermissionTypes["generalChat"] = "general_chat";
|
24
|
+
PermissionTypes["remoteMuting"] = "remote_muting";
|
25
|
+
PermissionTypes["askRemoteUnmute"] = "ask_remote_unmute";
|
26
|
+
PermissionTypes["raiseHand"] = "raise_hand";
|
27
|
+
PermissionTypes["manageRoles"] = "manage_roles";
|
28
|
+
})(PermissionTypes = exports.PermissionTypes || (exports.PermissionTypes = {}));
|
29
|
+
exports.defaultStoredState = {
|
30
|
+
userId: '',
|
31
|
+
roomState: {
|
32
|
+
media: {
|
33
|
+
micEnabled: false,
|
34
|
+
cameraEnabled: false,
|
35
|
+
},
|
36
|
+
layout: {
|
37
|
+
mode: LayoutMode.tiled,
|
38
|
+
showToolbar: true,
|
39
|
+
toolbarPosition: 'left',
|
40
|
+
},
|
41
|
+
captionsState: {
|
42
|
+
showCaptions: false,
|
43
|
+
spokenLanguage: 'en',
|
44
|
+
fontSize: 'medium',
|
45
|
+
},
|
46
|
+
},
|
47
|
+
users: {},
|
48
|
+
};
|
package/dist/esm/index.d.ts
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
/// <reference types="node" />
|
2
|
-
import { InitOptions, InstanceProperties, LayoutMode, UserId, CaptionsOptions } from './types';
|
3
2
|
import EventEmitter from 'events';
|
4
|
-
|
3
|
+
import { PermissionManager } from './utils/PermissionManager';
|
4
|
+
import { LayoutMode } from './utils/vars';
|
5
|
+
import { CaptionsOptions, EmbeddedInstance, InitialRoomSettings, InitOptions, InstanceProperties, Stored, UserId } from './types';
|
6
|
+
export declare class DigitalSambaEmbedded extends EventEmitter implements EmbeddedInstance {
|
5
7
|
initOptions: Partial<InitOptions>;
|
8
|
+
roomSettings: Partial<InitialRoomSettings>;
|
6
9
|
savedIframeSrc: string;
|
7
10
|
allowedOrigin: string;
|
8
11
|
connected: boolean;
|
9
12
|
frame: HTMLIFrameElement;
|
10
13
|
reportErrors: boolean;
|
11
|
-
|
14
|
+
stored: Stored;
|
15
|
+
permissionManager: PermissionManager;
|
12
16
|
constructor(options?: Partial<InitOptions>, instanceProperties?: Partial<InstanceProperties>, loadImmediately?: boolean);
|
13
17
|
static createControl: (initOptions: InitOptions) => DigitalSambaEmbedded;
|
14
18
|
private mountFrame;
|
@@ -18,11 +22,14 @@ export declare class DigitalSambaEmbedded extends EventEmitter {
|
|
18
22
|
private _emit;
|
19
23
|
private handleInternalMessage;
|
20
24
|
private emitUsersUpdated;
|
25
|
+
private emitRoomStateUpdated;
|
21
26
|
private setFrameSrc;
|
22
27
|
private checkTarget;
|
23
28
|
private sendMessage;
|
24
29
|
private logError;
|
25
30
|
private applyFrameProperties;
|
31
|
+
get roomState(): import("./types").RoomState;
|
32
|
+
get localUser(): import("./types").User;
|
26
33
|
enableVideo: () => void;
|
27
34
|
disableVideo: () => void;
|
28
35
|
toggleVideo: (enable?: boolean) => void;
|
@@ -48,4 +55,10 @@ export declare class DigitalSambaEmbedded extends EventEmitter {
|
|
48
55
|
hideCaptions: () => void;
|
49
56
|
toggleCaptions: (show?: boolean) => void;
|
50
57
|
configureCaptions: (options: Partial<CaptionsOptions>) => void;
|
58
|
+
raiseHand: () => void;
|
59
|
+
lowerHand: (target?: UserId) => void;
|
60
|
+
allowBroadcast: (userId: UserId) => void;
|
61
|
+
disallowBroadcast: (userId: UserId) => void;
|
62
|
+
allowScreenshare: (userId: UserId) => void;
|
63
|
+
disallowScreenshare: (userId: UserId) => void;
|
51
64
|
}
|
package/dist/esm/index.js
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
var _a;
|
2
|
-
import { ALLOW_ATTRIBUTE_MISSING, INVALID_CONFIG, INVALID_URL, UNKNOWN_TARGET, } from './utils/errors';
|
3
2
|
import EventEmitter from 'events';
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
};
|
3
|
+
import { PermissionManager } from './utils/PermissionManager';
|
4
|
+
import { CONNECT_TIMEOUT, defaultStoredState, internalEvents, } from './utils/vars';
|
5
|
+
import { createWatchedProxy } from './utils/proxy';
|
6
|
+
import { ALLOW_ATTRIBUTE_MISSING, INVALID_CONFIG, INVALID_URL, UNKNOWN_TARGET, } from './utils/errors';
|
8
7
|
export class DigitalSambaEmbedded extends EventEmitter {
|
9
8
|
constructor(options = {}, instanceProperties = {}, loadImmediately = true) {
|
10
9
|
super();
|
10
|
+
this.roomSettings = {};
|
11
11
|
this.savedIframeSrc = '';
|
12
12
|
this.allowedOrigin = '*';
|
13
13
|
this.connected = false;
|
14
14
|
this.frame = document.createElement('iframe');
|
15
15
|
this.reportErrors = false;
|
16
|
-
this.stored = {
|
17
|
-
|
18
|
-
localUserPermissions: {},
|
19
|
-
};
|
16
|
+
this.stored = Object.assign({}, defaultStoredState);
|
17
|
+
this.permissionManager = new PermissionManager(this);
|
20
18
|
this.mountFrame = (loadImmediately) => {
|
21
19
|
const { url, frame, root } = this.initOptions;
|
22
20
|
if (root) {
|
@@ -74,6 +72,9 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
74
72
|
this.on('userJoined', (event) => {
|
75
73
|
const { user, type } = event.data;
|
76
74
|
this.stored.users[user.id] = Object.assign(Object.assign({}, user), { kind: type });
|
75
|
+
if (type === 'local') {
|
76
|
+
this.stored.userId = user.id;
|
77
|
+
}
|
77
78
|
this.emitUsersUpdated();
|
78
79
|
});
|
79
80
|
this.on('userLeft', (event) => {
|
@@ -84,7 +85,58 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
84
85
|
this.emitUsersUpdated();
|
85
86
|
});
|
86
87
|
this.on('permissionsChanged', (event) => {
|
87
|
-
this.stored.
|
88
|
+
if (this.stored.users[this.stored.userId]) {
|
89
|
+
let modifiedPermissions = [
|
90
|
+
...(this.stored.users[this.stored.userId].dynamicPermissions || []),
|
91
|
+
];
|
92
|
+
Object.entries(event.data).forEach(([permission, enabled]) => {
|
93
|
+
if (enabled && !modifiedPermissions.includes(permission)) {
|
94
|
+
modifiedPermissions.push(permission);
|
95
|
+
}
|
96
|
+
if (!enabled) {
|
97
|
+
modifiedPermissions = modifiedPermissions.filter((userPermission) => userPermission !== permission);
|
98
|
+
}
|
99
|
+
});
|
100
|
+
this.stored.users[this.stored.userId].dynamicPermissions =
|
101
|
+
modifiedPermissions;
|
102
|
+
}
|
103
|
+
});
|
104
|
+
this.on('activeSpeakerChanged', (event) => {
|
105
|
+
var _b, _c;
|
106
|
+
this.stored.activeSpeaker = (_c = (_b = event.data) === null || _b === void 0 ? void 0 : _b.user) === null || _c === void 0 ? void 0 : _c.id;
|
107
|
+
});
|
108
|
+
this.on('videoEnabled', (event) => {
|
109
|
+
var _b;
|
110
|
+
if (((_b = event.data) === null || _b === void 0 ? void 0 : _b.type) === 'local') {
|
111
|
+
this.stored.roomState.media.cameraEnabled = true;
|
112
|
+
}
|
113
|
+
});
|
114
|
+
this.on('videoDisabled', (event) => {
|
115
|
+
var _b;
|
116
|
+
if (((_b = event.data) === null || _b === void 0 ? void 0 : _b.type) === 'local') {
|
117
|
+
this.stored.roomState.media.cameraEnabled = false;
|
118
|
+
}
|
119
|
+
});
|
120
|
+
this.on('audioEnabled', (event) => {
|
121
|
+
var _b;
|
122
|
+
if (((_b = event.data) === null || _b === void 0 ? void 0 : _b.type) === 'local') {
|
123
|
+
this.stored.roomState.media.micEnabled = true;
|
124
|
+
}
|
125
|
+
});
|
126
|
+
this.on('audioDisabled', (event) => {
|
127
|
+
var _b;
|
128
|
+
if (((_b = event.data) === null || _b === void 0 ? void 0 : _b.type) === 'local') {
|
129
|
+
this.stored.roomState.media.micEnabled = false;
|
130
|
+
}
|
131
|
+
});
|
132
|
+
this.on('layoutModeChanged', (event) => {
|
133
|
+
this.stored.roomState.layout.mode = event.data.mode;
|
134
|
+
});
|
135
|
+
this.on('captionsSpokenLanguageChanged', (event) => {
|
136
|
+
this.stored.roomState.captionsState.spokenLanguage = event.data.language;
|
137
|
+
});
|
138
|
+
this.on('captionsFontSizeChanged', (event) => {
|
139
|
+
this.stored.roomState.captionsState.fontSize = event.data.fontSize;
|
88
140
|
});
|
89
141
|
};
|
90
142
|
this._emit = (eventName, ...args) => {
|
@@ -95,8 +147,14 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
95
147
|
const message = event.DSPayload;
|
96
148
|
switch (message.type) {
|
97
149
|
case 'roomJoined': {
|
98
|
-
|
150
|
+
const { users, roomState, activeSpeaker, permissionsMap } = message.data;
|
151
|
+
this.stored.users = Object.assign(Object.assign({}, this.stored.users), users);
|
152
|
+
this.stored.roomState = createWatchedProxy(Object.assign({}, roomState), this.emitRoomStateUpdated);
|
153
|
+
this.stored.activeSpeaker = activeSpeaker;
|
154
|
+
this.permissionManager.permissionsMap = permissionsMap;
|
99
155
|
this.emitUsersUpdated();
|
156
|
+
this.emitRoomStateUpdated();
|
157
|
+
this._emit('roomJoined', { type: 'roomJoined' });
|
100
158
|
break;
|
101
159
|
}
|
102
160
|
default: {
|
@@ -107,6 +165,9 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
107
165
|
this.emitUsersUpdated = () => {
|
108
166
|
this._emit('usersUpdated', { type: 'usersUpdated', data: { users: this.listUsers() } });
|
109
167
|
};
|
168
|
+
this.emitRoomStateUpdated = () => {
|
169
|
+
this._emit('roomStateUpdated', { type: 'roomStateUpdated', data: { state: this.roomState } });
|
170
|
+
};
|
110
171
|
this.setFrameSrc = () => {
|
111
172
|
let url = this.savedIframeSrc;
|
112
173
|
const { team, room, token } = this.initOptions;
|
@@ -152,9 +213,11 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
152
213
|
};
|
153
214
|
// commands
|
154
215
|
this.enableVideo = () => {
|
216
|
+
this.roomSettings.cameraEnabled = true;
|
155
217
|
this.sendMessage({ type: 'enableVideo' });
|
156
218
|
};
|
157
219
|
this.disableVideo = () => {
|
220
|
+
this.roomSettings.cameraEnabled = false;
|
158
221
|
this.sendMessage({ type: 'disableVideo' });
|
159
222
|
};
|
160
223
|
this.toggleVideo = (enable) => {
|
@@ -169,9 +232,11 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
169
232
|
}
|
170
233
|
};
|
171
234
|
this.enableAudio = () => {
|
235
|
+
this.roomSettings.micEnabled = true;
|
172
236
|
this.sendMessage({ type: 'enableAudio' });
|
173
237
|
};
|
174
238
|
this.disableAudio = () => {
|
239
|
+
this.roomSettings.micEnabled = false;
|
175
240
|
this.sendMessage({ type: 'disableAudio' });
|
176
241
|
};
|
177
242
|
this.toggleAudio = (enable) => {
|
@@ -198,12 +263,17 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
198
263
|
this.sendMessage({ type: 'stopRecording' });
|
199
264
|
};
|
200
265
|
this.showToolbar = () => {
|
266
|
+
this.roomSettings.showToolbar = true;
|
267
|
+
this.stored.roomState.layout.showToolbar = true;
|
201
268
|
this.sendMessage({ type: 'showToolbar' });
|
202
269
|
};
|
203
270
|
this.hideToolbar = () => {
|
271
|
+
this.roomSettings.showToolbar = false;
|
272
|
+
this.stored.roomState.layout.showToolbar = false;
|
204
273
|
this.sendMessage({ type: 'hideToolbar' });
|
205
274
|
};
|
206
275
|
this.changeLayoutMode = (mode) => {
|
276
|
+
this.roomSettings.layoutMode = mode;
|
207
277
|
this.sendMessage({ type: 'changeLayoutMode', data: mode });
|
208
278
|
};
|
209
279
|
this.leaveSession = () => {
|
@@ -214,6 +284,7 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
214
284
|
};
|
215
285
|
this.toggleToolbar = (show) => {
|
216
286
|
if (typeof show === 'undefined') {
|
287
|
+
this.stored.roomState.layout.showToolbar = !this.stored.roomState.layout.showToolbar;
|
217
288
|
this.sendMessage({ type: 'toggleToolbar' });
|
218
289
|
}
|
219
290
|
else if (show) {
|
@@ -245,13 +316,19 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
245
316
|
};
|
246
317
|
this.listUsers = () => Object.values(this.stored.users);
|
247
318
|
this.showCaptions = () => {
|
319
|
+
this.roomSettings.showCaptions = true;
|
320
|
+
this.stored.roomState.captionsState.showCaptions = true;
|
248
321
|
this.sendMessage({ type: 'showCaptions' });
|
249
322
|
};
|
250
323
|
this.hideCaptions = () => {
|
324
|
+
this.roomSettings.showCaptions = false;
|
325
|
+
this.stored.roomState.captionsState.showCaptions = false;
|
251
326
|
this.sendMessage({ type: 'hideCaptions' });
|
252
327
|
};
|
253
328
|
this.toggleCaptions = (show) => {
|
254
329
|
if (typeof show === 'undefined') {
|
330
|
+
this.stored.roomState.captionsState.showCaptions =
|
331
|
+
!this.stored.roomState.captionsState.showCaptions;
|
255
332
|
this.sendMessage({ type: 'toggleCaptions' });
|
256
333
|
}
|
257
334
|
else if (show) {
|
@@ -264,7 +341,26 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
264
341
|
this.configureCaptions = (options) => {
|
265
342
|
this.sendMessage({ type: 'configureCaptions', data: options || {} });
|
266
343
|
};
|
344
|
+
this.raiseHand = () => {
|
345
|
+
this.sendMessage({ type: 'raiseHand' });
|
346
|
+
};
|
347
|
+
this.lowerHand = (target) => {
|
348
|
+
this.sendMessage({ type: 'lowerHand', data: target });
|
349
|
+
};
|
350
|
+
this.allowBroadcast = (userId) => {
|
351
|
+
this.sendMessage({ type: 'allowBroadcast', data: userId });
|
352
|
+
};
|
353
|
+
this.disallowBroadcast = (userId) => {
|
354
|
+
this.sendMessage({ type: 'disallowBroadcast', data: userId });
|
355
|
+
};
|
356
|
+
this.allowScreenshare = (userId) => {
|
357
|
+
this.sendMessage({ type: 'allowScreenshare', data: userId });
|
358
|
+
};
|
359
|
+
this.disallowScreenshare = (userId) => {
|
360
|
+
this.sendMessage({ type: 'disallowScreenshare', data: userId });
|
361
|
+
};
|
267
362
|
this.initOptions = options;
|
363
|
+
this.roomSettings = options.roomSettings || {};
|
268
364
|
this.reportErrors = instanceProperties.reportErrors || false;
|
269
365
|
this.frame.allow = 'camera; microphone; display-capture; autoplay;';
|
270
366
|
this.frame.setAttribute('allowFullscreen', 'true');
|
@@ -279,7 +375,7 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
279
375
|
this.setupInternalEventListeners();
|
280
376
|
}
|
281
377
|
checkTarget() {
|
282
|
-
this.sendMessage({ type: 'connect' });
|
378
|
+
this.sendMessage({ type: 'connect', data: this.roomSettings || {} });
|
283
379
|
const confirmationTimeout = window.setTimeout(() => {
|
284
380
|
this.logError(UNKNOWN_TARGET);
|
285
381
|
}, CONNECT_TIMEOUT);
|
@@ -290,11 +386,21 @@ export class DigitalSambaEmbedded extends EventEmitter {
|
|
290
386
|
}
|
291
387
|
sendMessage(message) {
|
292
388
|
if (this.frame.contentWindow) {
|
389
|
+
if (!this.connected && message.type !== 'connect') {
|
390
|
+
return;
|
391
|
+
}
|
293
392
|
this.frame.contentWindow.postMessage(message, {
|
294
393
|
targetOrigin: this.allowedOrigin,
|
295
394
|
});
|
296
395
|
}
|
297
396
|
}
|
397
|
+
// getters
|
398
|
+
get roomState() {
|
399
|
+
return this.stored.roomState;
|
400
|
+
}
|
401
|
+
get localUser() {
|
402
|
+
return this.stored.users[this.stored.userId];
|
403
|
+
}
|
298
404
|
}
|
299
405
|
_a = DigitalSambaEmbedded;
|
300
406
|
DigitalSambaEmbedded.createControl = (initOptions) => new _a(initOptions, {}, false);
|