@digitalsamba/embedded-sdk 0.0.41 → 0.0.43

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.
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.DigitalSambaEmbedded=t():e.DigitalSambaEmbedded=t()}(this,(()=>(()=>{"use strict";var e={187:e=>{var t,s="object"==typeof Reflect?Reflect:null,i=s&&"function"==typeof s.apply?s.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)};t=s&&"function"==typeof s.ownKeys?s.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function n(){n.init.call(this)}e.exports=n,e.exports.once=function(e,t){return new Promise((function(s,i){function o(s){e.removeListener(t,n),i(s)}function n(){"function"==typeof e.removeListener&&e.removeListener("error",o),s([].slice.call(arguments))}g(e,t,n,{once:!0}),"error"!==t&&function(e,t,s){"function"==typeof e.on&&g(e,"error",t,{once:!0})}(e,o)}))},n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var r=10;function a(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function d(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function h(e,t,s,i){var o,n,r,h;if(a(s),void 0===(n=e._events)?(n=e._events=Object.create(null),e._eventsCount=0):(void 0!==n.newListener&&(e.emit("newListener",t,s.listener?s.listener:s),n=e._events),r=n[t]),void 0===r)r=n[t]=s,++e._eventsCount;else if("function"==typeof r?r=n[t]=i?[s,r]:[r,s]:i?r.unshift(s):r.push(s),(o=d(e))>0&&r.length>o&&!r.warned){r.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+r.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=r.length,h=l,console&&console.warn&&console.warn(h)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function c(e,t,s){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:s},o=l.bind(i);return o.listener=s,i.wrapFn=o,o}function u(e,t,s){var i=e._events;if(void 0===i)return[];var o=i[t];return void 0===o?[]:"function"==typeof o?s?[o.listener||o]:[o]:s?function(e){for(var t=new Array(e.length),s=0;s<t.length;++s)t[s]=e[s].listener||e[s];return t}(o):p(o,o.length)}function m(e){var t=this._events;if(void 0!==t){var s=t[e];if("function"==typeof s)return 1;if(void 0!==s)return s.length}return 0}function p(e,t){for(var s=new Array(t),i=0;i<t;++i)s[i]=e[i];return s}function g(e,t,s,i){if("function"==typeof e.on)i.once?e.once(t,s):e.on(t,s);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function o(n){i.once&&e.removeEventListener(t,o),s(n)}))}}Object.defineProperty(n,"defaultMaxListeners",{enumerable:!0,get:function(){return r},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");r=e}}),n.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},n.prototype.getMaxListeners=function(){return d(this)},n.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var o="error"===e,n=this._events;if(void 0!==n)o=o&&void 0===n.error;else if(!o)return!1;if(o){var r;if(t.length>0&&(r=t[0]),r instanceof Error)throw r;var a=new Error("Unhandled error."+(r?" ("+r.message+")":""));throw a.context=r,a}var d=n[e];if(void 0===d)return!1;if("function"==typeof d)i(d,this,t);else{var h=d.length,l=p(d,h);for(s=0;s<h;++s)i(l[s],this,t)}return!0},n.prototype.addListener=function(e,t){return h(this,e,t,!1)},n.prototype.on=n.prototype.addListener,n.prototype.prependListener=function(e,t){return h(this,e,t,!0)},n.prototype.once=function(e,t){return a(t),this.on(e,c(this,e,t)),this},n.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,c(this,e,t)),this},n.prototype.removeListener=function(e,t){var s,i,o,n,r;if(a(t),void 0===(i=this._events))return this;if(void 0===(s=i[e]))return this;if(s===t||s.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,s.listener||t));else if("function"!=typeof s){for(o=-1,n=s.length-1;n>=0;n--)if(s[n]===t||s[n].listener===t){r=s[n].listener,o=n;break}if(o<0)return this;0===o?s.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(s,o),1===s.length&&(i[e]=s[0]),void 0!==i.removeListener&&this.emit("removeListener",e,r||t)}return this},n.prototype.off=n.prototype.removeListener,n.prototype.removeAllListeners=function(e){var t,s,i;if(void 0===(s=this._events))return this;if(void 0===s.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==s[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete s[e]),this;if(0===arguments.length){var o,n=Object.keys(s);for(i=0;i<n.length;++i)"removeListener"!==(o=n[i])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=s[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},n.prototype.listeners=function(e){return u(this,e,!0)},n.prototype.rawListeners=function(e){return u(this,e,!1)},n.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},n.prototype.listenerCount=m,n.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},432:function(e,t,s){var i,o=this&&this.__awaiter||function(e,t,s,i){return new(s||(s=Promise))((function(o,n){function r(e){try{d(i.next(e))}catch(e){n(e)}}function a(e){try{d(i.throw(e))}catch(e){n(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(r,a)}d((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.DigitalSambaEmbedded=void 0;const n=s(187),r=s(737),a=s(480),d=s(604),h=s(517);class l extends n.EventEmitter{constructor(e={},t={},s=!0){super(),this.roomSettings={},this.savedIframeSrc="",this.allowedOrigin="*",this.connected=!1,this.frame=document.createElement("iframe"),this.reportErrors=!1,this.permissionManager=new r.PermissionManager(this),this.queuedEventListeners=[],this.queuedUICallbacks=[],this.queuedTileActions=[],this.tileActionListeners={},this.mountFrame=e=>{const{url:t,frame:s,root:i}=this.initOptions;if(i?i.appendChild(this.frame):s?(this.frame=s,s.allow||this.logError(h.ALLOW_ATTRIBUTE_MISSING)):document.body.appendChild(this.frame),t||this.frame.src&&this.frame.src!==window.location.href)try{let e=t||this.frame.src;e.includes("https://")||(e="https://"+e);const s=new URL(e).toString();this.frame.src=s,this.savedIframeSrc=s}catch(e){this.logError(h.INVALID_URL)}e||(this.savedIframeSrc=this.frame.src,this.frame.src="")},this.load=(e={})=>{this.reportErrors=e.reportErrors||!1,this.setFrameSrc(),this.applyFrameProperties(e),this.frame.style.display="block"},this.prepareRoomSettings=e=>o(this,void 0,void 0,(function*(){var t;if(null!==(t=e.mediaDevices)&&void 0!==t||(e.mediaDevices={}),e.mediaDevices){const t=yield navigator.mediaDevices.enumerateDevices();Object.entries(e.mediaDevices).forEach((([s,i])=>{const o=t.find((e=>e.deviceId===i));o&&(e.mediaDevices[s]=o.label)}))}if(e.appLanguage&&(this.stored.roomState.appLanguage=e.appLanguage),e.initials)try{e.initials=e.initials.trim()}catch(t){e.initials=void 0}this.roomSettings=e})),this.onMessage=e=>{if(e.origin!==this.allowedOrigin)return;const t=e.data.DSPayload;t&&t.type&&(a.internalEvents[t.type]?this.handleInternalMessage(e.data):this._emit(t.type,t))},this.addFrameEventListener=(e,t,s)=>{const i=`frameEvent_${e}_${t}`;this.connected?this.listenerCount(i)||this.sendMessage({type:"connectEventListener",data:{eventName:e,target:t}}):this.queuedEventListeners.push({operation:"connectEventListener",event:e,target:t}),this.on(i,s)},this.removeFrameEventListener=(e,t,s)=>{const i=`frameEvent_${e}_${t}`;this.off(i,s),this.connected?this.listenerCount(e)||this.sendMessage({type:"disconnectEventListener",data:{eventName:e,target:t}}):this.queuedEventListeners.push({operation:"disconnectEventListener",event:e,target:t})},this.addUICallback=(e,t)=>{const s=`UICallback_${e}`;this.connected?this.listenerCount(s)||this.sendMessage({type:"connectUICallback",data:{name:e}}):this.queuedUICallbacks.push({operation:"connectUICallback",name:e}),this.on(s,t)},this.removeUICallback=(e,t)=>{const s=`UICallback_${e}`;this.off(s,t),this.connected?this.listenerCount(s)||this.sendMessage({type:"disconnectUICallback",data:{name:e}}):this.queuedUICallbacks.push({operation:"disconnectUICallback",name:e})},this.addTileAction=(e,t,s)=>{this.tileActionListeners[e]&&this.removeTileAction(e),this.tileActionListeners[e]=s,this.connected?this.sendMessage({type:"addTileAction",data:{name:e,properties:t}}):this.queuedTileActions.push({operation:"addTileAction",name:e,properties:t}),this.on(`tileAction_${e}`,(t=>{this.tileActionListeners[e](t)}))},this.removeTileAction=e=>{this.off(`tileAction_${e}`,this.tileActionListeners[e]),delete this.tileActionListeners[e],this.connected?this.sendMessage({type:"removeTileAction",data:{name:e}}):this.queuedTileActions.push({operation:"removeTileAction",name:e})},this.setupInternalEventListeners=()=>{this.on("userJoined",(e=>{const{user:t,type:s}=e.data;this.stored.users[t.id]=Object.assign(Object.assign({},t),{kind:s}),"local"===s&&(this.stored.userId=t.id),this.emitUsersUpdated()})),this.on("userLeft",(e=>{var t,s;(null===(s=null===(t=e.data)||void 0===t?void 0:t.user)||void 0===s?void 0:s.id)&&delete this.stored.users[e.data.user.id],this.emitUsersUpdated()})),this.on("appLanguageChanged",(({data:e})=>{this.stored.roomState.appLanguage=e.language})),this.on("permissionsChanged",(e=>{if(this.stored.users[this.stored.userId]){let t=[...this.stored.users[this.stored.userId].dynamicPermissions||[]];Object.entries(e.data).forEach((([e,s])=>{s&&!t.includes(e)&&t.push(e),s||(t=t.filter((t=>t!==e)))})),this.stored.users[this.stored.userId].dynamicPermissions=t}})),this.on("roleChanged",(e=>{const{userId:t,to:s}=e.data;this.stored.users[t]&&(this.stored.users[t].role=s)})),this.on("activeSpeakerChanged",(e=>{var t,s;this.stored.activeSpeaker=null===(s=null===(t=e.data)||void 0===t?void 0:t.user)||void 0===s?void 0:s.id})),this.on("videoEnabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.videoEnabled=!0)})),this.on("videoDisabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.videoEnabled=!1)})),this.on("audioEnabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.audioEnabled=!0)})),this.on("audioDisabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.audioEnabled=!1)})),this.on("layoutModeChanged",(e=>{this.stored.roomState.layout.mode=e.data.mode})),this.on("captionsSpokenLanguageChanged",(e=>{this.stored.roomState.captionsState.spokenLanguage=e.data.language})),this.on("captionsEnabled",(()=>{this.stored.roomState.captionsState.showCaptions=!0})),this.on("captionsDisabled",(()=>{this.stored.roomState.captionsState.showCaptions=!1})),this.on("captionsFontSizeChanged",(e=>{this.stored.roomState.captionsState.fontSize=e.data.fontSize})),this.on("virtualBackgroundChanged",(e=>{const{type:t,value:s,enforced:i,name:o}=e.data.virtualBackgroundConfig;this.stored.roomState.virtualBackground={enabled:!0,type:t,value:s,name:o,enforced:i}})),this.on("virtualBackgroundDisabled",(e=>{this.stored.roomState.virtualBackground={enabled:!1}})),this.on("localTileMinimized",(()=>{this.stored.roomState.layout.localTileMinimized=!0})),this.on("localTileMaximized",(()=>{this.stored.roomState.layout.localTileMinimized=!1})),this.on("userMaximized",(({data:e})=>{this.stored.roomState.layout.content={userId:e.userId,type:e.type},this.stored.roomState.layout.contentMode=e.mode})),this.on("userMinimized",(()=>{this.stored.roomState.layout.content=void 0,this.stored.roomState.layout.contentMode=void 0}))},this._emit=(e,...t)=>(this.emit("*",...t),this.emit(e,...t)),this.handleInternalMessage=e=>o(this,void 0,void 0,(function*(){var t;const s=e.DSPayload;switch(s.type){case"roomJoined":{const{users:e,roomState:t,activeSpeaker:i,permissionsMap:o,features:n}=s.data;this.stored.users=Object.assign(Object.assign({},this.stored.users),e),this.stored.roomState=(0,d.createWatchedProxy)(Object.assign(Object.assign(Object.assign({},this.stored.roomState),t),{media:Object.assign(Object.assign({},this.stored.roomState.media),t.media)}),this.emitRoomStateUpdated),this.stored.activeSpeaker=i,this.stored.features=(0,d.createWatchedProxy)(Object.assign({},n),this.emitFeatureSetUpdated),this.permissionManager.permissionsMap=o,this.emitUsersUpdated(),this.emitFeatureSetUpdated(),this.emitRoomStateUpdated(),this._emit("roomJoined",{type:"roomJoined"});break}case"documentEvent":{const{eventName:e,target:t,payload:i}=s.data,o=`frameEvent_${e}_${t}`;this._emit(o,JSON.parse(i));break}case"UICallback":{const{name:e}=s.data,t=`UICallback_${e}`;this._emit(t,{});break}case"tileAction":{const{name:e,source:t}=s.data,i=`tileAction_${e}`;this._emit(i,t);break}case"userLeftBatch":{const e=null===(t=s.data)||void 0===t?void 0:t.userIds;if(e){for(const t of e){const e=Object.assign({},this.stored.users[t]);this._emit("userLeft",{type:"userLeft",data:{user:e}}),delete this.stored.users[t]}this.emitUsersUpdated()}break}case"internalMediaDeviceChanged":{const e=s.data,t=(yield navigator.mediaDevices.enumerateDevices()).find((t=>t.kind===e.kind&&t.label===e.label));if(t){const s=this.stored.roomState.media.activeDevices[e.kind];this._emit("mediaDeviceChanged",{type:"mediaDeviceChanged",data:Object.assign(Object.assign({},e),{previousDeviceId:s,deviceId:t.deviceId})}),this.stored.roomState.media.activeDevices[e.kind]=t.deviceId}break}}})),this.emitUsersUpdated=()=>{this._emit("usersUpdated",{type:"usersUpdated",data:{users:this.listUsers()}})},this.emitRoomStateUpdated=()=>{this._emit("roomStateUpdated",{type:"roomStateUpdated",data:{state:this.roomState}})},this.emitFeatureSetUpdated=()=>{this._emit("featureSetUpdated",{type:"featureSetUpdated",data:{state:this.stored.features}})},this.setFrameSrc=()=>{let e=this.savedIframeSrc;const{cname:t,team:s,room:i,token:o}=this.initOptions;if(s&&i&&(e=`https://${s}.digitalsamba.com/${i}`),t&&i&&(e=`https://${t}/${i}`),e){const t=new URL(e);t.searchParams.append("dsEmbedFrame","true"),o&&t.searchParams.append("token",o),e=t.toString()}if(!e)return void(this.initOptions.url||this.logError(h.INVALID_CONFIG));this.frame.src=e;const n=new URL(this.frame.src);this.allowedOrigin=n.origin,this.frame.onload=()=>{this._emit("frameLoaded",{type:"frameLoaded"}),this.checkTarget()}},this.logError=e=>{if(this.reportErrors)throw e;console.error(e)},this.applyFrameProperties=e=>{e.frameAttributes&&Object.entries(e.frameAttributes).forEach((([e,t])=>{null!=t?this.frame.setAttribute(e,t.toString()):this.frame.removeAttribute(e)})),e.reportErrors&&(this.reportErrors=!0)},this.enableVideo=()=>{this.roomSettings.videoEnabled=!0,this.sendMessage({type:"enableVideo"})},this.disableVideo=()=>{this.roomSettings.videoEnabled=!1,this.sendMessage({type:"disableVideo"})},this.toggleVideo=e=>{void 0===e?this.sendMessage({type:"toggleVideo"}):e?this.enableVideo():this.disableVideo()},this.enableAudio=()=>{this.roomSettings.audioEnabled=!0,this.sendMessage({type:"enableAudio"})},this.disableAudio=()=>{this.roomSettings.audioEnabled=!1,this.sendMessage({type:"disableAudio"})},this.toggleAudio=e=>{void 0===e?this.sendMessage({type:"toggleAudio"}):e?this.enableAudio():this.disableAudio()},this.startScreenshare=()=>{this.sendMessage({type:"startScreenshare"})},this.stopScreenshare=()=>{this.sendMessage({type:"stopScreenshare"})},this.startRecording=()=>{this.sendMessage({type:"startRecording"})},this.stopRecording=()=>{this.sendMessage({type:"stopRecording"})},this.showToolbar=()=>{this.roomSettings.showToolbar=!0,this.stored.roomState.layout.showToolbar=!0,this.sendMessage({type:"showToolbar"})},this.hideToolbar=()=>{this.roomSettings.showToolbar=!1,this.stored.roomState.layout.showToolbar=!1,this.sendMessage({type:"hideToolbar"})},this.changeToolbarPosition=e=>{this.sendMessage({type:"changeToolbarPosition",data:e})},this.changeBrandingOptions=e=>{this.sendMessage({type:"changeBrandingOptions",data:e})},this.changeLayoutMode=e=>{this.roomSettings.layoutMode=e,this.sendMessage({type:"changeLayoutMode",data:e})},this.leaveSession=()=>{this.sendMessage({type:"leaveSession"})},this.endSession=(e=!0)=>{this.sendMessage({type:"endSession",data:e})},this.toggleToolbar=e=>{void 0===e?(this.stored.roomState.layout.showToolbar=!this.stored.roomState.layout.showToolbar,this.sendMessage({type:"toggleToolbar"})):e?this.showToolbar():this.hideToolbar()},this.requestToggleAudio=(e,t)=>{void 0===t?this.sendMessage({type:"requestToggleAudio",data:e}):t?this.requestMute(e):this.requestUnmute(e)},this.requestMute=e=>{this.sendMessage({type:"requestMute",data:e})},this.requestUnmute=e=>{this.sendMessage({type:"requestUnmute",data:e})},this.removeUser=e=>{this.sendMessage({type:"removeUser",data:e})},this.listUsers=()=>Object.values(this.stored.users),this.getUser=e=>{var t;return null===(t=this.stored.users)||void 0===t?void 0:t[e]},this.showCaptions=()=>{this.roomSettings.showCaptions=!0,this.sendMessage({type:"showCaptions"})},this.hideCaptions=()=>{this.roomSettings.showCaptions=!1,this.sendMessage({type:"hideCaptions"})},this.toggleCaptions=e=>{void 0===e?this.sendMessage({type:"toggleCaptions"}):e?this.showCaptions():this.hideCaptions()},this.configureCaptions=e=>{this.sendMessage({type:"configureCaptions",data:e||{}})},this.raiseHand=()=>{this.sendMessage({type:"raiseHand"})},this.lowerHand=e=>{this.sendMessage({type:"lowerHand",data:e})},this.allowBroadcast=e=>{this.sendMessage({type:"allowBroadcast",data:e})},this.disallowBroadcast=e=>{this.sendMessage({type:"disallowBroadcast",data:e})},this.allowScreenshare=e=>{this.sendMessage({type:"allowScreenshare",data:e})},this.disallowScreenshare=e=>{this.sendMessage({type:"disallowScreenshare",data:e})},this.configureVirtualBackground=e=>{this.roomSettings.virtualBackground=e;const t={enabled:!0,type:void 0,value:"",enforced:e.enforce};["blur","image","imageUrl"].forEach((s=>{e[s]&&(t.type=s,t.value=e[s])})),this.sendMessage({type:"configureVirtualBackground",data:e||{}})},this.enableVirtualBackground=e=>this.configureVirtualBackground(e),this.disableVirtualBackground=()=>{this.roomSettings.virtualBackground=void 0,this.sendMessage({type:"disableVirtualBackground"})},this.muteFrame=()=>{this.roomSettings.muteFrame=!0,this.stored.roomState.frameMuted=!0,this.sendMessage({type:"muteFrame"})},this.unmuteFrame=()=>{this.roomSettings.muteFrame=!1,this.stored.roomState.frameMuted=!1,this.sendMessage({type:"unmuteFrame"})},this.toggleMuteFrame=e=>{void 0===e?(this.roomSettings.muteFrame=!this.roomSettings.muteFrame,this.stored.roomState.frameMuted=!this.stored.roomState.frameMuted,this.sendMessage({type:"toggleMuteFrame"})):e?this.muteFrame():this.unmuteFrame()},this.minimizeLocalTile=()=>{this.sendMessage({type:"minimizeLocalTile"})},this.maximizeLocalTile=()=>{this.sendMessage({type:"maximizeLocalTile"})},this.pinUser=(e,t="media")=>{this.sendMessage({type:"pinUser",data:{tile:t,userId:e}})},this.unpinUser=()=>{this.minimizeContent()},this.maximizeUser=(e,t="media")=>{this.sendMessage({type:"maximizeUser",data:{tile:t,userId:e}})},this.minimizeUser=()=>{this.minimizeContent()},this.minimizeContent=()=>{this.sendMessage({type:"minimizeContent"})},this.changeRole=(e,t)=>{this.sendMessage({type:"changeRole",data:{userId:e,role:t}})},this.stored=(0,a.getDefaultStoredState)(),this.stored.roomState=(0,d.createWatchedProxy)(Object.assign({},this.stored.roomState),this.emitRoomStateUpdated),window.isSecureContext||this.logError(h.INSECURE_CONTEXT),this.initOptions=e,this.prepareRoomSettings(e.roomSettings||{}),this.reportErrors=t.reportErrors||!1,this.frame.allow="camera; microphone; display-capture; autoplay;",this.frame.setAttribute("allowFullscreen","true"),this.mountFrame(s),s?this.load(t):this.frame.style.display="none",window.addEventListener("message",this.onMessage),this.setupInternalEventListeners()}checkTarget(){return o(this,void 0,void 0,(function*(){const e=Object.assign(Object.assign({},this.roomSettings),{eventListeners:this.queuedEventListeners,UICallbacks:this.queuedUICallbacks,tileActions:this.queuedTileActions});this.sendMessage({type:"connect",data:e});const t=window.setTimeout((()=>{this.logError(h.UNKNOWN_TARGET)}),a.CONNECT_TIMEOUT);this.on("connected",(()=>{this.connected=!0,this.queuedEventListeners=[],this.queuedUICallbacks=[],this.queuedTileActions=[],clearTimeout(t)}))}))}sendMessage(e){if(this.frame.contentWindow){if(!this.connected&&"connect"!==e.type)return;this.frame.contentWindow.postMessage(e,{targetOrigin:this.allowedOrigin})}}get roomState(){return this.stored.roomState}get localUser(){return this.stored.users[this.stored.userId]}get features(){return this.stored.features}featureEnabled(e){return!!this.stored.features[e]}}t.DigitalSambaEmbedded=l,i=l,l.createControl=(e,t={})=>new i(e,t,!1),t.default=l},625:(e,t,s)=>{const{DigitalSambaEmbedded:i}=s(432);e.exports=i},737:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PermissionManager=void 0,t.PermissionManager=class{constructor(e){this.permissionsMap={},this.lookupDynamicPermission=(e,t)=>!!t&&t.includes(e),this.lookupPermission=e=>{const{permissionsMap:t,permission:s,targetRole:i,role:o,dynamicPermissions:n}=e;return!(!n||!this.lookupDynamicPermission(s,n))||(!!t[o][s]||Boolean(t[o][`${s}_${i}`]))},this.checkPermissions=({permissions:e,targetRole:t,permissionsMap:s,role:i,dynamicPermissions:o})=>Array.isArray(e)?e.some((e=>this.lookupPermission({permission:e,targetRole:t,role:i,permissionsMap:s,dynamicPermissions:o}))):this.lookupPermission({permission:e,targetRole:t,role:i,permissionsMap:s,dynamicPermissions:o}),this.refinePermissions=(e,{targetRole:t,role:s,userId:i,users:o,permissionsMap:n,localUser:r})=>{const a={permissionsMap:n,permissions:e,targetRole:t,role:r.role,dynamicPermissions:r.dynamicPermissions};return s&&(a.role=s,a.dynamicPermissions=void 0),i&&o&&(a.role=o[i].role,a.dynamicPermissions=o[i].dynamicPermissions),this.checkPermissions(a)},this.hasPermissions=(e,{targetRole:t,role:s,userId:i}={})=>{const o=this.parent.stored.users,n=this.parent.localUser;return!!n&&this.refinePermissions(e,{permissionsMap:this.permissionsMap,role:s,targetRole:t,users:o,userId:i,localUser:n})},this.parent=e}}},517:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.INSECURE_CONTEXT=t.INVALID_URL=t.ALLOW_ATTRIBUTE_MISSING=t.INVALID_CONFIG=t.UNKNOWN_TARGET=t.RichError=void 0;class s extends Error{constructor(e){super(e.message),this.name=e.name}}t.RichError=s,t.UNKNOWN_TARGET=new s({name:"UNKNOWN_TARGET",message:"Could not verify the identity of target frame. Commands may not work"}),t.INVALID_CONFIG=new s({name:"INVALID_INIT_CONFIG",message:"Initializations options are invalid. Missing team name or room ID"}),t.ALLOW_ATTRIBUTE_MISSING=new s({name:"ALLOW_ATTRIBUTE_MISSING",message:"You've provided a frame that is mising 'allow' attribute. Some functionality may not work."}),t.INVALID_URL=new s({name:"INVALID_URL",message:"Invalid room URL specified"}),t.INSECURE_CONTEXT=new s({name:"INSECURE_CONTEXT",message:"Initializing embedded app in an insecure context, media capabilities unavailable. See https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts for details"})},604:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createWatchedProxy=void 0,t.createWatchedProxy=(e,t)=>new Proxy(e,(e=>{const t={get:(e,s)=>"object"==typeof e[s]&&null!==e[s]?new Proxy(e[s],t):e[s],set:(t,s,i)=>(t[s]=i,e(t),t)};return t})(t))},480:(e,t)=>{var s,i;Object.defineProperty(t,"__esModule",{value:!0}),t.getDefaultStoredState=t.PermissionTypes=t.LayoutMode=t.internalEvents=t.CONNECT_TIMEOUT=void 0,t.CONNECT_TIMEOUT=1e4,t.internalEvents={roomJoined:!0,documentEvent:!0,UICallback:!0,internalMediaDeviceChanged:!0,tileAction:!0,userLeftBatch:!0},function(e){e.tiled="tiled",e.auto="auto"}(s=t.LayoutMode||(t.LayoutMode={})),(i=t.PermissionTypes||(t.PermissionTypes={})).broadcast="broadcast",i.manageBroadcast="manage_broadcast",i.endSession="end_session",i.startSession="start_session",i.removeParticipant="remove_participant",i.screenshare="screenshare",i.manageScreenshare="manage_screenshare",i.recording="recording",i.generalChat="general_chat",i.remoteMuting="remote_muting",i.askRemoteUnmute="ask_remote_unmute",i.raiseHand="raise_hand",i.manageRoles="manage_roles",i.inviteParticipant="invite_participant",i.seeParticipantsPanel="see_participants_panel",i.controlRoomEntry="control_room_entry",i.editWhiteboard="edit_whiteboard",t.getDefaultStoredState=()=>({userId:"",roomState:{appLanguage:"en",frameMuted:!1,media:{audioEnabled:!1,videoEnabled:!1,activeDevices:{}},layout:{mode:s.tiled,showToolbar:!0,toolbarPosition:"left",localTileMinimized:!1},captionsState:{showCaptions:!1,spokenLanguage:"en",fontSize:"medium"},virtualBackground:{enabled:!1}},users:{},features:{chat:!1,contentLibrary:!1,captions:!1,qa:!1,endSession:!1,fullScreen:!1,languageSelection:!1,minimizeOwnTile:!1,participantsList:!1,pin:!1,screenshare:!1,whiteboard:!1,recordings:!1,virtualBackgrounds:!1,raiseHand:!0,invite:!1}})}},t={};return function s(i){var o=t[i];if(void 0!==o)return o.exports;var n=t[i]={exports:{}};return e[i].call(n.exports,n,n.exports,s),n.exports}(625)})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.DigitalSambaEmbedded=t():e.DigitalSambaEmbedded=t()}(this,(()=>(()=>{"use strict";var e={7:e=>{var t,s="object"==typeof Reflect?Reflect:null,i=s&&"function"==typeof s.apply?s.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)};t=s&&"function"==typeof s.ownKeys?s.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function n(){n.init.call(this)}e.exports=n,e.exports.once=function(e,t){return new Promise((function(s,i){function o(s){e.removeListener(t,n),i(s)}function n(){"function"==typeof e.removeListener&&e.removeListener("error",o),s([].slice.call(arguments))}g(e,t,n,{once:!0}),"error"!==t&&function(e,t){"function"==typeof e.on&&g(e,"error",t,{once:!0})}(e,o)}))},n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var r=10;function a(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function d(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function h(e,t,s,i){var o,n,r,h;if(a(s),void 0===(n=e._events)?(n=e._events=Object.create(null),e._eventsCount=0):(void 0!==n.newListener&&(e.emit("newListener",t,s.listener?s.listener:s),n=e._events),r=n[t]),void 0===r)r=n[t]=s,++e._eventsCount;else if("function"==typeof r?r=n[t]=i?[s,r]:[r,s]:i?r.unshift(s):r.push(s),(o=d(e))>0&&r.length>o&&!r.warned){r.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+r.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=r.length,h=l,console&&console.warn&&console.warn(h)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function c(e,t,s){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:s},o=l.bind(i);return o.listener=s,i.wrapFn=o,o}function u(e,t,s){var i=e._events;if(void 0===i)return[];var o=i[t];return void 0===o?[]:"function"==typeof o?s?[o.listener||o]:[o]:s?function(e){for(var t=new Array(e.length),s=0;s<t.length;++s)t[s]=e[s].listener||e[s];return t}(o):p(o,o.length)}function m(e){var t=this._events;if(void 0!==t){var s=t[e];if("function"==typeof s)return 1;if(void 0!==s)return s.length}return 0}function p(e,t){for(var s=new Array(t),i=0;i<t;++i)s[i]=e[i];return s}function g(e,t,s,i){if("function"==typeof e.on)i.once?e.once(t,s):e.on(t,s);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function o(n){i.once&&e.removeEventListener(t,o),s(n)}))}}Object.defineProperty(n,"defaultMaxListeners",{enumerable:!0,get:function(){return r},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");r=e}}),n.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},n.prototype.getMaxListeners=function(){return d(this)},n.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var o="error"===e,n=this._events;if(void 0!==n)o=o&&void 0===n.error;else if(!o)return!1;if(o){var r;if(t.length>0&&(r=t[0]),r instanceof Error)throw r;var a=new Error("Unhandled error."+(r?" ("+r.message+")":""));throw a.context=r,a}var d=n[e];if(void 0===d)return!1;if("function"==typeof d)i(d,this,t);else{var h=d.length,l=p(d,h);for(s=0;s<h;++s)i(l[s],this,t)}return!0},n.prototype.addListener=function(e,t){return h(this,e,t,!1)},n.prototype.on=n.prototype.addListener,n.prototype.prependListener=function(e,t){return h(this,e,t,!0)},n.prototype.once=function(e,t){return a(t),this.on(e,c(this,e,t)),this},n.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,c(this,e,t)),this},n.prototype.removeListener=function(e,t){var s,i,o,n,r;if(a(t),void 0===(i=this._events))return this;if(void 0===(s=i[e]))return this;if(s===t||s.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,s.listener||t));else if("function"!=typeof s){for(o=-1,n=s.length-1;n>=0;n--)if(s[n]===t||s[n].listener===t){r=s[n].listener,o=n;break}if(o<0)return this;0===o?s.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(s,o),1===s.length&&(i[e]=s[0]),void 0!==i.removeListener&&this.emit("removeListener",e,r||t)}return this},n.prototype.off=n.prototype.removeListener,n.prototype.removeAllListeners=function(e){var t,s,i;if(void 0===(s=this._events))return this;if(void 0===s.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==s[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete s[e]),this;if(0===arguments.length){var o,n=Object.keys(s);for(i=0;i<n.length;++i)"removeListener"!==(o=n[i])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=s[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},n.prototype.listeners=function(e){return u(this,e,!0)},n.prototype.rawListeners=function(e){return u(this,e,!1)},n.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},n.prototype.listenerCount=m,n.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},229:function(e,t,s){var i,o=this&&this.__awaiter||function(e,t,s,i){return new(s||(s=Promise))((function(o,n){function r(e){try{d(i.next(e))}catch(e){n(e)}}function a(e){try{d(i.throw(e))}catch(e){n(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(r,a)}d((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.DigitalSambaEmbedded=void 0;const n=s(7),r=s(334),a=s(330),d=s(481),h=s(331),l=s(496);class c extends n.EventEmitter{constructor(e={},t={},s=!0){super(),this.roomSettings={},this.savedIframeSrc="",this.allowedOrigin="*",this.connected=!1,this.frame=document.createElement("iframe"),this.reportErrors=!1,this.permissionManager=new a.PermissionManager(this),this.queuedEventListeners=[],this.queuedUICallbacks=[],this.queuedTileActions=[],this.tileActionListeners={},this.defaultMediaDevices={},this.mountFrame=e=>{const{url:t,frame:s,root:i}=this.initOptions;if(i?i.appendChild(this.frame):s?(this.frame=s,s.allow||this.logError(l.ALLOW_ATTRIBUTE_MISSING)):document.body.appendChild(this.frame),t||this.frame.src&&this.frame.src!==window.location.href)try{let e=t||this.frame.src;e.includes("https://")||(e="https://"+e);const s=new URL(e).toString();this.frame.src=s,this.savedIframeSrc=s}catch(e){this.logError(l.INVALID_URL)}e||(this.savedIframeSrc=this.frame.src,this.frame.src="")},this.load=(e={})=>{this.reportErrors=e.reportErrors||!1,this.setFrameSrc(),this.applyFrameProperties(e),this.frame.style.display="block"},this.prepareRoomSettings=e=>o(this,void 0,void 0,(function*(){if(this.defaultMediaDevices=e.mediaDevices||{},e.mediaDevices={},e.appLanguage&&(this.stored.roomState.appLanguage=e.appLanguage),e.initials)try{e.initials=e.initials.trim()}catch(t){e.initials=void 0}this.roomSettings=e})),this.onMessage=e=>{if(e.origin!==this.allowedOrigin)return;const t=e.data.DSPayload;t&&t.type&&(d.internalEvents[t.type]?this.handleInternalMessage(e.data):this._emit(t.type,t))},this.addFrameEventListener=(e,t,s)=>{const i=`frameEvent_${e}_${t}`;this.connected?this.listenerCount(i)||this.sendMessage({type:"connectEventListener",data:{eventName:e,target:t}}):this.queuedEventListeners.push({operation:"connectEventListener",event:e,target:t}),this.on(i,s)},this.removeFrameEventListener=(e,t,s)=>{const i=`frameEvent_${e}_${t}`;this.off(i,s),this.connected?this.listenerCount(e)||this.sendMessage({type:"disconnectEventListener",data:{eventName:e,target:t}}):this.queuedEventListeners.push({operation:"disconnectEventListener",event:e,target:t})},this.addUICallback=(e,t)=>{const s=`UICallback_${e}`;this.connected?this.listenerCount(s)||this.sendMessage({type:"connectUICallback",data:{name:e}}):this.queuedUICallbacks.push({operation:"connectUICallback",name:e}),this.on(s,t)},this.removeUICallback=(e,t)=>{const s=`UICallback_${e}`;this.off(s,t),this.connected?this.listenerCount(s)||this.sendMessage({type:"disconnectUICallback",data:{name:e}}):this.queuedUICallbacks.push({operation:"disconnectUICallback",name:e})},this.addTileAction=(e,t,s)=>{this.tileActionListeners[e]&&this.removeTileAction(e),this.tileActionListeners[e]=s,this.connected?this.sendMessage({type:"addTileAction",data:{name:e,properties:t}}):this.queuedTileActions.push({operation:"addTileAction",name:e,properties:t}),this.on(`tileAction_${e}`,(t=>{this.tileActionListeners[e](t)}))},this.removeTileAction=e=>{this.off(`tileAction_${e}`,this.tileActionListeners[e]),delete this.tileActionListeners[e],this.connected?this.sendMessage({type:"removeTileAction",data:{name:e}}):this.queuedTileActions.push({operation:"removeTileAction",name:e})},this.setupInternalEventListeners=()=>{this.on("userJoined",(e=>{const{user:t,type:s}=e.data;this.stored.users[t.id]=Object.assign(Object.assign({},t),{kind:s}),"local"===s&&(this.stored.userId=t.id),this.emitUsersUpdated()})),this.on("userLeft",(e=>{var t,s;(null===(s=null===(t=e.data)||void 0===t?void 0:t.user)||void 0===s?void 0:s.id)&&delete this.stored.users[e.data.user.id],this.emitUsersUpdated()})),this.on("appLanguageChanged",(({data:e})=>{this.stored.roomState.appLanguage=e.language})),this.on("permissionsChanged",(e=>{if(this.stored.users[this.stored.userId]){let t=[...this.stored.users[this.stored.userId].dynamicPermissions||[]];Object.entries(e.data).forEach((([e,s])=>{s&&!t.includes(e)&&t.push(e),s||(t=t.filter((t=>t!==e)))})),this.stored.users[this.stored.userId].dynamicPermissions=t}})),this.on("roleChanged",(e=>{const{userId:t,to:s}=e.data;this.stored.users[t]&&(this.stored.users[t].role=s)})),this.on("activeSpeakerChanged",(e=>{var t,s;this.stored.activeSpeaker=null===(s=null===(t=e.data)||void 0===t?void 0:t.user)||void 0===s?void 0:s.id})),this.on("videoEnabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.videoEnabled=!0)})),this.on("videoDisabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.videoEnabled=!1)})),this.on("audioEnabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.audioEnabled=!0)})),this.on("audioDisabled",(e=>{var t;"local"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(this.stored.roomState.media.audioEnabled=!1)})),this.on("layoutModeChanged",(e=>{this.stored.roomState.layout.mode=e.data.mode})),this.on("captionsSpokenLanguageChanged",(e=>{this.stored.roomState.captionsState.spokenLanguage=e.data.language})),this.on("captionsEnabled",(()=>{this.stored.roomState.captionsState.showCaptions=!0})),this.on("captionsDisabled",(()=>{this.stored.roomState.captionsState.showCaptions=!1})),this.on("captionsFontSizeChanged",(e=>{this.stored.roomState.captionsState.fontSize=e.data.fontSize})),this.on("virtualBackgroundChanged",(e=>{const{type:t,value:s,enforced:i,name:o}=e.data.virtualBackgroundConfig;this.stored.roomState.virtualBackground={enabled:!0,type:t,value:s,name:o,enforced:i}})),this.on("virtualBackgroundDisabled",(e=>{this.stored.roomState.virtualBackground={enabled:!1}})),this.on("localTileMinimized",(()=>{this.stored.roomState.layout.localTileMinimized=!0})),this.on("localTileMaximized",(()=>{this.stored.roomState.layout.localTileMinimized=!1})),this.on("userMaximized",(({data:e})=>{this.stored.roomState.layout.content={userId:e.userId,type:e.type},this.stored.roomState.layout.contentMode=e.mode})),this.on("userMinimized",(()=>{this.stored.roomState.layout.content=void 0,this.stored.roomState.layout.contentMode=void 0}))},this._emit=(e,...t)=>(this.emit("*",...t),this.emit(e,...t)),this.handleInternalMessage=e=>o(this,void 0,void 0,(function*(){var t;const s=e.DSPayload;switch(s.type){case"roomJoined":{const{users:e,roomState:t,activeSpeaker:i,permissionsMap:o,features:n}=s.data;this.stored.users=Object.assign(Object.assign({},this.stored.users),e),this.stored.roomState=(0,h.createWatchedProxy)(Object.assign(Object.assign(Object.assign({},this.stored.roomState),t),{media:Object.assign(Object.assign({},this.stored.roomState.media),t.media)}),this.emitRoomStateUpdated),this.stored.activeSpeaker=i,this.stored.features=(0,h.createWatchedProxy)(Object.assign({},n),this.emitFeatureSetUpdated),this.permissionManager.permissionsMap=o,this.emitUsersUpdated(),this.emitFeatureSetUpdated(),this.emitRoomStateUpdated(),this._emit("roomJoined",{type:"roomJoined"});break}case"documentEvent":{const{eventName:e,target:t,payload:i}=s.data,o=`frameEvent_${e}_${t}`;this._emit(o,JSON.parse(i));break}case"UICallback":{const{name:e}=s.data,t=`UICallback_${e}`;this._emit(t,{});break}case"tileAction":{const{name:e,source:t}=s.data,i=`tileAction_${e}`;this._emit(i,t);break}case"userLeftBatch":{const e=null===(t=s.data)||void 0===t?void 0:t.userIds;if(e){for(const t of e){const e=Object.assign({},this.stored.users[t]);this._emit("userLeft",{type:"userLeft",data:{user:e}}),delete this.stored.users[t]}this.emitUsersUpdated()}break}case"internalMediaDeviceChanged":{const e=s.data,t=yield(0,r.enumerateDevices)();this.defaultMediaDevices&&Object.keys(this.defaultMediaDevices).length>0&&(this.sendMessage({type:"applyMediaDevices",data:this.defaultMediaDevices}),this.defaultMediaDevices={});const i=t.find((t=>t.kind===e.kind&&t.label===e.label));if(i){const t=this.stored.roomState.media.activeDevices[e.kind];this._emit("mediaDeviceChanged",{type:"mediaDeviceChanged",data:Object.assign(Object.assign({},e),{previousDeviceId:t,deviceId:i.deviceId})}),this.stored.roomState.media.activeDevices[e.kind]=i.deviceId}break}}})),this.emitUsersUpdated=()=>{this._emit("usersUpdated",{type:"usersUpdated",data:{users:this.listUsers()}})},this.emitRoomStateUpdated=()=>{this._emit("roomStateUpdated",{type:"roomStateUpdated",data:{state:this.roomState}})},this.emitFeatureSetUpdated=()=>{this._emit("featureSetUpdated",{type:"featureSetUpdated",data:{state:this.stored.features}})},this.setFrameSrc=()=>{let e=this.savedIframeSrc;const{cname:t,team:s,room:i,token:o}=this.initOptions;if(s&&i&&(e=`https://${s}.digitalsamba.com/${i}`),t&&i&&(e=`https://${t}/${i}`),e){const t=new URL(e);t.searchParams.append("dsEmbedFrame","true"),o&&t.searchParams.append("token",o),e=t.toString()}if(!e)return void(this.initOptions.url||this.logError(l.INVALID_CONFIG));this.frame.src=e;const n=new URL(this.frame.src);this.allowedOrigin=n.origin,this.frame.onload=()=>{this._emit("frameLoaded",{type:"frameLoaded"}),this.checkTarget()}},this.logError=e=>{if(this.reportErrors)throw e;console.error(e)},this.applyFrameProperties=e=>{e.frameAttributes&&Object.entries(e.frameAttributes).forEach((([e,t])=>{null!=t?this.frame.setAttribute(e,t.toString()):this.frame.removeAttribute(e)})),e.reportErrors&&(this.reportErrors=!0)},this.setTemplateParams=e=>{e&&Object.keys(e).length>0&&this.sendMessage({type:"setTemplateParams",data:e})},this.enableVideo=()=>{this.roomSettings.videoEnabled=!0,this.sendMessage({type:"enableVideo"})},this.disableVideo=()=>{this.roomSettings.videoEnabled=!1,this.sendMessage({type:"disableVideo"})},this.toggleVideo=e=>{void 0===e?this.sendMessage({type:"toggleVideo"}):e?this.enableVideo():this.disableVideo()},this.enableAudio=()=>{this.roomSettings.audioEnabled=!0,this.sendMessage({type:"enableAudio"})},this.disableAudio=()=>{this.roomSettings.audioEnabled=!1,this.sendMessage({type:"disableAudio"})},this.toggleAudio=e=>{void 0===e?this.sendMessage({type:"toggleAudio"}):e?this.enableAudio():this.disableAudio()},this.openWhiteboard=()=>{this.sendMessage({type:"openWhiteboard"})},this.closeWhiteboard=()=>{this.sendMessage({type:"closeWhiteboard"})},this.toggleWhiteboard=e=>{this.sendMessage({type:"toggleWhiteboard",data:{show:e}})},this.addImageToWhiteboard=e=>{this.sendMessage({type:"addImageToWhiteboard",data:e||{}})},this.startScreenshare=()=>{this.sendMessage({type:"startScreenshare"})},this.stopScreenshare=()=>{this.sendMessage({type:"stopScreenshare"})},this.startRecording=()=>{this.sendMessage({type:"startRecording"})},this.stopRecording=()=>{this.sendMessage({type:"stopRecording"})},this.showToolbar=()=>{this.roomSettings.showToolbar=!0,this.stored.roomState.layout.showToolbar=!0,this.sendMessage({type:"showToolbar"})},this.hideToolbar=()=>{this.roomSettings.showToolbar=!1,this.stored.roomState.layout.showToolbar=!1,this.sendMessage({type:"hideToolbar"})},this.changeToolbarPosition=e=>{this.sendMessage({type:"changeToolbarPosition",data:e})},this.changeBrandingOptions=e=>{this.sendMessage({type:"changeBrandingOptions",data:e})},this.changeLayoutMode=e=>{this.roomSettings.layoutMode=e,this.sendMessage({type:"changeLayoutMode",data:e})},this.leaveSession=()=>{this.sendMessage({type:"leaveSession"})},this.endSession=(e=!0)=>{this.sendMessage({type:"endSession",data:e})},this.toggleToolbar=e=>{void 0===e?(this.stored.roomState.layout.showToolbar=!this.stored.roomState.layout.showToolbar,this.sendMessage({type:"toggleToolbar"})):e?this.showToolbar():this.hideToolbar()},this.requestToggleAudio=(e,t)=>{void 0===t?this.sendMessage({type:"requestToggleAudio",data:e}):t?this.requestMute(e):this.requestUnmute(e)},this.requestMute=e=>{this.sendMessage({type:"requestMute",data:e})},this.requestUnmute=e=>{this.sendMessage({type:"requestUnmute",data:e})},this.removeUser=e=>{this.sendMessage({type:"removeUser",data:e})},this.listUsers=()=>Object.values(this.stored.users),this.getUser=e=>{var t;return null===(t=this.stored.users)||void 0===t?void 0:t[e]},this.showCaptions=()=>{this.roomSettings.showCaptions=!0,this.sendMessage({type:"showCaptions"})},this.hideCaptions=()=>{this.roomSettings.showCaptions=!1,this.sendMessage({type:"hideCaptions"})},this.toggleCaptions=e=>{void 0===e?this.sendMessage({type:"toggleCaptions"}):e?this.showCaptions():this.hideCaptions()},this.configureCaptions=e=>{this.sendMessage({type:"configureCaptions",data:e||{}})},this.raiseHand=()=>{this.sendMessage({type:"raiseHand"})},this.lowerHand=e=>{this.sendMessage({type:"lowerHand",data:e})},this.allowBroadcast=e=>{this.sendMessage({type:"allowBroadcast",data:e})},this.disallowBroadcast=e=>{this.sendMessage({type:"disallowBroadcast",data:e})},this.allowScreenshare=e=>{this.sendMessage({type:"allowScreenshare",data:e})},this.disallowScreenshare=e=>{this.sendMessage({type:"disallowScreenshare",data:e})},this.configureVirtualBackground=e=>{this.roomSettings.virtualBackground=e;const t={enabled:!0,type:void 0,value:"",enforced:e.enforce};["blur","image","imageUrl"].forEach((s=>{e[s]&&(t.type=s,t.value=e[s])})),this.sendMessage({type:"configureVirtualBackground",data:e||{}})},this.enableVirtualBackground=e=>this.configureVirtualBackground(e),this.disableVirtualBackground=()=>{this.roomSettings.virtualBackground=void 0,this.sendMessage({type:"disableVirtualBackground"})},this.muteFrame=()=>{this.roomSettings.muteFrame=!0,this.stored.roomState.frameMuted=!0,this.sendMessage({type:"muteFrame"})},this.unmuteFrame=()=>{this.roomSettings.muteFrame=!1,this.stored.roomState.frameMuted=!1,this.sendMessage({type:"unmuteFrame"})},this.toggleMuteFrame=e=>{void 0===e?(this.roomSettings.muteFrame=!this.roomSettings.muteFrame,this.stored.roomState.frameMuted=!this.stored.roomState.frameMuted,this.sendMessage({type:"toggleMuteFrame"})):e?this.muteFrame():this.unmuteFrame()},this.minimizeLocalTile=()=>{this.sendMessage({type:"minimizeLocalTile"})},this.maximizeLocalTile=()=>{this.sendMessage({type:"maximizeLocalTile"})},this.pinUser=(e,t="media")=>{this.sendMessage({type:"pinUser",data:{tile:t,userId:e}})},this.unpinUser=()=>{this.minimizeContent()},this.maximizeUser=(e,t="media")=>{this.sendMessage({type:"maximizeUser",data:{tile:t,userId:e}})},this.minimizeUser=()=>{this.minimizeContent()},this.minimizeContent=()=>{this.sendMessage({type:"minimizeContent"})},this.changeRole=(e,t)=>{this.sendMessage({type:"changeRole",data:{userId:e,role:t}})},console.log(`SDK Version: ${d.PACKAGE_VERSION}`),this.stored=(0,d.getDefaultStoredState)(),this.stored.roomState=(0,h.createWatchedProxy)(Object.assign({},this.stored.roomState),this.emitRoomStateUpdated),window.isSecureContext||this.logError(l.INSECURE_CONTEXT),this.initOptions=e,this.templateParams=e.templateParams,this.prepareRoomSettings(e.roomSettings||{}),this.reportErrors=t.reportErrors||!1,this.frame.allow="camera; microphone; display-capture; autoplay;",this.frame.setAttribute("allowFullscreen","true"),this.mountFrame(s),s?this.load(t):this.frame.style.display="none",window.addEventListener("message",this.onMessage),this.setupInternalEventListeners()}checkTarget(){return o(this,void 0,void 0,(function*(){const e=Object.assign(Object.assign({},this.roomSettings),{eventListeners:this.queuedEventListeners,UICallbacks:this.queuedUICallbacks,tileActions:this.queuedTileActions});this.sendMessage({type:"connect",data:e});const t=window.setTimeout((()=>{this.logError(l.UNKNOWN_TARGET)}),d.CONNECT_TIMEOUT);this.on("connected",(()=>{this.connected=!0,this.queuedEventListeners=[],this.queuedUICallbacks=[],this.queuedTileActions=[],this.setTemplateParams(this.templateParams),clearTimeout(t)}))}))}sendMessage(e){if(this.frame.contentWindow){if(!this.connected&&"connect"!==e.type)return;this.frame.contentWindow.postMessage(e,{targetOrigin:this.allowedOrigin})}}get roomState(){return this.stored.roomState}get localUser(){return this.stored.users[this.stored.userId]}get features(){return this.stored.features}featureEnabled(e){return!!this.stored.features[e]}}t.DigitalSambaEmbedded=c,i=c,c.createControl=(e,t={})=>new i(e,t,!1),t.default=c},767:(e,t,s)=>{const{DigitalSambaEmbedded:i}=s(229);e.exports=i},330:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PermissionManager=void 0,t.PermissionManager=class{constructor(e){this.permissionsMap={},this.lookupDynamicPermission=(e,t)=>!!t&&t.includes(e),this.lookupPermission=e=>{const{permissionsMap:t,permission:s,targetRole:i,role:o,dynamicPermissions:n}=e;return!(!n||!this.lookupDynamicPermission(s,n))||(!!t[o][s]||Boolean(t[o][`${s}_${i}`]))},this.checkPermissions=({permissions:e,targetRole:t,permissionsMap:s,role:i,dynamicPermissions:o})=>Array.isArray(e)?e.some((e=>this.lookupPermission({permission:e,targetRole:t,role:i,permissionsMap:s,dynamicPermissions:o}))):this.lookupPermission({permission:e,targetRole:t,role:i,permissionsMap:s,dynamicPermissions:o}),this.refinePermissions=(e,{targetRole:t,role:s,userId:i,users:o,permissionsMap:n,localUser:r})=>{const a={permissionsMap:n,permissions:e,targetRole:t,role:r.role,dynamicPermissions:r.dynamicPermissions};return s&&(a.role=s,a.dynamicPermissions=void 0),i&&o&&(a.role=o[i].role,a.dynamicPermissions=o[i].dynamicPermissions),this.checkPermissions(a)},this.hasPermissions=(e,{targetRole:t,role:s,userId:i}={})=>{const o=this.parent.stored.users,n=this.parent.localUser;return!!n&&this.refinePermissions(e,{permissionsMap:this.permissionsMap,role:s,targetRole:t,users:o,userId:i,localUser:n})},this.parent=e}}},334:function(e,t){var s=this&&this.__awaiter||function(e,t,s,i){return new(s||(s=Promise))((function(o,n){function r(e){try{d(i.next(e))}catch(e){n(e)}}function a(e){try{d(i.throw(e))}catch(e){n(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(r,a)}d((i=i.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.enumerateDevices=void 0,t.enumerateDevices=()=>s(void 0,void 0,void 0,(function*(){var e;let t=[];try{const s=yield navigator.mediaDevices.getUserMedia({audio:!0,video:!0});t=yield navigator.mediaDevices.enumerateDevices(),null===(e=s.getTracks())||void 0===e||e.forEach((e=>e.stop()))}catch(e){console.error("Could not enumerate available devices, ",e),t=yield navigator.mediaDevices.enumerateDevices()}return t}))},496:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.INSECURE_CONTEXT=t.INVALID_URL=t.ALLOW_ATTRIBUTE_MISSING=t.INVALID_CONFIG=t.UNKNOWN_TARGET=t.RichError=void 0;class s extends Error{constructor(e){super(e.message),this.name=e.name}}t.RichError=s,t.UNKNOWN_TARGET=new s({name:"UNKNOWN_TARGET",message:"Could not verify the identity of target frame. Commands may not work"}),t.INVALID_CONFIG=new s({name:"INVALID_INIT_CONFIG",message:"Initializations options are invalid. Missing team name or room ID"}),t.ALLOW_ATTRIBUTE_MISSING=new s({name:"ALLOW_ATTRIBUTE_MISSING",message:"You've provided a frame that is mising 'allow' attribute. Some functionality may not work."}),t.INVALID_URL=new s({name:"INVALID_URL",message:"Invalid room URL specified"}),t.INSECURE_CONTEXT=new s({name:"INSECURE_CONTEXT",message:"Initializing embedded app in an insecure context, media capabilities unavailable. See https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts for details"})},331:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createWatchedProxy=void 0,t.createWatchedProxy=(e,t)=>new Proxy(e,(e=>{const t={get:(e,s)=>"object"==typeof e[s]&&null!==e[s]?new Proxy(e[s],t):e[s],set:(t,s,i)=>(t[s]=i,e(t),t)};return t})(t))},481:(e,t)=>{var s,i;Object.defineProperty(t,"__esModule",{value:!0}),t.getDefaultStoredState=t.PermissionTypes=t.LayoutMode=t.internalEvents=t.CONNECT_TIMEOUT=t.PACKAGE_VERSION=void 0,t.PACKAGE_VERSION="0.0.43",t.CONNECT_TIMEOUT=1e4,t.internalEvents={roomJoined:!0,documentEvent:!0,UICallback:!0,internalMediaDeviceChanged:!0,tileAction:!0,userLeftBatch:!0},function(e){e.tiled="tiled",e.auto="auto"}(s=t.LayoutMode||(t.LayoutMode={})),(i=t.PermissionTypes||(t.PermissionTypes={})).broadcast="broadcast",i.manageBroadcast="manage_broadcast",i.endSession="end_session",i.startSession="start_session",i.removeParticipant="remove_participant",i.screenshare="screenshare",i.manageScreenshare="manage_screenshare",i.recording="recording",i.generalChat="general_chat",i.remoteMuting="remote_muting",i.askRemoteUnmute="ask_remote_unmute",i.raiseHand="raise_hand",i.manageRoles="manage_roles",i.inviteParticipant="invite_participant",i.seeParticipantsPanel="see_participants_panel",i.controlRoomEntry="control_room_entry",i.editWhiteboard="edit_whiteboard",t.getDefaultStoredState=()=>({userId:"",roomState:{appLanguage:"en",frameMuted:!1,media:{audioEnabled:!1,videoEnabled:!1,activeDevices:{}},layout:{mode:s.tiled,showToolbar:!0,toolbarPosition:"left",localTileMinimized:!1},captionsState:{showCaptions:!1,spokenLanguage:"en",fontSize:"medium"},virtualBackground:{enabled:!1}},users:{},features:{chat:!1,contentLibrary:!1,captions:!1,qa:!1,endSession:!1,fullScreen:!1,languageSelection:!1,minimizeOwnTile:!1,participantsList:!1,pin:!1,screenshare:!1,whiteboard:!1,recordings:!1,virtualBackgrounds:!1,raiseHand:!0,invite:!1}})}},t={};return function s(i){var o=t[i];if(void 0!==o)return o.exports;var n=t[i]={exports:{}};return e[i].call(n.exports,n,n.exports,s),n.exports}(767)})()));
@@ -8,7 +8,9 @@
8
8
  <script src="./index.js"></script>
9
9
  <script src="./helper.js"></script>
10
10
  <script defer data-domain="digitalsamba.github.io" src="https://plausible.wbcnf.net/js/script.js"></script>
11
- <script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
11
+ <script>window.plausible = window.plausible || function() {
12
+ (window.plausible.q = window.plausible.q || []).push(arguments);
13
+ };</script>
12
14
  <link rel="stylesheet" href="./style.css">
13
15
  </head>
14
16
 
@@ -16,7 +18,8 @@
16
18
  <nav class="topbar">
17
19
  <div class="container">
18
20
  <img class="logo" src="logo.png" alt="DigitalSamba">
19
- <a href="https://github.com/digitalsamba/embedded-sdk" target="_blank" rel="noopener nofollow">View on GitHub</a>
21
+ <a href="https://github.com/digitalsamba/embedded-sdk" target="_blank" rel="noopener nofollow">View
22
+ on GitHub</a>
20
23
  </div>
21
24
  </nav>
22
25
 
@@ -26,19 +29,21 @@
26
29
  <div class="dynamic-room-block" style="display: flex; justify-content: center; flex-direction: column">
27
30
  <button onclick="loadDynamicRoom()">load new room</button>
28
31
 
29
- <p style="text-align: center"><span class="custom-room-url-switch" onClick="showCustomRoomForm()">or join an existing custom room</span></p>
32
+ <p style="text-align: center">
33
+ <span class="custom-room-url-switch" onClick="showCustomRoomForm()">or join an existing custom room</span>
34
+ </p>
30
35
  </div>
31
36
  <div class="custom-room-url-form">
32
- <label for="custom-room-url">
33
- <span><b>Room URL</b></span>
34
- <span>Can be found in <a href="https://dashboard.digitalsamba.com/" target="_blank" rel="noopener nofollow">dashboard</a></span>.
35
- </label>
36
- <div>
37
- <input type="text" id="custom-room-url" name="custom-room-url" onkeydown="onURLChange()">
38
- <!-- kicks off loading -->
39
- <button onclick="loadCustomRoom()">load room</button>
40
- </div>
41
- <p class="room-url-error"></p>
37
+ <label for="custom-room-url">
38
+ <span><b>Room URL</b></span>
39
+ <span>Can be found in <a href="https://dashboard.digitalsamba.com/" target="_blank" rel="noopener nofollow">dashboard</a></span>.
40
+ </label>
41
+ <div>
42
+ <input type="text" id="custom-room-url" name="custom-room-url" onkeydown="onURLChange()">
43
+ <!-- kicks off loading -->
44
+ <button onclick="loadCustomRoom()">load room</button>
45
+ </div>
46
+ <p class="room-url-error"></p>
42
47
  </div>
43
48
  <p style="margin-top: 30px;" class="init-settings-title">Predefined settings</p>
44
49
  <p style="margin-bottom: 15px">These options can be applied prior to joining the room. For
@@ -123,7 +128,7 @@
123
128
  <input type="checkbox" checked id="initial-settings-kick-confirmation" onchange="initialSettings.requireRemoveUserConfirmation = this.checked" />
124
129
  </label>
125
130
  </div>
126
- <div class="vb-options" style ="display: none">
131
+ <div class="vb-options" style="display: none">
127
132
  <div style="display: flex; align-items: center; justify-content: flex-start">
128
133
  <label style="margin-right: 8px;" for="vb-type">Virtual background type</label>
129
134
  <select name="vb-type" id="vb-type" onchange="updateVBType(this.value)">
@@ -232,19 +237,36 @@
232
237
  };
233
238
 
234
239
  var VBvalues = {
235
- blur: 'balanced',
236
- image: 'office',
237
- imageUrl: 'string'
238
- }
240
+ blur: "balanced",
241
+ image: "office",
242
+ imageUrl: "string"
243
+ };
239
244
 
240
- navigator.mediaDevices.enumerateDevices().then((availableDevices) => {
245
+ const fillDeviceOptions = (availableDevices) => {
241
246
  availableDevices.forEach(device => {
242
- const select = document.querySelector('#' + device.kind);
243
- if(select) {
244
- select.innerHTML += `<option value="${device.deviceId}">${device.label}</option>`
247
+ const select = document.querySelector("#" + device.kind);
248
+ if (select) {
249
+ const deviceLabel = device.label || `Device (${device.deviceId || device.kind})`;
250
+ select.innerHTML += `<option value="${device.deviceId}">${deviceLabel}</option>`;
245
251
  }
246
- })
247
- })
252
+ });
253
+ };
254
+
255
+ try {
256
+ navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then((stream) => {
257
+ navigator.mediaDevices.enumerateDevices().then((availableDevices) => {
258
+ fillDeviceOptions(availableDevices);
259
+ });
260
+
261
+ stream.getTracks()?.forEach(track => track.stop());
262
+ });
263
+ } catch (e) {
264
+ console.error("could not request user devices, error", e);
265
+
266
+ navigator.mediaDevices.enumerateDevices().then((availableDevices) => {
267
+ fillDeviceOptions(availableDevices);
268
+ });
269
+ }
248
270
 
249
271
  // if room is predefined in search params, skip room URL field;
250
272
  checkDynamicRoomURL();
@@ -272,7 +294,7 @@
272
294
  }
273
295
  }
274
296
 
275
- async function loadRoom() {
297
+ async function loadRoom() {
276
298
  try {
277
299
  const parent = document.querySelector(".frame-parent");
278
300
  parent.innerHTML = null;
@@ -2,9 +2,10 @@
2
2
  import { EventEmitter } from 'events';
3
3
  import { PermissionManager } from './utils/PermissionManager';
4
4
  import { LayoutMode } from './utils/vars';
5
- import { AnyFn, BrandingOptionsConfig, CaptionsOptions, EmbeddedInstance, FeatureFlag, InitialRoomSettings, InitOptions, InstanceProperties, QueuedEventListener, QueuedUICallback, QueuedTileAction, Stored, TileActionProperties, UICallbackName, UserId, UserTileType, VirtualBackgroundOptions } from './types';
5
+ import { AnyFn, BrandingOptionsConfig, CaptionsOptions, EmbeddedInstance, FeatureFlag, InitialRoomSettings, InitOptions, InstanceProperties, QueuedEventListener, QueuedUICallback, QueuedTileAction, Stored, TileActionProperties, UICallbackName, UserId, UserTileType, VirtualBackgroundOptions, AddImageToWhiteboardOptions, TemplateParams } from './types';
6
6
  export declare class DigitalSambaEmbedded extends EventEmitter implements EmbeddedInstance {
7
7
  initOptions: Partial<InitOptions>;
8
+ templateParams?: TemplateParams;
8
9
  roomSettings: Partial<InitialRoomSettings>;
9
10
  savedIframeSrc: string;
10
11
  allowedOrigin: string;
@@ -17,6 +18,7 @@ export declare class DigitalSambaEmbedded extends EventEmitter implements Embedd
17
18
  queuedUICallbacks: QueuedUICallback[];
18
19
  queuedTileActions: QueuedTileAction[];
19
20
  private tileActionListeners;
21
+ private defaultMediaDevices;
20
22
  constructor(options?: Partial<InitOptions>, instanceProperties?: Partial<InstanceProperties>, loadImmediately?: boolean);
21
23
  static createControl: (initOptions: Partial<InitOptions>, instanceProperties?: InstanceProperties) => DigitalSambaEmbedded;
22
24
  private mountFrame;
@@ -40,6 +42,7 @@ export declare class DigitalSambaEmbedded extends EventEmitter implements Embedd
40
42
  private sendMessage;
41
43
  private logError;
42
44
  private applyFrameProperties;
45
+ private setTemplateParams;
43
46
  get roomState(): import("./types").RoomState;
44
47
  get localUser(): import("./types").User;
45
48
  get features(): import("./types").FeatureSet;
@@ -50,6 +53,10 @@ export declare class DigitalSambaEmbedded extends EventEmitter implements Embedd
50
53
  enableAudio: () => void;
51
54
  disableAudio: () => void;
52
55
  toggleAudio: (enable?: boolean) => void;
56
+ openWhiteboard: () => void;
57
+ closeWhiteboard: () => void;
58
+ toggleWhiteboard: (show?: boolean) => void;
59
+ addImageToWhiteboard: (options: AddImageToWhiteboardOptions) => void;
53
60
  startScreenshare: () => void;
54
61
  stopScreenshare: () => void;
55
62
  startRecording: () => void;
package/dist/esm/index.js CHANGED
@@ -9,8 +9,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  var _a;
11
11
  import { EventEmitter } from 'events';
12
+ import { enumerateDevices } from './utils/enumerateDevices';
12
13
  import { PermissionManager } from './utils/PermissionManager';
13
- import { CONNECT_TIMEOUT, getDefaultStoredState, internalEvents, } from './utils/vars';
14
+ import { CONNECT_TIMEOUT, getDefaultStoredState, internalEvents, PACKAGE_VERSION, } from './utils/vars';
14
15
  import { createWatchedProxy } from './utils/proxy';
15
16
  import { ALLOW_ATTRIBUTE_MISSING, INVALID_CONFIG, INVALID_URL, INSECURE_CONTEXT, UNKNOWN_TARGET, } from './utils/errors';
16
17
  export class DigitalSambaEmbedded extends EventEmitter {
@@ -27,6 +28,7 @@ export class DigitalSambaEmbedded extends EventEmitter {
27
28
  this.queuedUICallbacks = [];
28
29
  this.queuedTileActions = [];
29
30
  this.tileActionListeners = {};
31
+ this.defaultMediaDevices = {};
30
32
  this.mountFrame = (loadImmediately) => {
31
33
  const { url, frame, root } = this.initOptions;
32
34
  if (root) {
@@ -67,17 +69,8 @@ export class DigitalSambaEmbedded extends EventEmitter {
67
69
  this.frame.style.display = 'block';
68
70
  };
69
71
  this.prepareRoomSettings = (settings) => __awaiter(this, void 0, void 0, function* () {
70
- var _b;
71
- (_b = settings.mediaDevices) !== null && _b !== void 0 ? _b : (settings.mediaDevices = {});
72
- if (settings.mediaDevices) {
73
- const availabledevices = yield navigator.mediaDevices.enumerateDevices();
74
- Object.entries(settings.mediaDevices).forEach(([kind, deviceId]) => {
75
- const match = availabledevices.find((device) => device.deviceId === deviceId);
76
- if (match) {
77
- settings.mediaDevices[kind] = match.label;
78
- }
79
- });
80
- }
72
+ this.defaultMediaDevices = settings.mediaDevices || {};
73
+ settings.mediaDevices = {};
81
74
  if (settings.appLanguage) {
82
75
  this.stored.roomState.appLanguage = settings.appLanguage;
83
76
  }
@@ -85,7 +78,7 @@ export class DigitalSambaEmbedded extends EventEmitter {
85
78
  try {
86
79
  settings.initials = settings.initials.trim();
87
80
  }
88
- catch (_c) {
81
+ catch (_b) {
89
82
  settings.initials = undefined;
90
83
  }
91
84
  }
@@ -326,7 +319,7 @@ export class DigitalSambaEmbedded extends EventEmitter {
326
319
  return this.emit(eventName, ...args);
327
320
  };
328
321
  this.handleInternalMessage = (event) => __awaiter(this, void 0, void 0, function* () {
329
- var _d;
322
+ var _c;
330
323
  const message = event.DSPayload;
331
324
  switch (message.type) {
332
325
  case 'roomJoined': {
@@ -361,7 +354,7 @@ export class DigitalSambaEmbedded extends EventEmitter {
361
354
  break;
362
355
  }
363
356
  case 'userLeftBatch': {
364
- const userIds = (_d = message.data) === null || _d === void 0 ? void 0 : _d.userIds;
357
+ const userIds = (_c = message.data) === null || _c === void 0 ? void 0 : _c.userIds;
365
358
  if (userIds) {
366
359
  for (const userId of userIds) {
367
360
  const user = Object.assign({}, this.stored.users[userId]);
@@ -379,7 +372,11 @@ export class DigitalSambaEmbedded extends EventEmitter {
379
372
  }
380
373
  case 'internalMediaDeviceChanged': {
381
374
  const data = message.data;
382
- const devices = yield navigator.mediaDevices.enumerateDevices();
375
+ const devices = yield enumerateDevices();
376
+ if (this.defaultMediaDevices && Object.keys(this.defaultMediaDevices).length > 0) {
377
+ this.sendMessage({ type: 'applyMediaDevices', data: this.defaultMediaDevices });
378
+ this.defaultMediaDevices = {};
379
+ }
383
380
  const matchingDevice = devices.find((device) => device.kind === data.kind && device.label === data.label);
384
381
  if (matchingDevice) {
385
382
  const previousDeviceId = this.stored.roomState.media.activeDevices[data.kind];
@@ -465,6 +462,11 @@ export class DigitalSambaEmbedded extends EventEmitter {
465
462
  this.reportErrors = true;
466
463
  }
467
464
  };
465
+ this.setTemplateParams = (params) => {
466
+ if (params && Object.keys(params).length > 0) {
467
+ this.sendMessage({ type: 'setTemplateParams', data: params });
468
+ }
469
+ };
468
470
  // commands
469
471
  this.enableVideo = () => {
470
472
  this.roomSettings.videoEnabled = true;
@@ -504,6 +506,18 @@ export class DigitalSambaEmbedded extends EventEmitter {
504
506
  this.disableAudio();
505
507
  }
506
508
  };
509
+ this.openWhiteboard = () => {
510
+ this.sendMessage({ type: 'openWhiteboard' });
511
+ };
512
+ this.closeWhiteboard = () => {
513
+ this.sendMessage({ type: 'closeWhiteboard' });
514
+ };
515
+ this.toggleWhiteboard = (show) => {
516
+ this.sendMessage({ type: 'toggleWhiteboard', data: { show } });
517
+ };
518
+ this.addImageToWhiteboard = (options) => {
519
+ this.sendMessage({ type: 'addImageToWhiteboard', data: options || {} });
520
+ };
507
521
  this.startScreenshare = () => {
508
522
  this.sendMessage({ type: 'startScreenshare' });
509
523
  };
@@ -685,12 +699,14 @@ export class DigitalSambaEmbedded extends EventEmitter {
685
699
  this.changeRole = (userId, role) => {
686
700
  this.sendMessage({ type: 'changeRole', data: { userId, role } });
687
701
  };
702
+ console.log(`SDK Version: ${PACKAGE_VERSION}`);
688
703
  this.stored = getDefaultStoredState();
689
704
  this.stored.roomState = createWatchedProxy(Object.assign({}, this.stored.roomState), this.emitRoomStateUpdated);
690
705
  if (!window.isSecureContext) {
691
706
  this.logError(INSECURE_CONTEXT);
692
707
  }
693
708
  this.initOptions = options;
709
+ this.templateParams = options.templateParams;
694
710
  this.prepareRoomSettings(options.roomSettings || {});
695
711
  this.reportErrors = instanceProperties.reportErrors || false;
696
712
  this.frame.allow = 'camera; microphone; display-capture; autoplay;';
@@ -717,6 +733,7 @@ export class DigitalSambaEmbedded extends EventEmitter {
717
733
  this.queuedEventListeners = [];
718
734
  this.queuedUICallbacks = [];
719
735
  this.queuedTileActions = [];
736
+ this.setTemplateParams(this.templateParams);
720
737
  clearTimeout(confirmationTimeout);
721
738
  });
722
739
  });