@salutejs/jazz-sdk-electron-plugins
Version:
Jazz SDK electron plugins
2 lines (1 loc) • 6.31 kB
JavaScript
;var e=require("ditox"),t=require("@salutejs/jazz-sdk-web"),s=require("rx-effects"),o=require("rxjs");const i=e.token({key:"JAZZ_SDK_CONTEXT_TOKEN"}),r=e.token({key:"JAZZ_SDK_DESKTOP_CAPTURER_TOKEN"});function n(e,t,s,o){return new(s||(s=Promise))((function(i,r){function n(e){try{a(o.next(e))}catch(e){r(e)}}function c(e){try{a(o.throw(e))}catch(e){r(e)}}function a(e){var t;e.done?i(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(n,c)}a((o=o.apply(e,t||[])).next())}))}function c(e){const{ipcMain:o,logger:i}=e,r=s.createScope();function c(e){return n(this,void 0,void 0,(function*(){i.debug("Request media access status for",e);const{status:t}=yield o.getMediaAccessStatus(e);return i.debug("Response media access status is",t),t}))}function a(e){return n(this,void 0,void 0,(function*(){return yield o.askForMediaAccess(e)}))}const u=e=>n(this,void 0,void 0,(function*(){const t=function(e){switch(e){case"audio":return"microphone";case"video":return"camera";case"displayScreen":return"screen";default:!function(e){throw new Error(`Unexpected value ${e}`)}(e)}}(e),s=yield c(t);if(i.debug("Received desktop media access status",s),"not-determined"!==s)return s;if("screen"===t)return s;yield a(t);return yield c(t)}));return{askForMediaAccess:a,getMediaAccessStatus:c,requestDesktopMediaPermissions:e=>n(this,void 0,void 0,(function*(){for(const s of e){if("denied"===(yield u(s)))throw new t.DeniedBySystemError("audio"===s,"video"===s)}})),requestDesktopMediaAccess:u,openSystemSettings:function(e){return n(this,void 0,void 0,(function*(){i.debug("Request openSystemSettings",e),yield o.openSystemSettings(e)}))},destroy:()=>{r.destroy()}}}function a(e){const{sdkContext:{logger:i,localDevices:r}}=e.deps,a=i.getLogger(e.name),u=s.createScope(),{ipcMain:d}=function(){const e=window["jazz-sdk-desktop-capturer-bridge"];if(void 0===e)throw new Error("Failed connect to the preload layer. Please setup @salutejs/jazz-sdk-electron-plugins/preload/desktopCapturerPlugin to preload layer of electron");return e}(),p=u.createController((()=>c({ipcMain:d,logger:a}))),{$status:l,$accessStatus:y,$sources:f,$isSupportedShareDisplayAudio:S,cancel:v,event$:h,selectSource:g}=u.createController((()=>function(e){const{ipcMain:i,logger:r,mediaAccess:c}=e,a=s.createScope(),u=t.createEventBus(),d=a.createStore(void 0),p=t.createKeyQueue(),l=a.createStore("finished"),y=a.createStore([]),f=a.createStore(!0);i.osInfo().then((e=>{f.set("linux"!==e.platform)}));const S=e=>{r.debug("received sources",e.map((e=>e.id))),e.sort(((e,t)=>e.name<t.name?1:-1)),y.set(e)};let v;i.capturerSourcesFinishProcess();const h=()=>n(this,void 0,void 0,(function*(){var e;if(void 0!==v)return v;const t=yield i.osInfo();return t&&"linux"===t.platform&&t.linuxSessionInfo&&(null===(e=t.linuxSessionInfo.xdgSessionType)||void 0===e?void 0:e.toLowerCase().includes("wayland"))?(v=!0,v):(v=!1,v)}));window.JazzScreenObtainer={openDesktopPicker:(e,t)=>n(this,void 0,void 0,(function*(){r.debug("Request to open desktop capture picker");const e=yield h();e?r.debug("view desktop picker is disabled!"):l.set("pending"),i.capturerSourcesStartProcess().then((s=>{if(d.set({onSourceChoose:t}),"failure"!==s.type){if(e&&s.value.sources.length){const e=s.value.sources[0];return r.debug("auto select desktop source",e),t(e.id),u({type:"selectDesktopSource",payload:{source:e,isShareDisplayAudio:f.get()}}),void g()}l.set("started"),S(s.value.sources),u({type:"sources",payload:{sources:s.value.sources}})}else m()}))}))},a.add((()=>{window.JazzScreenObtainer=void 0,i.capturerSourcesFinishProcess()}));const g=()=>n(this,void 0,void 0,(function*(){d.set(void 0),y.set([]),yield i.capturerSourcesFinishProcess(),l.set("finished")})),k=()=>n(this,void 0,void 0,(function*(){var e;"finished"!==l.get()&&"finished"!==(yield o.firstValueFrom(l.value$.pipe(o.filter((e=>"pending"!==e)))))&&(null===(e=d.get())||void 0===e||e.onSourceChoose(),u({type:"cancel",payload:{action:"cancel"}}),yield g())})),m=()=>n(this,void 0,void 0,(function*(){yield p.waitKey("selectSource"),yield p.add({key:"cancel",cb:k})})),D=(e,...t)=>n(this,[e,...t],void 0,(function*(e,t=!1){if("finished"===l.get())return;if("finished"===(yield o.firstValueFrom(l.value$.pipe(o.filter((e=>"pending"!==e))))))return;const s=d.get();if(!s)return;s.onSourceChoose(e.id);const i=f.get()&&t;u({type:"selectDesktopSource",payload:{source:e,isShareDisplayAudio:i}}),yield g()})),A=a.createStore(!1),w=a.createStore(void 0);return a.handle(y.value$.pipe(o.filter(t.isNotEmpty)),(()=>n(this,void 0,void 0,(function*(){if(A.get())return;A.set(!0);const e=yield c.getMediaAccessStatus("screen");w.set(e)})))),a.handle(u.event$.pipe(t.filterByType("selectDesktopSource"),o.switchMap((({payload:e})=>new o.Observable((e=>{i.once("askDisplayMediaStream",(()=>{e.next("askDisplayMediaStream")}))})).pipe(o.map((()=>e)))))),(({source:e,isShareDisplayAudio:t})=>{i.replyDisplayMediaStream(e,t)})),a.add(i.subscribe("updateSources",(e=>{S(e.sources),u({type:"updateSources",payload:e})}))),a.add(i.subscribe("startProcess",(e=>{u({type:"startProcess",payload:e})}))),a.add(i.subscribe("finishProcess",(e=>{u({type:"finishProcess",payload:e})}))),{$accessStatus:w,$sources:y,$status:l,$isSupportedShareDisplayAudio:f,event$:u.event$,cancel:m,selectSource:(e,...t)=>n(this,[e,...t],void 0,(function*(e,t=!1){yield p.waitKey("cancel"),yield p.add({key:"selectSource",cb:()=>D(e,t)})})),destroy:()=>{a.destroy()}}}({ipcMain:d,logger:a,mediaAccess:p}))),k=r.hooks.requestMediaPermissions.tap((e=>n(this,void 0,void 0,(function*(){yield p.requestDesktopMediaPermissions(e)}))));return u.add((()=>k())),{desktopCapturer:{sources:f,accessStatus:y,status:l,isSupportedShareDisplayAudio:S,getMediaAccessStatus:p.getMediaAccessStatus,requestDesktopMediaAccess:p.requestDesktopMediaAccess,selectSource:g,openSystemSettings:p.openSystemSettings,cancel:v,event$:h},destroy:()=>{u.destroy()}}}exports.INTERVAL_CHECK_ACTUAL_SOURCE=2e3,exports.JAZZ_SDK_CONTEXT_TOKEN=i,exports.JAZZ_SDK_DESKTOP_CAPTURER_TOKEN=r,exports.desktopCapturerPlugin=function(){return n(this,void 0,void 0,(function*(){return t.createModule({name:"DesktopCapturerPlugin",imports:{sdkContext:i},factory:a,exports:{desktopCapturer:r}})}))},exports.getDesktopCapturer=function(e){return e.container.resolve(r)};