@webrtc-remote-control/core
Version:
Thin abstraction layer above peerjs that will let you be more productive at making WebRTC data channels based apps.
3 lines (2 loc) • 2.92 kB
JavaScript
import e from"eventemitter3";function o(){const e="from-webrtc-remote-control";return{isConnectionFromRemote:o=>o.metadata===e,connMetadata:e}}function n({sessionStorageKey:e,humanErrors:n}={}){const t=function({mapping:e,withTechicalErrorMessage:o}={mapping:{},withTechicalErrorMessage:!0}){const n={"browser-incompatible":"Your browser doesn't support WebRTC features, please try with a recent browser.",disconnected:"You are disconnected and can't make any more peer connection, please reload.",network:"It seems you're experimenting some network problems.","peer-unavailable":"The peer you were connected to seems to have lost connection, try to reload it.","server-error":"An error occured on the signaling server. Sorry, try to come back later.",default:e=>"An error occured"+(e.type?` - type: ${e.type}`:""),...e};return function(e){const t=n[e.type]||("function"==typeof n.default?n.default(e):n.default);return t&&e.message&&o?`${t} (${e.message})`:t}}(n),{isConnectionFromRemote:r}=o(),{getPeerId:s,setPeerIdToSessionStorage:i}=function(e="webrtc-remote-control-peer-id"){return{getPeerId:()=>sessionStorage.getItem(e),setPeerIdToSessionStorage(o){sessionStorage.setItem(e,o)}}}(e);return{humanizeError:t,isConnectionFromRemote:r,getPeerId:s,setPeerIdToSessionStorage:i}}var t={__proto__:null,default:function({humanizeError:o,isConnectionFromRemote:n,getPeerId:t,setPeerIdToSessionStorage:r}){return{humanizeError:o,isConnectionFromRemote:n,getPeerId:t,bindConnection:o=>new Promise(t=>{const s=new e,i=new Map,c={sendTo(e,o){const n=i.get(e);return n?n.send(o):null},sendAll(e){[...i.values()].forEach(o=>{o.send(e)})},on:s.on.bind(s),off:s.off.bind(s)};o.on("open",e=>{r(e),t(c)}),o.on("connection",e=>{n(e)&&(i.set(e.peer,e),e.on("open",()=>{s.emit("remote.connect",{id:e.peer}),console.log("connections",i)}),e.on("data",o=>{s.emit("data",{id:e.peer,from:"remote"},o)}),e.on("close",()=>{i.delete(e.peer),s.emit("remote.disconnect",{id:e.peer}),console.log("connections",i)}))})})}},prepareUtils:n},r={__proto__:null,default:function({humanizeError:n,getPeerId:t,setPeerIdToSessionStorage:r}){return{humanizeError:n,getPeerId:t,bindConnection:(n,t)=>new Promise(s=>{let i=null;const c=new e,a={send(e){i?i.send(e):console.warning("You called `send` with no connection")},on:c.on.bind(c),off:c.off.bind(c)},d=e=>{i=null,i=function(e,n,t,r){const{connMetadata:s}=o(),i=e.connect(n,{serialization:"json",metadata:s});return i.on("open",()=>{"function"==typeof r&&r()}),i.on("data",e=>{t.emit("data",{from:"master"},e)}),i}(n,t,c,e),i.on("close",()=>{c.emit("remote.disconnect",{id:n.id}),d(()=>{c.emit("remote.reconnect",{id:n.id})})})};n.on("open",e=>{r(e),d(()=>s(a)),i.on("error",e=>{console.log("conn.error",e)}),window.addEventListener("beforeunload",()=>{i&&i.disconnect&&i.disconnect()})})})}},prepareUtils:n};export{t as master,n as prepareUtils,r as remote};
//# sourceMappingURL=index.module.js.map