@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.02 kB
JavaScript
function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=/*#__PURE__*/e(require("eventemitter3"));function n(){const e="from-webrtc-remote-control";return{isConnectionFromRemote:o=>o.metadata===e,connMetadata:e}}function t({sessionStorageKey:e,humanErrors:o}={}){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}}(o),{isConnectionFromRemote:r}=n(),{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 r={__proto__:null,default:function({humanizeError:e,getPeerId:t,setPeerIdToSessionStorage:r}){return{humanizeError:e,getPeerId:t,bindConnection:(e,t)=>new Promise(s=>{let i=null;const a=new o.default,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=o=>{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}(e,t,a,o),i.on("close",()=>{a.emit("remote.disconnect",{id:e.id}),d(()=>{a.emit("remote.reconnect",{id:e.id})})})};e.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};exports.master={__proto__:null,default:function({humanizeError:e,isConnectionFromRemote:n,getPeerId:t,setPeerIdToSessionStorage:r}){return{humanizeError:e,isConnectionFromRemote:n,getPeerId:t,bindConnection:e=>new Promise(t=>{const s=new o.default,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)};e.on("open",e=>{r(e),t(a)}),e.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},exports.prepareUtils=t,exports.remote=r;
//# sourceMappingURL=index.cjs.map