UNPKG

@salutejs/jazz-sdk-electron-plugins

Version:

Jazz SDK electron plugins

2 lines (1 loc) 8.55 kB
"use strict";var e=require("@salutejs/jazz-sdk-electron/main"),t=require("electron"),s=require("os"),r=require("rx-effects"),o=require("ditox"),n=require("rxjs");function a(e,t,s,r){return new(s||(s=Promise))((function(t,o){function n(e){try{i(r.next(e))}catch(e){o(e)}}function a(e){try{i(r.throw(e))}catch(e){o(e)}}function i(e){var r;e.done?t(e.value):(r=e.value,r instanceof s?r:new s((function(e){e(r)}))).then(n,a)}i((r=r.apply(e,[])).next())}))}const i="jazz-sdk-desktop-capturer-ipc-channel";const c=o.token({key:"JAZZ_SDK_MAIN_CONTEXT_TOKEN"});const u=o=>{const{logger:i,access:c,platform:u}=o,d=r.createScope(),p=d.createStore(void 0),l=d.createStore([]),f=e.createEventBus();d.subscribe(l.value$.pipe(n.pairwise(),n.skip(1),n.tap((([e,t])=>{const{added:s,removed:r}=function(e,t){const s=new Map(t.map((e=>[e.id,e]))),r=new Map(e.map((e=>[e.id,e])));for(let t=0;t<e.length;t++)s.delete(e[t].id);for(let e=0;e<t.length;e++)r.delete(t[e].id);return{added:[...s.values()],removed:[...r.values()]}}(e,t);0===s.length&&0===r.length||f({type:"updateSources",payload:{sources:t,added:s,removed:r}})}))));const g=s.platform();let y;let m=r.createScope();d.handle(n.combineLatest([p.value$,c.$screenAccessStatus.value$.pipe(n.filter((e=>"granted"===e))),n.from(a(void 0,0,void 0,(function*(){var e,t,s;if("linux"!==g)return!1;if(void 0!==y)return y;const r=u.getLinuxSessionInfo();return y=!(!r||!r.waylandDisplay&&!(null===(e=r.xdgSessionType)||void 0===e?void 0:e.toLowerCase().includes("wayland"))&&!(null===(t=r.desktopSession)||void 0===t?void 0:t.toLowerCase().includes("plasma"))&&!(null===(s=r.xdgSessionType)||void 0===s?void 0:s.toLowerCase().includes("plasma")))}))).pipe(n.filter((e=>!e)))]).pipe(n.map((e=>e[0]))),(e=>{if(!e)return m.destroy(),void(m=r.createScope());m.subscribe(n.interval(2e3).pipe(n.switchMap((()=>n.from(v({types:["screen","window"],images:e.images})))),n.tap((e=>{"failure"!==e.type&&l.set(e.value.sources)})),n.catchError((e=>(i.error("Fail get desktop capture sources",e),n.EMPTY)))))}));const v=e=>a(void 0,0,void 0,(function*(){const{types:s,images:r}=e;i.debug("getDesktopCapturerSources with option",JSON.stringify(e));try{const e=yield t.desktopCapturer.getSources({types:s,thumbnailSize:r.isEnable?r.thumbnailSize:{height:0,width:0}});return{type:"success",value:{sources:e.filter((e=>"Gesture Blocking Overlay"!==e.name&&"App Icon Window"!==e.name&&!("window"===e.id.split(":")[0]&&"Window"===e.name))).map((e=>({id:e.id,name:e.name,type:e.id.split(":")[0],displayId:e.display_id,image:r.isEnable?e.thumbnail.toDataURL():void 0})))}}}catch(e){return{type:"failure",error:{message:e instanceof Error?e.message:"Failed to get sources"}}}})),h=()=>{const e=p.get();e&&(f({type:"finishProcess",payload:e}),p.set(void 0))};return{$processType:p,startProcess:e=>a(void 0,0,void 0,(function*(){return h(),p.set(e),f({type:"startProcess",payload:e}),v({types:["screen","window"],images:e.images})})),finishProcess:h,getDesktopCapturerSources:v,destroy:()=>{d.destroy()},event$:f.event$}};function d(e){const{deps:{sdkContext:{logger:o,platform:n}}}=e,c=o.getLogger("DesktopCapturer"),d=r.createScope(),f=d.createController((()=>(e=>{const{logger:s}=e,o=r.createScope(),n=o.createStore("unknown"),a=o.createStore("unknown"),i=o.createStore("unknown");return{$cameraAccessStatus:a,$microphoneAccessStatus:n,$screenAccessStatus:i,getMediaAccessStatus:e=>{const{type:r}=e;s.debug("getMediaAccessStatus",r);const o="darwin"===process.platform||"win32"===process.platform,c=o?t.systemPreferences.getMediaAccessStatus(r):"granted";return o?s.debug("getMediaAccessStatus has status:",c):s.debug("getMediaAccessStatus is unsupported"),"camera"===r?n.set(c):"microphone"===r?a.set(c):"screen"===r&&i.set(c),{status:c}},destroy:()=>{}}})({logger:c}))),g=d.createController((()=>u({logger:c,access:f,platform:n}))),y=s.platform();t.session.defaultSession.setDisplayMediaRequestHandler(((e,s)=>{t.ipcMain.once("jazz-sdk-reply-display-media-stream",((e,t)=>{const{source:r,audio:o}=t;if(c.debug("Received DisplayMedia stream:",null==r?void 0:r.id,"audio:",o),!r)return;const n={video:{id:r.id,name:r.name}};"linux"!==y&&o&&(n.audio="loopback"),s(n)})),e.frame.send("jazz-sdk-ask-display-media-stream"),c.debug("Ask DisplayMedia stream")}));t.ipcMain.removeHandler(i),t.ipcMain.handle(i,((e,t)=>a(this,0,void 0,(function*(){switch(t.type){case"getDesktopCapturerSources":return S(t.payload);case"askForMediaAccess":return k(t.payload);case"getMediaAccessStatus":return w(t.payload);case"systemSettings":return b(t.payload);case"osInfo":return m();case"capturerSourcesStartProcess":return v(e,t.payload);case"capturerSourcesFinishProcess":return h();default:!function(e){throw new Error(`Unexpected value ${e}`)}(t)}})))),d.add((()=>t.ipcMain.removeHandler(i))),d.handle(g.event$,(e=>{var s;const r=g.$processType.get();r&&(null===(s=t.webContents.fromId(r.frameId))||void 0===s||s.send("jazz-sdk-capturer-sources-event",e))}));const m=()=>a(this,0,void 0,(function*(){const e=yield n.getLinuxDistributionInfo(),t=yield n.getLinuxSessionInfo();return{type:"osInfo",payload:{arch:s.arch(),platform:s.platform(),release:s.release(),cpus:s.cpus(),totalmem:s.totalmem(),freemem:s.freemem(),loadavg:s.loadavg(),linuxSessionInfo:t,linuxDistributionInfo:e}}})),v=(e,t)=>a(this,0,void 0,(function*(){return{type:"capturerSourcesStartProcess",payload:yield g.startProcess({frameId:e.frameId,images:(null==t?void 0:t.images)||{isEnable:!1}})}})),h=()=>a(this,0,void 0,(function*(){return g.finishProcess(),{type:"capturerSourcesFinishProcess"}})),S=e=>a(this,0,void 0,(function*(){return{type:"getDesktopCapturerSources",payload:yield g.getDesktopCapturerSources(e)}})),k=e=>a(this,0,void 0,(function*(){const{type:t}=e;return"darwin"===process.platform||"win32"===process.platform?p(t,c):(c.debug("AskForMediaAccess unsupported by OS"),{type:"askForMediaAccess",payload:{status:!0,type:t}})})),w=e=>a(this,0,void 0,(function*(){return{type:"getMediaAccessStatus",payload:f.getMediaAccessStatus(e)}})),b=e=>a(this,0,void 0,(function*(){const{key:s}=e,r=l(s);return r.length>0&&(yield t.shell.openExternal(r)),{type:"systemSettings",payload:{key:s}}}));return{destroy:()=>{d.destroy()}}}function p(e,s){return a(this,0,void 0,(function*(){return t.systemPreferences.askForMediaAccess(e).then((t=>(s.debug("AskForMediaAccess has status",t),{type:"askForMediaAccess",payload:{status:t,type:e}}))).catch((t=>(s.debug("AskForMediaAccess catch error",t),{type:"askForMediaAccess",payload:{status:!1,type:e}})))}))}function l(e){if("darwin"===process.platform)switch(e){case"microphone-security":return"x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone";case"camera-security":return"x-apple.systempreferences:com.apple.preference.security?Privacy_Camera";case"screen-share-security":return"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture";default:return"x-apple.systempreferences:"}if("win32"===process.platform)switch(e){case"microphone-security":return"ms-settings:privacy-microphone";case"camera-security":return"ms-settings:privacy-webcam";default:return"ms-settings:"}return""}const f={debug:"DEBUG",info:"INFO ",warn:"WARN ",error:"ERROR"};function g(e){const t=function(e){switch(e){case"debug":return console.debug;case"info":return console.log;case"warn":return console.warn;default:return console.error}}(e.level);t&&t(`${f[e.level]} [${e.tag}]`,...e.messages)}exports.desktopCapturerPlugin=function(){return a(this,0,void 0,(function*(){return e.createModule({name:"DesktopCapturerPlugin",imports:{sdkContext:c},factory:d})}))},exports.getSystemSettingsUrl=l,exports.handleAskForMediaAccess=p,exports.logsPlugin=function(t){return a(this,0,void 0,(function*(){return e.createModule({imports:{sdkContext:c},factory:e=>function(e){var t,s;const{deps:{sdkContext:o},options:n={}}=e,a=null!==(t=n.isEnableStdout)&&void 0!==t&&t,i=null!==(s=n.logLevel)&&void 0!==s?s:"info",c=n.subscribe,{logMessage:u,logLevelWeight:d,getLogBuffer:p}=o.logs,l=r.createScope();a&&l.createController((()=>function(e){const{logEvent$:t,logLevel:s,getLogBuffer:o,logLevelWeight:n}=e,a=n.info,i=r.createScope(),c=s?n[s]:a;i.handle(t,(e=>{d(e)&&g(e)}));const u=o();function d(e){return n[e.level]>=c}return u.length>0&&u.forEach((e=>{d(e)&&g(e)})),{destroy:i.destroy}}({logEvent$:u.event$,logLevel:i,getLogBuffer:p,logLevelWeight:d})));if(c){l.handle(u.event$,(e=>{c(e)}));const e=p();e.length>0&&e.forEach((e=>{c(e)}))}return{destroy:()=>{l.destroy()}}}(Object.assign(Object.assign({},e),{options:t}))})}))};