UNPKG

@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) 3.13 kB
import e from"eventemitter3";function o(){return o=Object.assign||function(e){for(var o=1;o<arguments.length;o++){var n=arguments[o];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},o.apply(this,arguments)}function n(){const e="from-webrtc-remote-control";return{isConnectionFromRemote:o=>o.metadata===e,connMetadata:e}}function t({sessionStorageKey:e,humanErrors:t}={}){const r=function({mapping:e,withTechicalErrorMessage:n}={mapping:{},withTechicalErrorMessage:!0}){const t=o({"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 o=t[e.type]||("function"==typeof t.default?t.default(e):t.default);return o&&e.message&&n?`${o} (${e.message})`:o}}(t),{isConnectionFromRemote:s}=n(),{getPeerId:i,setPeerIdToSessionStorage:a}=function(e="webrtc-remote-control-peer-id"){return{getPeerId:()=>sessionStorage.getItem(e),setPeerIdToSessionStorage(o){sessionStorage.setItem(e,o)}}}(e);return{humanizeError:r,isConnectionFromRemote:s,getPeerId:i,setPeerIdToSessionStorage:a}}var r={__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,a={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(a)}),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:t},s={__proto__:null,default:function({humanizeError:o,getPeerId:t,setPeerIdToSessionStorage:r}){return{humanizeError:o,getPeerId:t,bindConnection:(o,t)=>new Promise(s=>{let i=null;const a=new e,c={send(e){i?i.send(e):console.warning("You called `send` with no connection")},on:a.on.bind(a),off:a.off.bind(a)},d=e=>{i=null,i=function(e,o,t,r){const{connMetadata:s}=n(),i=e.connect(o,{serialization:"json",metadata:s});return i.on("open",()=>{"function"==typeof r&&r()}),i.on("data",e=>{t.emit("data",{from:"master"},e)}),i}(o,t,a,e),i.on("close",()=>{a.emit("remote.disconnect",{id:o.id}),d(()=>{a.emit("remote.reconnect",{id:o.id})})})};o.on("open",e=>{r(e),d(()=>s(c)),i.on("error",e=>{console.log("conn.error",e)}),window.addEventListener("beforeunload",()=>{i&&i.disconnect&&i.disconnect()})})})}},prepareUtils:t};export{r as master,t as prepareUtils,s as remote}; //# sourceMappingURL=index.modern.js.map