UNPKG

peers-server

Version:

WebRTC full-mesh implementation for server side with socket.io written in Typescript

1 lines 6.28 kB
!function(t,e){for(var i in e)t[i]=e[i]}(exports,function(t){var e={};function i(o){if(e[o])return e[o].exports;var s=e[o]={i:o,l:!1,exports:{}};return t[o].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=t,i.c=e,i.d=function(t,e,o){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)i.d(o,s,function(e){return t[e]}.bind(null,s));return o},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=0)}([function(t,e,i){t.exports=i(1)},function(t,e,i){"use strict";var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const s=o(i(2));e.default=s.default},function(t,e,i){"use strict";var o=this&&this.__createBinding||(Object.create?function(t,e,i,o){void 0===o&&(o=i),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[i]}})}:function(t,e,i,o){void 0===o&&(o=i),t[o]=e[i]}),s=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)"default"!==i&&Object.hasOwnProperty.call(t,i)&&o(e,t,i);return s(e,t),e},r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const d=n(i(3)),a=n(i(4)),u=r(i(5)),c=r(i(6)),f=r(i(8));e.default=class{constructor(t){this.rooms=[],this.start=()=>this.setupEvents(),this.setLogLevel=t=>f.default.setup(t),this.setupEvents=()=>{this.socketIo.on("connection",t=>{t.on("createRoom",(e,i)=>{const o=a.v4(),s=new c.default(o);s.join(t),this.rooms.push(s);const n={data:{roomId:o}};t.join(o),i(n)}),t.on("joinRoom",(e,i)=>{const o="join room";f.default.logger(o).debug(e),t.join(e.data.roomId);const s=this.rooms.find(t=>t.id===e.data.roomId);if(void 0!==s){f.default.logger(o).info("room found, join to:",s.id),s.join(t);i({data:{roomId:s.id}})}else{f.default.logger(o).info("room not found, create...");const e=a.v4(),s=new c.default(e);f.default.logger(o).info("room created, room id:",e),s.join(t),this.rooms.push(s);const n={data:{roomId:e}};t.join(e),i(n)}}),t.on("callToOthers",e=>{const i=this.rooms.find(t=>t.id===e.data.roomId);if(void 0===i)return void f.default.logger("call to others").info("room not found skip... from",t.id);const o=i.Sockets().filter(e=>e.id!==t.id);t.emit("call",u.default.createOfferMessage(o.map(t=>t.id))),i.notifyMediaStatusTo(t.id)}),t.on("offer",e=>{t.broadcast.to(e.data.id.destination).emit("remote-offer",e);const i=this.rooms.find(e=>e.Participants().find(e=>e.Id()===t.id));void 0!==i?i.notifyMediaStatusToAll(t.id):f.default.logger("offer").info("room not found, skipping to notify mediastatus, message from:",t.id)}),t.on("answer",e=>{t.broadcast.to(e.data.id.destination).emit("remote-answer",e)}),t.on("candidate",e=>{t.broadcast.to(e.data.id.destination).emit("remote-candidate",e)}),t.on("mediaUpdated",e=>{const i=this.rooms.find(e=>e.Participants().find(e=>e.Id()===t.id));void 0!==i?i.updateMediaStatus(e):f.default.logger("media updated").info("room not found, skipping... from:",t.id)}),t.on("disconnect",()=>{const e=this.rooms.find(e=>e.Sockets().map(t=>t.id).includes(t.id));if(void 0!==e)if(t.leave(e.id),1===e.Sockets().length)this.rooms=this.rooms.filter(t=>t!==e);else{e.leave(t);const i={data:{id:t.id}};this.socketIo.in(e.id).emit("remote-disconnected",i)}else f.default.logger("dissconnect").info("room not found, skip")})})},this.socketIo=d.default(t),this.socketIo.origins("*:*")}}},function(t,e){t.exports=require("socket.io")},function(t,e){t.exports=require("uuid")},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class o{}e.default=o,o.createOfferMessage=t=>({data:{ids:t}})},function(t,e,i){"use strict";var o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});const s=o(i(7));e.default=class{constructor(t){this.participants=[],this.Sockets=()=>this.participants.map(t=>t.Socket()),this.Participants=()=>this.participants,this.id=t}join(t){this.participants.push(new s.default(t.id,t))}leave(t){this.participants=this.participants.filter(e=>e.Id()!==t.id)}updateMediaStatus(t){const e=this.participants.find(e=>e.Id()===t.data.id);null==e||e.UpdateMediaStatus(t.data.isAudioMute,t.data.isVideoMute),this.participants.filter(e=>e.Id()!==t.data.id).forEach(e=>e.Socket().emit("remote-media-updated",t))}notifyMediaStatusTo(t){const e=this.participants.find(e=>e.Id()===t);this.participants.filter(e=>e.Id()!==t).forEach(t=>{null==e||e.Socket().emit("remote-media-updated",t.MediaStatus())})}notifyMediaStatusToAll(t){const e=this.participants.find(e=>e.Id()===t);this.participants.filter(e=>e.Id()!==t).forEach(t=>{t.Socket().emit("remote-media-updated",null==e?void 0:e.MediaStatus())})}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.default=class{constructor(t,e){this.isAudioMute=!1,this.isVideoMute=!1,this.Socket=()=>this.socket,this.IsAudioMute=()=>this.isAudioMute,this.IsVideoMute=()=>this.isVideoMute,this.Id=()=>this.id,this.MediaStatus=()=>({data:{id:this.id,isAudioMute:this.isAudioMute,isVideoMute:this.isVideoMute}}),this.UpdateMediaStatus=(t,e)=>{this.isAudioMute=t,this.isVideoMute=e},this.id=t,this.socket=e}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});const o=i(9);class s{static logger(t){const e=o.getLogger(t);return e.level=this.logLevel,e}static setup(t){this.logLevel=t,o.configure({appenders:{console:{type:"console"}},categories:{default:{appenders:["console"],level:"error"}}})}}e.default=s,s.logLevel="off"},function(t,e){t.exports=require("log4js")}]));