node-ws-packets
Version:
A packet-based javascript websocket communitcation.
1 lines • 5.51 kB
JavaScript
(()=>{var e={652:e=>{const Validator=(e,t)=>{const i=void 0===function recursion(e,t){if(!e||!t)return!1;for(let i in t){if(!(t[i]instanceof DetailedValue||e.hasOwnProperty(i)))return!1;let r=t[i],s=e[i];switch(r){case String:if("string"!=typeof s)return!1;break;case Number:if(isNaN(s)||"number"!=typeof s)return!1;break;case Boolean:if("boolean"!=typeof s)return!1;break;case Array:if(!Array.isArray(s))return!1;break;case Object:if(!(s instanceof Object))return!1;break;default:if(r instanceof DetailedValue){if(void 0!==r.validate(s))return!1;break}if("object"!=typeof r)return!1;if(Array.isArray(r)&&!Array.isArray(s))return!1;if(Array.isArray(r)&&Array.isArray(s))for(let e in s){if(void 0!==recursion([s[e]],[r[0]]))return!1}else{if(void 0!==recursion(s,r))return!1}}}}(e,t);return i};class DetailedValue{constructor(e,{required:t=!0,min:i=null,max:r=null,isEmail:s=!1}={}){this.type=e,this.required=t,this.min=i,this.max=r,this.isEmail=s}validate(e){const t=Validator([e],[this.type]);if(!this.required&&!e&&!t)return;if(this.required&&!e&&!t)return!1;let i=0;return[String,Array].includes(this.type)||Array.isArray(this.type)?i=e.length:this.type===Number&&(i=e),!(this.min&&i<this.min)&&(!(this.max&&i>this.max)&&(!(this.isEmail&&!this.validateEmail(e,!0))&&(!!t&&void 0)))}validateEmail(e,t=!1){let i=/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return t&&(i=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i),i.test(String(e).toLowerCase())}}e.exports&&(e.exports={Validator,DetailedValue})},318:(e,t,i)=>{const r=i(949);e.exports=class Client{constructor(e,{log:t=!1,keepAlive:i=!1}={}){this.log=t,this.ws=e,this.keepAlive=i,this.packets={},this.callbacks={onError:[],onConnect:[],onDisconnect:[],onInvalid:[]},i&&(this.__keepAliveManager=new r(this,!0));const open=()=>{this.log&&console.log("New connection established"),e.sendPacket=t=>{const i=this.encode(t);delete i.model,1===e.readyState&&e.send(JSON.stringify(i))},this.callbacks.onConnect.forEach((t=>{t(e)}))},message=e=>{try{this.handle(e)}catch(e){this.log&&console.error("Error on incoming message!",e)}},close=t=>{this.callbacks.onDisconnect.forEach((i=>{i(e,t)}))},error=t=>{this.callbacks.onError.forEach((i=>{i(e,t)}))};e.on?e.on("open",open):e.onopen=open,e.on?e.on("close",close):e.onclose=close,e.on?e.on("message",message):e.onmessage=message,e.on?e.on("error",error):e.onerror=error,this.log&&console.log("PacketClient initialized!")}addPacket(e){const t=e.constructor,i=e.name;return this.packets[i]?(this.log&&console.error(`Packet '${i}' already initialized!`),this):(this.packets[i]=t,this.log&&console.log(`Packet '${i}' initialized!`),this)}removePacket(e){const t=e.name;return this.packets[t]?(delete this.packets[t],this.log&&console.log(`Packet '${t}' removed!`),this):(this.log&&console.error(`Packet '${t}' not initialized!`),this)}handle(e){try{let t=JSON.parse(e.data?e.data:e);const i=this.decode(t);if(null===i)return void this.callbacks.onInvalid.forEach((e=>{e(this.ws,t)}));if(i.isValid=i.validate(),!i.isValid)return void this.callbacks.onInvalid.forEach((e=>{e(this.ws,i)}));i.handle(this.ws)}catch(e){this.log&&console.error("Error while handling event",e)}}encode(e){return e.json()}decode(e){return e.name&&this.packets[e.name]?(delete e.model,Object.assign(new this.packets[e.name],e)):null}onConnect(e){return this.callbacks.onConnect.push(e),this}onDisconnect(e){return this.callbacks.onDisconnect.push(e),this}onError(e){return this.callbacks.onError.push(e),this}onInvalid(e){return this.callbacks.onInvalid.push(e),this}}},295:(e,t,i)=>{const r=i(988);e.exports=class CKeepAlivePacket extends r{constructor(e){super("IKeepAlivePacket",e,{timestamp:Number})}handle(e){e.sendPacket(new CKeepAlivePacket({timestamp:this.payload.timestamp}))}}},949:(e,t,i)=>{const r=i(295),s=i(900);e.exports=class IKeepAliveManager{__keepAliveTimeout;__keepAliveInterval;constructor(e,t=!1,{keepAliveTimeout:i=60,keepAliveInterval:n=30}={}){this.__keepAliveTimeout=i,this.__keepAliveInterval=n,t?e.addPacket(new r):e.addPacket(new s)}onConnect(e){e.__keepAliveManager=this,e.__keepAliveHandler=()=>{this.receivePing(e)},this.sendPing(e)}onDisconnect(e){clearTimeout(e.__keepAliveTimeout)}sendPing(e){e.sendPacket(new s({timestamp:Date.now()})),e.__keepAliveTimeout=setTimeout((()=>{e.terminate()}),1e3*this.__keepAliveTimeout)}receivePing(e){clearTimeout(e.__keepAliveTimeout),e.__keepAliveTimeout=setTimeout((()=>{this.sendPing(e)}),1e3*this.__keepAliveInterval)}}},900:(e,t,i)=>{const r=i(988);e.exports=class SKeepAlivePacket extends r{constructor(e){super("IKeepAlivePacket",e,{timestamp:Number})}handle(e){e.__keepAliveHandler()}}},988:(e,t,i)=>{const{Validator:r,DetailedValue:s}=i(652);e.exports=class Packet{constructor(e,t={},i={}){this.name=e,this.payload=t,this.model=i,this.isValid=this.validate()}handle(e){}validate(){return r(this.payload,this.model)}json(){return this}}}},t={};function __webpack_require__(i){var r=t[i];if(void 0!==r)return r.exports;var s=t[i]={exports:{}};return e[i](s,s.exports,__webpack_require__),s.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.g.Client=__webpack_require__(318),__webpack_require__.g.Packet=__webpack_require__(988)})();