UNPKG

extensor

Version:

Extra funcionalities to socket.io

3 lines (2 loc) 7.52 kB
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("debug")),r=require("schemapack"),n=e(require("eventemitter3")),o=require("util");function i(e,t){try{var r=e()}catch(e){return t(e)}return r&&r.then?r.then(void 0,t):r}"undefined"!=typeof Symbol&&(Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator"))),"undefined"!=typeof Symbol&&(Symbol.asyncIterator||(Symbol.asyncIterator=Symbol("Symbol.asyncIterator")));var s=function(){function e(){this.store=new Map,this.itens={}}var t=e.prototype;return t.get=function(e){try{return Promise.resolve(this.store.get(e)||null)}catch(e){return Promise.reject(e)}},t.set=function(e,t){try{return Promise.resolve(this.store.set(e,t))}catch(e){return Promise.reject(e)}},t.del=function(e){try{return this.store.delete(e),Promise.resolve(1)}catch(e){return Promise.reject(e)}},t.deleteAll=function(e){try{var t=this;return e.map((function(e){return t.store.delete(e)})),Promise.resolve(e.length)}catch(e){return Promise.reject(e)}},e}(),c=t("extensor"),a=c.extend("parser"),u=c.extend("server"),d=c.extend("client"),f=Symbol("extensorIoAuthHandling"),l=Symbol("extensorSocketAuthStatus"),h=Symbol("extensorSocketAuthTimeout"),p=u.extend("unique");function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var y=a.extend("schemapack").extend("encoder"),v=function(e,t){return function(){function r(){}var n=r.prototype;return n.encode=function(t,r){switch(t.type){case 2:case 5:return r(t.data[0]in e?[this.pack(t)]:[this.json(t)]);default:return r([this.json(t)])}},n.json=function(e){try{return y("json packet %j",e),JSON.stringify(e)}catch(e){return y("json error: %s",e.message),'{"type": 4, "data": "parser error"}'}},n.pack=function(r){try{var n=r.data[0],o=t[n];return y("binary packet %j",r),o.encode({_id:e[n].id,data:r.data[1],nsp:r.nsp,id:"id"in r?r.id:-1})}catch(e){return y("binary error: %s",e.message),'{"type": 4, "data": "parser error"}'}},r}()},g=a.extend("schemapack").extend("decoder"),k=function(e,t){return function(r){var n,o;function i(){return r.apply(this,arguments)||this}o=r,(n=i).prototype=Object.create(o.prototype),n.prototype.constructor=n,n.__proto__=o;var s=i.prototype;return s.add=function(e){"string"==typeof e?this.parseJSON(e):this.parseBinary(e)},s.parseJSON=function(e){try{var t=JSON.parse(e);g("json packet %j",t),this.emit("decoded",t)}catch(t){g("json error, packet: %s, error: %s",e,t.message),this.emit("decoded",{type:4,data:"parser error: "+t.message})}},s.parseBinary=function(r){try{var n=new Uint8Array(r),o=e[n[0]],i=t[o].decode(r),s={type:2,data:[o,i.data],nsp:i.nsp};-1!==i.id&&(s.id=i.id),g("binary packet: %j",s),this.emit("decoded",s)}catch(e){g("binary error: %s",e.message),this.emit("decoded",{type:4,data:"parser error: "+e.message})}},s.destroy=function(){},i}(n)},b={__proto__:null,schemapack:function(e){var t=function(e){var t={},n={},o={};return Object.keys(e).forEach((function(i){var s=e[i];if(void 0===s.id)throw new Error("Undefined ID for event "+i);if(!s.schema)throw new Error("Undefined schema for event "+i);t[i]=r.build({_id:"varuint",data:s.schema,id:"varint",nsp:"string"}),n[i]=r.build(s.schema),o[s.id]=i})),{schemas:n,packetParser:t,idmap:o}}(m({},e)),n=t.idmap,o=t.packetParser,i=t.schemas;return{parser:{Encoder:v(e,o),Decoder:k(n,o)},idmap:n,schemas:i}}},j={AUTHORIZE:"extensorAuthorize",AUTH_RESULT:"extensorAuthResult",AUTH_TIMEOUT:"authTimeout"},A=d.extend("auth");function x(e,t,r,n){e.emit(j.AUTHORIZE,t,(function(t){if(A("[socket %s]: server response %s",e.id,t),t.error)return A("[socket %s]: auth failed, error: %s",e.id,t.error),void n(new Error(t.error));!function(e,t){for(var r in A("[socket %s]: merge socket props: %o",e.id,t),t)e[r]=t[r]}(e,t.merge),r()}))}var S=[j.AUTHORIZE,j.AUTH_RESULT,j.AUTH_TIMEOUT],_=u.extend("auth"),P={__proto__:null,server:function(e,t,r){return function(e,t,r){void 0===r&&(r={}),e[f]=!0,e.use((function(e,n){try{!function(e,t){var r=t?[].concat(t,S):S;e.use((function(t,n){if(e[l]||-1!==r.indexOf(t[0]))return n()}))}(e,r.authorizedEvents),e[l]=!1,_("[socket %s]: watching packets",e.id),n(),"timeout"in r&&!1!==r.timeout&&(e[h]=setTimeout((function(e){e.emit(j.AUTH_TIMEOUT),_("[socket %s]: auth timeout",e.id),e.disconnect(!0)}),r.timeout,e));var o=((a={resolve:null,reject:null}).promise=new Promise((function(e,t){a.resolve=e,a.reject=t})),a),s=o.resolve,c=o.reject;return e.auth=o.promise,e.on(j.AUTHORIZE,(function(n,o){try{var a=function(t){var r={};if(t instanceof Error)return _("[socket %s]: auth failed, error: %s",e.id,t.message),c(t),o({error:t.message}),void e.disconnect();_("[socket %s]: auth successful",e.id),e[l]=!0,t instanceof Object&&(_("[socket %s]: send props to client socket: %o",e.id,t),r=m({},t)),s(),o({merge:r})};return"timeout"in r&&!1!==r.timeout&&(_("[socket %s]: clear timeout",e.id,r.timeout),clearTimeout(e[h])),_("[socket %s]: waiting handler result",e.id),Promise.resolve(i((function(){return Promise.resolve(t({socket:e,data:n,done:a})).then((function(e){return void 0!==e&&a(e)}))}),(function(e){a(e)})))}catch(e){return Promise.reject(e)}})),Promise.resolve()}catch(e){return Promise.reject(e)}var a}))}(e,t,r)},client:function(e,t,r){return function(e,t,r){return r?x(e,t,r,r):new Promise((function(r,n){x(e,t,r,n)}))}(e,t,r)}},T={__proto__:null,Redis:function(){function e(e){this.client=e,this.getAsync=o.promisify(this.client.get).bind(this.client),this.setAsync=o.promisify(this.client.set).bind(this.client),this.delAsync=o.promisify(this.client.del).bind(this.client)}var t=e.prototype;return t.get=function(e){return this.getAsync(e)},t.set=function(e,t){return this.setAsync(e,t)},t.del=function(e){return this.delAsync(e)},t.deleteAll=function(e){return this.delAsync(e)},e}(),IORedis:function(){function e(e){this.client=e}var t=e.prototype;return t.get=function(e){return this.client.get(e)},t.set=function(e,t){return this.client.set(e,t)},t.del=function(e){return this.client.del(e)},t.deleteAll=function(e){var t;return(t=this.client).del.apply(t,e)},e}(),Local:s};exports.EVENTS=j,exports.auth=P,exports.parsers=b,exports.storageAdapters=T,exports.unique=function(e,t){var r=void 0===t?{}:t,n=r.identifier,o=r.onError,c=void 0===o?function(e,t,r){p("%s: %s",e,t.message)}:o,a=r.storage,u=void 0===a?new s:a;p("start");var d=new Set;e.use((function(t,r){try{return Promise.resolve(i((function(){function o(){var e=function(e,t){if(t&&t in e)return e[t];var r=e.handshake.headers;return""+(r["x-real-ip"]||r["x-forwarded-for"]||e.handshake.address)+r["user-agent"].replace(/ /g,"").toLowerCase()}(t,n),o="extensorUniqueState:"+e;return p("handling socket id: %s; identifier: %s",t.id,e),Promise.resolve(u.get(o)).then((function(e){return e?r(new Error("multiple attemp")):Promise.resolve(u.set(o,1)).then((function(){d.add(o),t.on("disconnect",(function(){d.delete(o),u.del(o).catch((function(e){c("disconnect",e,t)}))})),r()}))}))}var i=function(){if(!0===e[f]&&n)return Promise.resolve(t.auth).then((function(){}))}();return i&&i.then?i.then(o):o()}),(function(e){return p('error in check of socket id "'+t.id+'": '+e.message),c("middleware",e,t),r(new Error("multiple check fail"))})))}catch(e){return Promise.reject(e)}})),process.on("exit",(function(){u.deleteAll(Array.from(d))}))}; //# sourceMappingURL=extensor.cjs.production.min.js.map