diff --git a/packages/@jsonql/koa/package.json b/packages/@jsonql/koa/package.json index eb6798dcebf713064993060edd2144549de2ca85..ce31e5f23c00b8d03e1eb30cd445a51722576608 100644 --- a/packages/@jsonql/koa/package.json +++ b/packages/@jsonql/koa/package.json @@ -53,7 +53,7 @@ "debug": "^4.1.1", "fs-extra": "^8.1.0", "jsonql-constants": "^1.8.10", - "jsonql-koa": "^1.4.11", + "jsonql-koa": "^1.4.12", "jsonql-params-validator": "^1.4.11", "koa": "^2.11.0", "koa-bodyparser": "^4.2.1", @@ -61,7 +61,7 @@ "yargs": "^14.2.0" }, "optionalDependencies": { - "jsonql-ws-server": "^1.4.1" + "jsonql-ws-server": "^1.4.3" }, "bin": { "jsonql-koa-cli": "./cli.js" diff --git a/packages/@jsonql/koa/tests/socket.test.js b/packages/@jsonql/koa/tests/socket.test.js index c20fafcb31f6b3f50e990c09c3b444cb75a5e71c..fc9b64c640f550af26df98dbc29b3d91835e9773 100644 --- a/packages/@jsonql/koa/tests/socket.test.js +++ b/packages/@jsonql/koa/tests/socket.test.js @@ -45,19 +45,33 @@ test.serial.cb(`It should able to connect to the public socket`, t => { const client = t.context.client client.socket.availableToEveryone.onResult = (msg) => { - debug(msg) - t.truthy(msg) + t.truthy(msg.indexOf('public message')) t.end() } client.socket.availableToEveryone() - .catch(err => { - debug(err) +}) + +test.cb.only(`It should able to login to the socket and connect to a private socket channel`, t => { + + t.plan(2) + + const client = t.context.client; + // @BUG The problem happens in the ws-client when trigger the login it might be looking for the custom + // login method which is shouldn't and needn't + client.login('Jack') + .then(result => { + debug(result) t.pass() - t.end() }) + // @TODO should make this onLogin available as a global method + client.socket.onLogin = function() { + debug(client.userdata()) -}) + t.pass() + t.end() + } -test.todo(`It should able to login to the socket and connect to a private socket channel`) + +}) diff --git a/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js b/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js index 8a66d3cb275ced9b66bf35d0db0f13dddb51224c..99398c12ca272fc8419910001bd848afce8a825e 100644 --- a/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js +++ b/packages/@jsonql/ws/dist/jsonql-ws-client.umd.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("fs"),require("path")):"function"==typeof define&&define.amd?define(["fs","path"],e):(t=t||self).jsonqlWsClient=e(t.fs,t.path)}(this,(function(t,e){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var r=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 406},r.name.get=function(){return"Jsonql406Error"},Object.defineProperties(e,r),e}(Error),n=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"Jsonql500Error"},Object.defineProperties(e,r),e}(Error),o=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(e,r),e}(Error),a=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(e,r),e}(Error),i=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(e,r),e}(Error),u="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},c=function(){try{if(window||document)return!0}catch(t){}return!1},f=function(){try{if(!c()&&u)return!0}catch(t){}return!1};var s=function(t){function e(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];t.apply(this,e)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.where=function(){return c()?"browser":f()?"node":"unknown"},e}(Error),l=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,Error.captureStackTrace&&Error.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 404},r.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(e,r),e}(s),p=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(e,r),e}(Error),h=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(e,r),e}(Error),v=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(e,r),e}(Error),d=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,Error.captureStackTrace&&Error.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(e,r),e}(s),g="data",y="error",b="jsonql",_="query",m="mutation",w="socket",j="type",O="optional",S="enumv",k="args",E="checker",$="alias",A="No message",T="__login__",P="__logout__",N="emit",R="acknowledge",z="error",x="nspSet",C="publicNamespace",q="onMessage",M="onResult",F="onError",L="onReady",W="onLogin",U="message",I="result",J="error",D="ready",B="login",V="token",Y=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,Error.captureStackTrace&&Error.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0},statusCode:{configurable:!0}};return r.name.get=function(){return"JsonqlError"},r.statusCode.get=function(){return-1},Object.defineProperties(e,r),e}(s),H=function(t){function e(r,n){t.call(this,n),this.statusCode=r,this.className=e.name}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlServerError"},Object.defineProperties(e,r),e}(Error);function G(t){if(Array.isArray(t))throw new d("",t);var e=t.message||A,u=t.detail||t;switch(!0){case t instanceof r:throw new r(e,u);case t instanceof n:throw new n(e,u);case t instanceof o:throw new o(e,u);case t instanceof a:throw new a(e,u);case t instanceof i:throw new i(e,u);case t instanceof l:throw new l(e,u);case t instanceof p:throw new p(e,u);case t instanceof h:throw new h(e,u);case t instanceof v:throw new v(e,u);case t instanceof d:throw new d(e,u);case t instanceof H:throw new H(e,u);default:throw new Y(e,u)}}var K="socket.io",Q=N,X="UKNNOWN RESULT!",Z="on",tt=Array.isArray,et="object"==typeof u&&u&&u.Object===Object&&u,rt="object"==typeof self&&self&&self.Object===Object&&self,nt=et||rt||Function("return this")(),ot=nt.Symbol,at=Object.prototype,it=at.hasOwnProperty,ut=at.toString,ct=ot?ot.toStringTag:void 0;var ft=Object.prototype.toString;var st="[object Null]",lt="[object Undefined]",pt=ot?ot.toStringTag:void 0;function ht(t){return null==t?void 0===t?lt:st:pt&&pt in Object(t)?function(t){var e=it.call(t,ct),r=t[ct];try{t[ct]=void 0;var n=!0}catch(t){}var o=ut.call(t);return n&&(e?t[ct]=r:delete t[ct]),o}(t):function(t){return ft.call(t)}(t)}function vt(t,e){return function(r){return t(e(r))}}var dt=vt(Object.getPrototypeOf,Object);function gt(t){return null!=t&&"object"==typeof t}var yt="[object Object]",bt=Function.prototype,_t=Object.prototype,mt=bt.toString,wt=_t.hasOwnProperty,jt=mt.call(Object);function Ot(t){if(!gt(t)||ht(t)!=yt)return!1;var e=dt(t);if(null===e)return!0;var r=wt.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&mt.call(r)==jt}function St(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r=n?t:function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(o);++n-1;);return r}(n,o),function(t,e){for(var r=t.length;r--&&zt(e,t[r],0)>-1;);return r}(n,o)+1).join("")}var Gt=function(t){return tt(t)?t:[t]},Kt=function(t,e){try{var r=Object.keys(t);return n=e,!!r.filter((function(t){return t===n})).length}catch(t){return!1}var n},Qt=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.join("_")},Xt=function(t){if("function"==typeof t)return!0;console.error("Expect to be Function type!")},Zt=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return e.reduce((function(t,e){return Reflect.apply(e,null,Gt(t))}),Reflect.apply(t,null,r))}};function te(t,e){return t===e||t!=t&&e!=e}function ee(t,e){for(var r=t.length;r--;)if(te(t[r][0],e))return r;return-1}var re=Array.prototype.splice;function ne(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e-1},ne.prototype.set=function(t,e){var r=this.__data__,n=ee(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var ae="[object AsyncFunction]",ie="[object Function]",ue="[object GeneratorFunction]",ce="[object Proxy]";function fe(t){if(!oe(t))return!1;var e=ht(t);return e==ie||e==ue||e==ae||e==ce}var se,le=nt["__core-js_shared__"],pe=(se=/[^.]+$/.exec(le&&le.keys&&le.keys.IE_PROTO||""))?"Symbol(src)_1."+se:"";var he=Function.prototype.toString;function ve(t){if(null!=t){try{return he.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var de=/^\[object .+?Constructor\]$/,ge=Function.prototype,ye=Object.prototype,be=ge.toString,_e=ye.hasOwnProperty,me=RegExp("^"+be.call(_e).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function we(t){return!(!oe(t)||(e=t,pe&&pe in e))&&(fe(t)?me:de).test(ve(t));var e}function je(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return we(r)?r:void 0}var Oe=je(nt,"Map"),Se=je(Object,"create");var ke="__lodash_hash_undefined__",Ee=Object.prototype.hasOwnProperty;var $e=Object.prototype.hasOwnProperty;var Ae="__lodash_hash_undefined__";function Te(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=er}function nr(t){return null!=t&&rr(t.length)&&!fe(t)}var or="object"==typeof exports&&exports&&!exports.nodeType&&exports,ar=or&&"object"==typeof module&&module&&!module.nodeType&&module,ir=ar&&ar.exports===or?nt.Buffer:void 0,ur=(ir?ir.isBuffer:void 0)||function(){return!1},cr={};cr["[object Float32Array]"]=cr["[object Float64Array]"]=cr["[object Int8Array]"]=cr["[object Int16Array]"]=cr["[object Int32Array]"]=cr["[object Uint8Array]"]=cr["[object Uint8ClampedArray]"]=cr["[object Uint16Array]"]=cr["[object Uint32Array]"]=!0,cr["[object Arguments]"]=cr["[object Array]"]=cr["[object ArrayBuffer]"]=cr["[object Boolean]"]=cr["[object DataView]"]=cr["[object Date]"]=cr["[object Error]"]=cr["[object Function]"]=cr["[object Map]"]=cr["[object Number]"]=cr["[object Object]"]=cr["[object RegExp]"]=cr["[object Set]"]=cr["[object String]"]=cr["[object WeakMap]"]=!1;var fr,sr="object"==typeof exports&&exports&&!exports.nodeType&&exports,lr=sr&&"object"==typeof module&&module&&!module.nodeType&&module,pr=lr&&lr.exports===sr&&et.process,hr=function(){try{var t=lr&&lr.require&&lr.require("util").types;return t||pr&&pr.binding&&pr.binding("util")}catch(t){}}(),vr=hr&&hr.isTypedArray,dr=vr?(fr=vr,function(t){return fr(t)}):function(t){return gt(t)&&rr(t.length)&&!!cr[ht(t)]};function gr(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}var yr=Object.prototype.hasOwnProperty;function br(t,e,r){var n=t[e];yr.call(t,e)&&te(n,r)&&(void 0!==r||e in t)||Ce(t,e,r)}var _r=9007199254740991,mr=/^(?:0|[1-9]\d*)$/;function wr(t,e){var r=typeof t;return!!(e=null==e?_r:e)&&("number"==r||"symbol"!=r&&mr.test(t))&&t>-1&&t%1==0&&t0){if(++e>=xr)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(zr);function Fr(t,e){return Mr(function(t,e,r){return e=Rr(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,a=Rr(n.length-e,0),i=Array(a);++o1?e[n-1]:void 0,a=n>2?e[2]:void 0;for(o=Lr.length>3&&"function"==typeof o?(n--,o):void 0,a&&function(t,e,r){if(!oe(r))return!1;var n=typeof e;return!!("number"==n?nr(r)&&wr(e,r.length):"string"==n&&e in r)&&te(r[e],t)}(e[0],e[1],a)&&(o=n<3?void 0:o,n=1),t=Object(t);++r0;)e[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return e.reduce((function(t,e){return t.then((function(t){return e(t)}))}),Reflect.apply(t,null,r))}}function Ir(t,e,r,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(t,e)&&Object.defineProperty(t,e,{set:r,get:null===n?function(){return null}:n}),t}function Jr(t,e,r,n){void 0===n&&(n=!1);var o=Object.getOwnPropertyDescriptor(t,e);return!1===n&&void 0!==o?t:(Object.defineProperty(t,e,{value:r,writable:n}),t)}function Dr(t){return!!Kt(t,"socket")&&t.socket}var Br="[object String]";function Vr(t){return"string"==typeof t||!tt(t)&>(t)&&ht(t)==Br}var Yr=function(t){var e;return(e={}).args=t,e};function Hr(t,e,r){return void 0===e&&(e=[]),void 0===r&&(r=!1),JSON.stringify(function(t,e,r){var n;if(void 0===e&&(e=[]),void 0===r&&(r=!1),Vr(t)&&tt(e)){var o=Yr(e);return!0===r?o:((n={})[t]=o,n)}throw new d("[createQuery] expect resolverName to be string and args to be array!",{resolverName:t,args:e})}(t,e,r))}var Gr=function(t){return Ot(t)&&(Kt(t,_)||Kt(t,m)||Kt(t,w))};function Kr(t){return void 0===t}var Qr="[object Boolean]";var Xr="[object Number]";function Zr(t){return function(t){return"number"==typeof t||gt(t)&&ht(t)==Xr}(t)&&t!=+t}var tn=vt(Object.keys,Object),en=Object.prototype.hasOwnProperty;function rn(t){return nr(t)?Or(t):function(t){if(!He(t))return tn(t);var e=[];for(var r in Object(t))en.call(t,r)&&"constructor"!=r&&e.push(r);return e}(t)}function nn(t,e){return t&&Fe(t,e,rn)}var on="__lodash_hash_undefined__";function an(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new Ne;++eu))return!1;var f=a.get(t);if(f&&a.get(e))return f==e;var s=-1,l=!0,p=r&fn?new an:void 0;for(a.set(t,e),a.set(e,t);++s0))},Yo=function(t){if(t.indexOf("array.<")>-1&&t.indexOf(">")>-1){var e=t.replace("array.<","").replace(">","");return e.indexOf("|")?e.split("|"):[e]}return!1},Ho=function(t,e){var r=t.arg;return e.length>1?!r.filter((function(t){return!(e.length>e.filter((function(e){return!Bo(e)(t)})).length)})).length:e.length>e.filter((function(t){return!Vo(r,t)})).length},Go=function(t,e){if(void 0===e&&(e=null),Ot(t)){if(!e)return!0;if(Vo(e))return!e.filter((function(e){var r=t[e.name];return!(e.type.length>e.type.filter((function(t){var e;return!!Kr(r)||(!1!==(e=Yo(t))?!Ho({arg:r},e):!Bo(t)(r))})).length)})).length}return!1},Ko=function(t){var e=t.arg,r=t.param,n=[e];return Array.isArray(r.keys)&&r.keys.length&&n.push(r.keys),Go.apply(null,n)};function Qo(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];try{window&&window.console&&Reflect.apply(console.log,console,t)}catch(t){}}var Xo=function(t,e){var r;switch(!0){case"object"===t:return!Ko(e);case"array"===t:return!Vo(e.arg);case!1!==(r=Yo(t)):return!Ho(e,r);default:return!Bo(t)(e.arg)}},Zo=function(t,e){return Kr(t)?!0!==e.optional||Kr(e.defaultvalue)?null:e.defaultvalue:t},ta=function(t,e,r){var n;void 0===r&&(r=!1);var o=function(t,e){if(!Vo(e))throw new Y("params is not an array! Did something gone wrong when you generate the contract.json?");if(0===e.length)return[];if(!Vo(t))throw new Y("args is not an array! You might want to do: ES6 Array.from(arguments) or ES5 Array.prototype.slice.call(arguments)");switch(!0){case t.length==e.length:return Qo(1),t.map((function(t,r){return{arg:t,index:r,param:e[r]}}));case!0===e[0].variable:Qo(2);var r=e[0].type;return t.map((function(t,n){return{arg:t,index:n,param:e[n]||{type:r,name:"_"}}}));case t.lengthe.length:Qo(4);var n=e.length,o=["any"];return t.map((function(t,r){var a=r>=n||!!e[r].optional,i=e[r]||{type:o,name:"_"+r};return{arg:a?Zo(t,i):t,index:r,param:i,optional:a}}));default:throw Qo(5),new Y("Could not understand your arguments and parameter structure!",{args:t,params:e})}}(t,e),a=o.filter((function(t){return!0===t.optional||!0===t.param.optional?function(t){var e=t.arg,r=t.param;return!!zo(e)&&!(r.type.length>r.type.filter((function(e){return Xo(e,t)})).length)}(t):!(t.param.type.length>t.param.type.filter((function(e){return Xo(e,t)})).length)}));return r?((n={})[y]=a,n[g]=o.map((function(t){return t.arg})),n):a},ea=function(t,e){var r,n=Object.keys(t);return r=e,!!n.filter((function(t){return t===r})).length},ra=function(t){return!zo(t)};function na(t,e){var r=Ro(e,(function(t,e){return!t[Jo]}));return to(r,{})?t:function(t,e){var r={};return e=Eo(e),nn(t,(function(t,n,o){Ce(r,e(t,n,o),t)})),r}(t,(function(t,e){return function(t,e,r){var n;return r(t,(function(t,r,o){if(e(t,r,o))return n=r,!1})),n}(r,Eo((function(t){return t.alias===e})),nn)||e}))}function oa(t,e){return $o(e,(function(e,r){var n,o;return Kr(t[r])||!0===e[Lo]&&ra(t[r])?Wr({},e,((n={})[Do]=!0,n)):((o={})[Uo]=t[r],o[Fo]=e[Fo],o[Lo]=e[Lo]||!1,o[Wo]=e[Wo]||!1,o[Io]=e[Io]||!1,o)}))}function aa(t,e){var r=function(t,e){var r=na(t,e);return{pristineValues:$o(Ro(e,(function(t,e){return ea(r,e)})),(function(t){return t.args})),checkAgainstAppProps:Ro(e,(function(t,e){return!ea(r,e)})),config:r}}(t,e),n=r.config,o=r.pristineValues;return[oa(n,r.checkAgainstAppProps),o]}var ia=function(t){return Vo(t)?t:[t]};var ua=function(t,e){return!Vo(e)||function(t,e){return!!t.filter((function(t){return t===e})).length}(e,t)},ca=function(t,e){try{return!!fe(e)&&e.apply(null,[t])}catch(t){return!1}};function fa(t){return function(e,r){if(e[Do])return e[Uo];var n=function(t,e){var r,n=[[t[Uo]],[(r={},r[Fo]=ia(t[Fo]),r[Lo]=t[Lo],r)]];return Reflect.apply(e,null,n)}(e,t);if(n.length)throw Qo("runValidationAction",r,e),new h(r,n);if(!1!==e[Wo]&&!ua(e[Uo],e[Wo]))throw Qo(Wo,e[Wo]),new p(r);if(!1!==e[Io]&&!ca(e[Uo],e[Io]))throw Qo(Io,e[Io]),new v(r);return e[Uo]}}var sa=function(t,e){return Promise.resolve(aa(t,e))};function la(t,e,r,n){return void 0===t&&(t={}),sa(t,e).then((function(t){return function(t,e){var r=t[0],n=t[1],o=$o(r,fa(e));return Wr(o,n)}(t,n)})).then((function(t){return Wr({},t,r)}))}function pa(t,e,r,n,o,a){void 0===r&&(r=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===a&&(a=!1);var i={};return i[k]=t,i[j]=e,!0===r&&(i[O]=!0),Vo(n)&&(i[S]=n),fe(o)&&(i[E]=o),Vr(a)&&(i[$]=a),i}var ha=Co,va=function(t,e,r){return void 0===r&&(r=!1),new Promise((function(n,o){var a=ta(t,e,r);return r?a[y].length?o(a[y]):n(a[g]):a.length?o(a):n([])}))},da=function(t,e,r){void 0===r&&(r={});var n=r[O],o=r[S],a=r[E],i=r[$];return pa.apply(null,[t,e,n,o,a,i])},ga=function(t){return function(e,r,n){return void 0===n&&(n={}),la(e,r,n,t)}}(ta),ya="jsonql-ws-client",ba=function(t){try{if(window.debug)return window.debug(ya).extend(t)}catch(t){}try{if(u.debug)return u.debug(ya).extend(t)}catch(t){}return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];console.info.apply(null,[ya,t].concat(e))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",ya+"*")}catch(t){}var _a=new WeakMap,ma=new WeakMap;var wa=function(){this.__suspend__=null,this.queueStore=new Set},ja={$suspend:{configurable:!0},$queues:{configurable:!0}};ja.$suspend.set=function(t){var e=this;if("boolean"!=typeof t)throw new Error("$suspend only accept Boolean value!");var r=this.__suspend__;this.__suspend__=t,this.logger("($suspend)","Change from "+r+" --\x3e "+t),!0===r&&!1===t&&setTimeout((function(){e.release()}),1)},wa.prototype.$queue=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",t),this.queueStore.add(t)),this.__suspend__},ja.$queues.get=function(){var t=this.queueStore.size;return this.logger("($queues)","size: "+t),t>0?Array.from(this.queueStore):[]},wa.prototype.release=function(){var t=this,e=this.queueStore.size;if(this.logger("(release)","Release was called "+e),e>0){var r=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",r),r.forEach((function(e){t.logger(e),Reflect.apply(t.$trigger,t,e)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(wa.prototype,ja);var Oa=function(t){function e(){t.call(this,{logger:ba("nb-event-service")})}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"jsonql-ws-client"},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){void 0===e&&(e={}),t.call(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={$done:{configurable:!0}};return e.prototype.logger=function(){},e.prototype.$on=function(t,e,r){var n=this;void 0===r&&(r=null);this.validate(t,e);var o=this.takeFromStore(t);if(!1===o)return this.logger("($on)",t+" callback is not in lazy store"),this.addToNormalStore(t,"on",e,r);this.logger("($on)",t+" found in lazy store");var a=0;return o.forEach((function(o){var i=o[0],u=o[1],c=o[2];if(c&&"on"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);n.logger("($on)","call run on "+t),n.run(e,i,r||u),a+=n.addToNormalStore(t,"on",e,r||u)})),a},e.prototype.$once=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=this.takeFromStore(t);this.normalStore;if(!1===n)return this.logger("($once)",t+" not in the lazy store"),this.addToNormalStore(t,"once",e,r);this.logger("($once)",n);var o=Array.from(n)[0],a=o[0],i=o[1],u=o[2];if(u&&"once"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);this.logger("($once)","call run for "+t),this.run(e,a,r||i),this.$off(t)},e.prototype.$only=function(t,e,r){var n=this;void 0===r&&(r=null),this.validate(t,e);var o=!1,a=this.takeFromStore(t);(this.normalStore.has(t)||(this.logger("($only)",t+" add to store"),o=this.addToNormalStore(t,"only",e,r)),!1!==a)&&(this.logger("($only)",t+" found data in lazy store to execute"),Array.from(a).forEach((function(o){var a=o[0],i=o[1],u=o[2];if(u&&"only"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);n.logger("($only)","call run for "+t),n.run(e,a,r||i)})));return o},e.prototype.$onlyOnce=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=!1,o=this.takeFromStore(t);if(this.normalStore.has(t)||(this.logger("($onlyOnce)",t+" add to store"),n=this.addToNormalStore(t,"onlyOnce",e,r)),!1!==o){this.logger("($onlyOnce)",o);var a=Array.from(o)[0],i=a[0],u=a[1],c=a[2];if(c&&"onlyOnce"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);this.logger("($onlyOnce)","call run for "+t),this.run(e,i,r||u),this.$off(t)}return n},e.prototype.$replace=function(t,e,r,n){if(void 0===r&&(r=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(t);var o=this["$"+n];return this.logger("($replace)",t,e),Reflect.apply(o,this,[t,e,r])}throw new Error(n+" is not supported!")},e.prototype.$trigger=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1),this.validateEvt(t);var o=0,a=this.normalStore;if(this.logger("($trigger)","normalStore",a),a.has(t)){var i=this.$queue(t,e,r,n);if(this.logger("($trigger)",t,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",t,"not executed. Exit now."),!1;for(var u=Array.from(a.get(t)),c=u.length,f=!1,s=0;s0;)n[o]=arguments[o+2];if(t.has(e)?(this.logger("(addToStore)",e+" existed"),r=t.get(e)):(this.logger("(addToStore)","create new Set for "+e),r=new Set),n.length>2)if(Array.isArray(n[0])){var a=n[2];this.checkTypeInLazyStore(e,a)||r.add(n)}else this.checkContentExist(n,r)||(this.logger("(addToStore)","insert new",n),r.add(n));else r.add(n);return t.set(e,r),[t,r.size]},e.prototype.checkContentExist=function(t,e){return!!Array.from(e).filter((function(e){return e[0]===t[0]})).length},e.prototype.checkTypeInStore=function(t,e){this.validateEvt(t,e);var r=this.$get(t,!0);return!1===r||!r.filter((function(t){var r=t[3];return e!==r})).length},e.prototype.checkTypeInLazyStore=function(t,e){this.validateEvt(t,e);var r=this.lazyStore.get(t);return this.logger("(checkTypeInLazyStore)",r),!!r&&!!Array.from(r).filter((function(t){return t[2]!==e})).length},e.prototype.addToNormalStore=function(t,e,r,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",t,e,"try to add to normal store"),this.checkTypeInStore(t,e)){this.logger("(addToNormalStore)",e+" can add to "+t+" normal store");var o=this.hashFnToKey(r),a=[this.normalStore,t,o,r,n,e],i=Reflect.apply(this.addToStore,this,a),u=i[0],c=i[1];return this.normalStore=u,c}return!1},e.prototype.addToLazyStore=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1);var o=[this.lazyStore,t,this.toArray(e),r];n&&o.push(n);var a=Reflect.apply(this.addToStore,this,o),i=a[0],u=a[1];return this.lazyStore=i,u},e.prototype.toArray=function(t){return Array.isArray(t)?t:[t]},r.normalStore.set=function(t){_a.set(this,t)},r.normalStore.get=function(){return _a.get(this)},r.lazyStore.set=function(t){ma.set(this,t)},r.lazyStore.get=function(){return ma.get(this)},e.prototype.hashFnToKey=function(t){return t.toString().split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)+""},Object.defineProperties(e.prototype,r),e}(wa))),Sa=(ba("process-contract"),function(t){var e=Dr(t);if(!1!==e)return e;throw new l("Missing property in contract!")});function ka(t){var e,r,n=t.contract;return t.enableAuth?function(t,e){void 0===e&&(e=!1);var r=Dr(t);if(!1===r){if(e)return t;throw new Y("socket not found in contract!")}var n,o={},a=0;for(var i in r){var u=r[i],c=u.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=u,n||u.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}(n):((r={})[x]=((e={})[b]=Sa(n),e),r[C]=b,r)}var Ea=function(t,e){return"ws"===e?t.replace("http://","ws://"):t},$a=function(){try{return[window.location.protocol,window.location.host].join("//")}catch(t){throw new JsonqlValidationError(t)}},Aa=function(t,e){Gt(e).forEach((function(e){t.$off(Qt(e,N))}))},Ta=ba("respondHandler");function Pa(t,e,r){Kt(t,y)?(Ta("-- rejecter called --",t[y]),r(t[y])):Kt(t,g)?(Ta("-- resolver called --",t[g]),e(t[g])):(Ta("-- UNKNOWN_RESULT --",t),r({message:X,error:t}))}var Na=ba("action-call");function Ra(t,e,r,n,o){void 0===o&&(o=[]);var a=Qt(e,N),i=n?I:M;return Na("actionCall: "+a+" --\x3e "+r,o),t.$trigger(a,[r,Gt(o)]),new Promise((function(n,o){t.$on(Qt(e,r,i),(function(t){Na("got the first result",t),Pa(t,n,o)}))}))}var za=ba("setup-send"),xa=function(t,e,r,n,o,a){return Ir(t,"send",(function(t){var i=a?J:F;za("got payload for",t),va(Gt(t),o.params,!0).then((function(o){if(!o[y]||!o[y].length)return Ra(e,r,n,a,t);za("got ERROR_KEY",o[y]),e.$call(Qt(r,n,i),[new d(n,o[y])])})).catch((function(t){za("error after validateAsync",t),e.$call(Qt(r,n,i),[new d(n,t)])}))}),(function(){return function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];return va(t,o.params,!0).then((function(t){return Ra(e,r,n,a,t)})).catch(G)}}))};ba("setup-resolver");function Ca(t,e,r,n,o){return[Jr(t,Z,(function(t,o){if(ha(t)&&Xt(o))switch(t){case I:e.$on(Qt(r,n,ON_RESULT_PROP_NAME),(function(t){Pa(t,o,(function(t){e.$trigger(Qt(r,n,ON_ERROR_PROP_NAME),t)}))}));break;case U:e.$only(Qt(r,n,ON_MESSAGE_PROP_NAME),(function(t){Pa(t,o,(function(t){e.$trigger(Qt(r,n,ON_ERROR_PROP_NAME),t)}))}));break;case READY_PROP_NAME:e.$only(Qt(r,n,ON_ERROR_PROP_NAME),o);break;default:e.$trigger(Qt(r,n,ON_ERROR_PROP_NAME),new Y(n,"Unknown event name "+t+"!"))}})),e,r,n,o]}ba("setup-resolver");var qa=function(t,e,r,n,o,a){return[Jr(t,"myNamespace",r),e,r,n,o,a]},Ma=function(t,e,r,n,o,a){return[Ir(t,M,(function(t){Xt(t)&&e.$on(Qt(r,n,M),(function(o){Pa(o,t,(function(t){e.$trigger(Qt(r,n,F),t)}))}))})),e,r,n,o,a]},Fa=function(t,e,r,n,o,a){return[Ir(t,q,(function(t){if(Xt(t)){e.$only(Qt(r,n,q),(function(o){Pa(o,t,(function(t){e.$trigger(Qt(r,n,F),t)}))}))}})),e,r,n,o,a]},La=function(t,e,r,n,o,a){return[Ir(t,F,(function(t){Xt(t)&&e.$only(Qt(r,n,F),t)})),e,r,n,o,a]};function Wa(t,e,r,n,o,a){var i=[qa];a?i.push(Ca):i.push(Ma,Fa,La),i.push(xa);var u=Reflect.apply(Zt,null,i);return Reflect.apply(u,null,[n,o,t,e,r,a])}ba("resolver-methods");function Ua(t,e,r,n,o){return function(){for(var a=[],i=arguments.length;i--;)a[i]=arguments[i];return va(a,n.params,!0).then((function(n){return Ra(t,e,r,o,n)})).catch(G)}}var Ia=function(t,e,r){return[Jr(t,r.loginHandlerName,(function(t){if(t&&ha(t))return e.$trigger(T,[t]);throw new d(r.loginHandlerName,"Unexpected token "+t)})),e,r]},Ja=function(t,e,r){return Jr(t,r.logoutHandlerName,(function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];e.$trigger(P,t)}))};var Da,Ba;ba("generator");function Va(t,e,r){var n={},o=e.nspSet,a=t.useCallbackStyle;for(var i in o){var u=o[i];for(var c in u){var f=u[c];n=Jr(n,c,Wa(i,c,f,Ua(r,i,c,f,a),r,a))}}return n.devHelpers={getNsp:function(){return Object.keys(o)},getVer:function(){return t.version||"NOT SET"}},Promise.resolve(n)}function Ya(t,e,r){var n=e.nspSet,o=[Va];return t.useCallbackStyle?o.push((function(t){return function(t,e,r,n){return Jr(t,Z,(function(t,n){if(ha(t)&&Xt(n))switch(t){case J:for(var o in r)e.$on(Qt(o,J),n);break;case B:e.$only(B,n);break;case D:e.$on(D,n);break;default:e.$trigger(J,new Y(Z,"Unknown event name "+t+"!"))}}))}(t,r,n)})):o.push((function(t){return function(t,e,r){return Ir(t,F,(function(t){if(Xt(t))for(var n in r)e.$on(Qt(n,F),t)}))}(t,r,n)}),(function(t){return function(t,e,r){return Ir(t,L,(function(t){Xt(t)&&e.$on(L,t)}))}(t,r)}),(function(e){return function(t,e,r){return r.enableAuth?Ir(t,W,(function(t){Xt(t)&&e.$only(W,t)})):t}(e,r,t)})),o.push((function(e){return function(t,e,r){return r.enableAuth?Zt(Ia,Ja)(t,e,r):t}(e,r,t)})),Reflect.apply(Ur,null,o)(t,e,r)}var Ha=["roundtip","handshake"],Ga={useCallbackStyle:da(!1,["boolean"]),loginHandlerName:da("login",["string"]),logoutHandlerName:da("logout",["string"]),loginMethod:da("handshake",["string"],(Da={},Da[S]=Ha,Da)),useJwt:da(!0,["boolean","string"]),hostname:da(!1,["string"]),namespace:da(b,["string"]),wsOptions:da({},["object"]),contract:da({},["object"],(Ba={},Ba[E]=Gr,Ba)),enableAuth:da(!1,["boolean"]),token:da(!1,["string"])},Ka=ba("check-options"),Qa={eventEmitter:null,nspClient:null,nspAuthClient:null,wssPath:""};var Xa={version:"version: 0.8.2 module: umd",serverType:"ws"},Za=null;"undefined"!=typeof WebSocket?Za=WebSocket:"undefined"!=typeof MozWebSocket?Za=MozWebSocket:void 0!==u?Za=u.WebSocket||u.MozWebSocket:"undefined"!=typeof window?Za=window.WebSocket||window.MozWebSocket:"undefined"!=typeof self&&(Za=self.WebSocket||self.MozWebSocket);var ti=Za,ei=function(t){var e=t.toLowerCase();return e.indexOf("http")>-1?e.indexOf("https")>-1?e.replace("https","wss"):e.replace("http","ws"):e};function ri(t,e){return void 0===e&&(e=!1),!1===e?function(e){return new t(ei(e))}:function(e,r){var n=ei(e),o=r&&"string"==typeof r?n+"?"+V+"="+r:n;try{return new t(o)}catch(t){return console.error("WebSocket Connection Error",t),!1}}}function ni(t,e){var r=e.hostname,n=e.wssPath,o=e.wsOptions;return(0,e.nspClient)(t?[r,t].join("/"):n,o)}var oi=ba("client-event-handler"),ai=function(t,e,r){var n=r.useCallbackStyle,o=n?J:F,a=n?I:M;e.$only(Qt(t,Q),(function(r,n){oi("noLoginHandler hijack the ws call",t,r,n);var i={message:"NOT LOGIN"};e.$call(Qt(t,r,o),[i]),e.$call(Qt(t,r,a),[{error:i}])}))},ii=function(t){return t.length>1&&t[0]};function ui(t,e,r,n,o,a){var i=ii(o),u=!1;o.forEach((function(o){if(u=i===o,a[o]){oi("call bindWsHandler",u,o);var c=[o,a[o],r,u,t];if(t.serverType===K){var f=e.nspSet;c.push(f[o])}Reflect.apply(n,null,c)}else ai(o,r,t)})),r.$on(P,(function(){oi("LOGOUT_EVENT_NAME"),function(t,e,r,n){void 0===n&&(n={});var o=n.useCallbackStyle?J:F;e.forEach((function(e){t.$call(Qt(e,o),[{message:r,namespace:e}])}))}(r,o,P),o.forEach((function(e){Aa(r,e),a[e]=!1,ai(e,r,t)}))}))}var ci=["__reply__","__event__","__data__"],fi=function(t){var e,r=t.data;if(!1!==(e=function(t){var e=t.data;return!!e&&(ci.filter((function(t){return Kt(e,t)})).length===ci.length&&e)}(ha(r)?JSON.parse(r):r)))return{resolverName:e.__event__,data:e.__data__,type:e.__reply__};throw new Y("payload can not be decoded",t)},si=ba("ws-main-handler"),li=function(t,e,r,n,o){var a=[e];r&&(si("a global error on "+e),a.push(r)),a.push(o);var i=Reflect.apply(Qt,null,a),u=n.data||n;t.$trigger(i,[u])};function pi(t,e,r,n,o){var a=o.useCallbackStyle,i=a?D:L,u=a?B:W,c=a?U:q,f=a?I:M,s=a?J:F;e.onopen=function(){si("ws.onopen listened"),r.$call(i,t),n&&(console.log("isPrivate and fire the "+u),r.$call(u,t)),r.$only(Qt(t,N),(function(t,r){si("calling server",t,r),e.send(Hr(t,r))}))},e.onmessage=function(e){try{var n=fi(e),o=n.resolverName,a=n.type;switch(si("Hear from server",a,n),a){case N:var i=Qt(t,o,c),u=r.$trigger(i,[n]);si("EMIT_REPLY_TYPE",i,u);break;case R:var l=Qt(t,o,f);r.$trigger(l,[n]);si("ACKNOWLEDGE_REPLY_TYPE",l,n);break;case z:si("ERROR_TYPE"),li(r,t,o,n,s);break;default:si("Unhandled event!",n),li(r,t,o,n,s)}}catch(e){console.error("ws.onmessage error",e),li(r,t,!1,e,s)}},e.onclose=function(){si("ws.onclose callback")},r.$on(P,(function(){try{si("terminate ws connection"),e.terminate()}catch(t){console.error("ws.terminate error",t)}}))}ba("ws-create-client");var hi=function(t,e,r){var n,o=e.nspSet,a=e.publicNamespace,i=!1,u=[],c={};if(t.enableAuth&&t.useJwt)i=!0,c=(u=function(t,e){var r=[];for(var n in t)n===e?r[1]=n:r[0]=n;return r}(o,a)).map((function(e,n){var o,a,i;return 0===n?r?(t.token=r,(o={})[e]=function(t,e){var r=e.hostname,n=e.wssPath,o=e.token,a=e.wsOptions,i=e.nspAuthClient,u=t?[r,t].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(u,o,a)}(e,t),o):((a={})[e]=!1,a):((i={})[e]=ni(e,t),i)})).reduce((function(t,e){return Object.assign(t,e)}),{});else{var f=(n=o,Object.keys(n)[0]);u.push(f),c[f]=ni(!1,t)}return{nsps:c,namespaces:u,login:i}};return function(t,e){return void 0===e&&(e={}),function(r){var n=r.eventEmitter;return function(t,e){return ga(t,Ga,Object.assign(Qa,e)).then((function(t){return t.hostname||(t.hostname=$a()),t.wssPath=Ea([t.hostname,t.namespace].join("/"),t.serverType),Ka("CONFIGURATION OPTIONS",t),t}))}(r,e).then((function(t){return{opts:t,nspMap:ka(t),ee:n||new Oa}})).then((function(e){var r=e.opts,n=e.nspMap,o=e.ee;return t(r,n,o)})).then((function(t){return Ya(t.opts,t.nspMap,t.ee)})).catch((function(t){console.error("jsonql-ws-client init error",t)}))}}(function(t){var e=ri(t),r=ri(t,!0);return function(t,n,o){return t.nspClient=e,t.nspAuthClient=r,function(t,e,r){var n=[t,e,r,pi],o=t.token,a=hi(t,e,o),i=a.nsps,u=a.namespaces,c=a.login;return Reflect.apply(ui,null,n.concat([u,i])),c&&r.$only(T,(function(o){Aa(r,u);var a=hi(t,e,o);Reflect.apply(ui,null,n.concat([a.namespaces,a.nsps]))})),{opts:t,nspMap:e,ee:r}}(t,n,o)}}(ti),Xa)})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("fs"),require("path")):"function"==typeof define&&define.amd?define(["fs","path"],e):(t=t||self).jsonqlWsClient=e(t.fs,t.path)}(this,(function(t,e){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var r=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 406},r.name.get=function(){return"Jsonql406Error"},Object.defineProperties(e,r),e}(Error),n=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"Jsonql500Error"},Object.defineProperties(e,r),e}(Error),o=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(e,r),e}(Error),a=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(e,r),e}(Error),i=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(e,r),e}(Error),u=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 404},r.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(e,r),e}(Error),c=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(e,r),e}(Error),f=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(e,r),e}(Error),s=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(e,r),e}(Error),l=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(e,r),e}(Error),p="data",h="error",v="jsonql",d="query",g="mutation",y="socket",b="type",_="optional",m="enumv",w="args",j="checker",O="alias",S="No message",k="__login__",E="__logout__",$="emit",A="acknowledge",T="error",P="nspSet",N="publicNamespace",R="onMessage",z="onResult",x="onError",C="onReady",q="onLogin",M="message",F="result",L="error",W="ready",U="login",I="token",J=function(t){function e(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];t.apply(this,r),this.message=r[0],this.detail=r[1],this.className=e.name,t.captureStackTrace&&t.captureStackTrace(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0},statusCode:{configurable:!0}};return r.name.get=function(){return"JsonqlError"},r.statusCode.get=function(){return-1},Object.defineProperties(e,r),e}(Error),D=function(t){function e(r,n){t.call(this,n),this.statusCode=r,this.className=e.name}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlServerError"},Object.defineProperties(e,r),e}(Error);function V(t){if(Array.isArray(t))throw new l("",t);var e=t.message||S,p=t.detail||t;switch(!0){case t instanceof r:throw new r(e,p);case t instanceof n:throw new n(e,p);case t instanceof o:throw new o(e,p);case t instanceof a:throw new a(e,p);case t instanceof i:throw new i(e,p);case t instanceof u:throw new u(e,p);case t instanceof c:throw new c(e,p);case t instanceof f:throw new f(e,p);case t instanceof s:throw new s(e,p);case t instanceof l:throw new l(e,p);case t instanceof D:throw new D(e,p);default:throw new J(e,p)}}var B="socket.io",Y=$,H="UKNNOWN RESULT!",G="on",K=Array.isArray,Q="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},X="object"==typeof Q&&Q&&Q.Object===Object&&Q,Z="object"==typeof self&&self&&self.Object===Object&&self,tt=X||Z||Function("return this")(),et=tt.Symbol,rt=Object.prototype,nt=rt.hasOwnProperty,ot=rt.toString,at=et?et.toStringTag:void 0;var it=Object.prototype.toString;var ut="[object Null]",ct="[object Undefined]",ft=et?et.toStringTag:void 0;function st(t){return null==t?void 0===t?ct:ut:ft&&ft in Object(t)?function(t){var e=nt.call(t,at),r=t[at];try{t[at]=void 0;var n=!0}catch(t){}var o=ot.call(t);return n&&(e?t[at]=r:delete t[at]),o}(t):function(t){return it.call(t)}(t)}function lt(t,e){return function(r){return t(e(r))}}var pt=lt(Object.getPrototypeOf,Object);function ht(t){return null!=t&&"object"==typeof t}var vt="[object Object]",dt=Function.prototype,gt=Object.prototype,yt=dt.toString,bt=gt.hasOwnProperty,_t=yt.call(Object);function mt(t){if(!ht(t)||st(t)!=vt)return!1;var e=pt(t);if(null===e)return!0;var r=bt.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&yt.call(r)==_t}function wt(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r=n?t:function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(o);++n-1;);return r}(n,o),function(t,e){for(var r=t.length;r--&&Pt(e,t[r],0)>-1;);return r}(n,o)+1).join("")}var Bt=function(t){return K(t)?t:[t]},Yt=function(t,e){try{var r=Object.keys(t);return n=e,!!r.filter((function(t){return t===n})).length}catch(t){return!1}var n},Ht=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.join("_")},Gt=function(t){if("function"==typeof t)return!0;console.error("Expect to be Function type!")},Kt=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return e.reduce((function(t,e){return Reflect.apply(e,null,Bt(t))}),Reflect.apply(t,null,r))}};function Qt(t,e){return t===e||t!=t&&e!=e}function Xt(t,e){for(var r=t.length;r--;)if(Qt(t[r][0],e))return r;return-1}var Zt=Array.prototype.splice;function te(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e-1},te.prototype.set=function(t,e){var r=this.__data__,n=Xt(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var re="[object AsyncFunction]",ne="[object Function]",oe="[object GeneratorFunction]",ae="[object Proxy]";function ie(t){if(!ee(t))return!1;var e=st(t);return e==ne||e==oe||e==re||e==ae}var ue,ce=tt["__core-js_shared__"],fe=(ue=/[^.]+$/.exec(ce&&ce.keys&&ce.keys.IE_PROTO||""))?"Symbol(src)_1."+ue:"";var se=Function.prototype.toString;function le(t){if(null!=t){try{return se.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var pe=/^\[object .+?Constructor\]$/,he=Function.prototype,ve=Object.prototype,de=he.toString,ge=ve.hasOwnProperty,ye=RegExp("^"+de.call(ge).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function be(t){return!(!ee(t)||(e=t,fe&&fe in e))&&(ie(t)?ye:pe).test(le(t));var e}function _e(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return be(r)?r:void 0}var me=_e(tt,"Map"),we=_e(Object,"create");var je="__lodash_hash_undefined__",Oe=Object.prototype.hasOwnProperty;var Se=Object.prototype.hasOwnProperty;var ke="__lodash_hash_undefined__";function Ee(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=Xe}function tr(t){return null!=t&&Ze(t.length)&&!ie(t)}var er="object"==typeof exports&&exports&&!exports.nodeType&&exports,rr=er&&"object"==typeof module&&module&&!module.nodeType&&module,nr=rr&&rr.exports===er?tt.Buffer:void 0,or=(nr?nr.isBuffer:void 0)||function(){return!1},ar={};ar["[object Float32Array]"]=ar["[object Float64Array]"]=ar["[object Int8Array]"]=ar["[object Int16Array]"]=ar["[object Int32Array]"]=ar["[object Uint8Array]"]=ar["[object Uint8ClampedArray]"]=ar["[object Uint16Array]"]=ar["[object Uint32Array]"]=!0,ar["[object Arguments]"]=ar["[object Array]"]=ar["[object ArrayBuffer]"]=ar["[object Boolean]"]=ar["[object DataView]"]=ar["[object Date]"]=ar["[object Error]"]=ar["[object Function]"]=ar["[object Map]"]=ar["[object Number]"]=ar["[object Object]"]=ar["[object RegExp]"]=ar["[object Set]"]=ar["[object String]"]=ar["[object WeakMap]"]=!1;var ir,ur="object"==typeof exports&&exports&&!exports.nodeType&&exports,cr=ur&&"object"==typeof module&&module&&!module.nodeType&&module,fr=cr&&cr.exports===ur&&X.process,sr=function(){try{var t=cr&&cr.require&&cr.require("util").types;return t||fr&&fr.binding&&fr.binding("util")}catch(t){}}(),lr=sr&&sr.isTypedArray,pr=lr?(ir=lr,function(t){return ir(t)}):function(t){return ht(t)&&Ze(t.length)&&!!ar[st(t)]};function hr(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]}var vr=Object.prototype.hasOwnProperty;function dr(t,e,r){var n=t[e];vr.call(t,e)&&Qt(n,r)&&(void 0!==r||e in t)||Re(t,e,r)}var gr=9007199254740991,yr=/^(?:0|[1-9]\d*)$/;function br(t,e){var r=typeof t;return!!(e=null==e?gr:e)&&("number"==r||"symbol"!=r&&yr.test(t))&&t>-1&&t%1==0&&t0){if(++e>=Nr)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(Pr);function Cr(t,e){return xr(function(t,e,r){return e=Tr(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,a=Tr(n.length-e,0),i=Array(a);++o1?e[n-1]:void 0,a=n>2?e[2]:void 0;for(o=qr.length>3&&"function"==typeof o?(n--,o):void 0,a&&function(t,e,r){if(!ee(r))return!1;var n=typeof e;return!!("number"==n?tr(r)&&br(e,r.length):"string"==n&&e in r)&&Qt(r[e],t)}(e[0],e[1],a)&&(o=n<3?void 0:o,n=1),t=Object(t);++r0;)e[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return e.reduce((function(t,e){return t.then((function(t){return e(t)}))}),Reflect.apply(t,null,r))}}function Lr(t,e,r,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(t,e)&&Object.defineProperty(t,e,{set:r,get:null===n?function(){return null}:n}),t}function Wr(t,e,r,n){void 0===n&&(n=!1);var o=function(t,e){var r=Object.getOwnPropertyDescriptor(t,e);return void 0!==r&&r.value?r.value:r}(t,e);return!1===n&&void 0!==o?t:(Object.defineProperty(t,e,{value:r,writable:n}),t)}function Ur(t){return!!Yt(t,"socket")&&t.socket}var Ir="[object String]";function Jr(t){return"string"==typeof t||!K(t)&&ht(t)&&st(t)==Ir}var Dr=function(t){var e;return(e={}).args=t,e};function Vr(t,e,r){return void 0===e&&(e=[]),void 0===r&&(r=!1),JSON.stringify(function(t,e,r){var n;if(void 0===e&&(e=[]),void 0===r&&(r=!1),Jr(t)&&K(e)){var o=Dr(e);return!0===r?o:((n={})[t]=o,n)}throw new l("[createQuery] expect resolverName to be string and args to be array!",{resolverName:t,args:e})}(t,e,r))}var Br=function(t){return mt(t)&&(Yt(t,d)||Yt(t,g)||Yt(t,y))};function Yr(t){return void 0===t}var Hr="[object Boolean]";var Gr="[object Number]";function Kr(t){return function(t){return"number"==typeof t||ht(t)&&st(t)==Gr}(t)&&t!=+t}var Qr=lt(Object.keys,Object),Xr=Object.prototype.hasOwnProperty;function Zr(t){return tr(t)?mr(t):function(t){if(!Ve(t))return Qr(t);var e=[];for(var r in Object(t))Xr.call(t,r)&&"constructor"!=r&&e.push(r);return e}(t)}function tn(t,e){return t&&Ce(t,e,Zr)}var en="__lodash_hash_undefined__";function rn(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new Ae;++eu))return!1;var f=a.get(t);if(f&&a.get(e))return f==e;var s=-1,l=!0,p=r&an?new rn:void 0;for(a.set(t,e),a.set(e,t);++s0))},Do=function(t){if(t.indexOf("array.<")>-1&&t.indexOf(">")>-1){var e=t.replace("array.<","").replace(">","");return e.indexOf("|")?e.split("|"):[e]}return!1},Vo=function(t,e){var r=t.arg;return e.length>1?!r.filter((function(t){return!(e.length>e.filter((function(e){return!Io(e)(t)})).length)})).length:e.length>e.filter((function(t){return!Jo(r,t)})).length},Bo=function(t,e){if(void 0===e&&(e=null),mt(t)){if(!e)return!0;if(Jo(e))return!e.filter((function(e){var r=t[e.name];return!(e.type.length>e.type.filter((function(t){var e;return!!Yr(r)||(!1!==(e=Do(t))?!Vo({arg:r},e):!Io(t)(r))})).length)})).length}return!1},Yo=function(t){var e=t.arg,r=t.param,n=[e];return Array.isArray(r.keys)&&r.keys.length&&n.push(r.keys),Bo.apply(null,n)};function Ho(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];try{window&&window.console&&Reflect.apply(console.log,console,t)}catch(t){}}var Go=function(t,e){var r;switch(!0){case"object"===t:return!Yo(e);case"array"===t:return!Jo(e.arg);case!1!==(r=Do(t)):return!Vo(e,r);default:return!Io(t)(e.arg)}},Ko=function(t,e){return Yr(t)?!0!==e.optional||Yr(e.defaultvalue)?null:e.defaultvalue:t},Qo=function(t,e,r){var n;void 0===r&&(r=!1);var o=function(t,e){if(!Jo(e))throw new J("params is not an array! Did something gone wrong when you generate the contract.json?");if(0===e.length)return[];if(!Jo(t))throw new J("args is not an array! You might want to do: ES6 Array.from(arguments) or ES5 Array.prototype.slice.call(arguments)");switch(!0){case t.length==e.length:return Ho(1),t.map((function(t,r){return{arg:t,index:r,param:e[r]}}));case!0===e[0].variable:Ho(2);var r=e[0].type;return t.map((function(t,n){return{arg:t,index:n,param:e[n]||{type:r,name:"_"}}}));case t.lengthe.length:Ho(4);var n=e.length,o=["any"];return t.map((function(t,r){var a=r>=n||!!e[r].optional,i=e[r]||{type:o,name:"_"+r};return{arg:a?Ko(t,i):t,index:r,param:i,optional:a}}));default:throw Ho(5),new J("Could not understand your arguments and parameter structure!",{args:t,params:e})}}(t,e),a=o.filter((function(t){return!0===t.optional||!0===t.param.optional?function(t){var e=t.arg,r=t.param;return!!Po(e)&&!(r.type.length>r.type.filter((function(e){return Go(e,t)})).length)}(t):!(t.param.type.length>t.param.type.filter((function(e){return Go(e,t)})).length)}));return r?((n={})[h]=a,n[p]=o.map((function(t){return t.arg})),n):a},Xo=function(t,e){var r,n=Object.keys(t);return r=e,!!n.filter((function(t){return t===r})).length},Zo=function(t){return!Po(t)};function ta(t,e){var r=To(e,(function(t,e){return!t[Wo]}));return Qn(r,{})?t:function(t,e){var r={};return e=Oo(e),tn(t,(function(t,n,o){Re(r,e(t,n,o),t)})),r}(t,(function(t,e){return function(t,e,r){var n;return r(t,(function(t,r,o){if(e(t,r,o))return n=r,!1})),n}(r,Oo((function(t){return t.alias===e})),tn)||e}))}function ea(t,e){return So(e,(function(e,r){var n,o;return Yr(t[r])||!0===e[qo]&&Zo(t[r])?Mr({},e,((n={})[Uo]=!0,n)):((o={})[Fo]=t[r],o[Co]=e[Co],o[qo]=e[qo]||!1,o[Mo]=e[Mo]||!1,o[Lo]=e[Lo]||!1,o)}))}function ra(t,e){var r=function(t,e){var r=ta(t,e);return{pristineValues:So(To(e,(function(t,e){return Xo(r,e)})),(function(t){return t.args})),checkAgainstAppProps:To(e,(function(t,e){return!Xo(r,e)})),config:r}}(t,e),n=r.config,o=r.pristineValues;return[ea(n,r.checkAgainstAppProps),o]}var na=function(t){return Jo(t)?t:[t]};var oa=function(t,e){return!Jo(e)||function(t,e){return!!t.filter((function(t){return t===e})).length}(e,t)},aa=function(t,e){try{return!!ie(e)&&e.apply(null,[t])}catch(t){return!1}};function ia(t){return function(e,r){if(e[Uo])return e[Fo];var n=function(t,e){var r,n=[[t[Fo]],[(r={},r[Co]=na(t[Co]),r[qo]=t[qo],r)]];return Reflect.apply(e,null,n)}(e,t);if(n.length)throw Ho("runValidationAction",r,e),new f(r,n);if(!1!==e[Mo]&&!oa(e[Fo],e[Mo]))throw Ho(Mo,e[Mo]),new c(r);if(!1!==e[Lo]&&!aa(e[Fo],e[Lo]))throw Ho(Lo,e[Lo]),new s(r);return e[Fo]}}var ua=function(t,e){return Promise.resolve(ra(t,e))};function ca(t,e,r,n){return void 0===t&&(t={}),ua(t,e).then((function(t){return function(t,e){var r=t[0],n=t[1],o=So(r,ia(e));return Mr(o,n)}(t,n)})).then((function(t){return Mr({},t,r)}))}function fa(t,e,r,n,o,a){void 0===r&&(r=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===a&&(a=!1);var i={};return i[w]=t,i[b]=e,!0===r&&(i[_]=!0),Jo(n)&&(i[m]=n),ie(o)&&(i[j]=o),Jr(a)&&(i[O]=a),i}var sa=Ro,la=function(t,e,r){return void 0===r&&(r=!1),new Promise((function(n,o){var a=Qo(t,e,r);return r?a[h].length?o(a[h]):n(a[p]):a.length?o(a):n([])}))},pa=function(t,e,r){void 0===r&&(r={});var n=r[_],o=r[m],a=r[j],i=r[O];return fa.apply(null,[t,e,n,o,a,i])},ha=function(t){return function(e,r,n){return void 0===n&&(n={}),ca(e,r,n,t)}}(Qo),va="jsonql-ws-client",da=function(t){try{if(window.debug)return window.debug(va).extend(t)}catch(t){}try{if(Q.debug)return Q.debug(va).extend(t)}catch(t){}return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];console.info.apply(null,[va,t].concat(e))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",va+"*")}catch(t){}var ga=new WeakMap,ya=new WeakMap;var ba=function(){this.__suspend__=null,this.queueStore=new Set},_a={$suspend:{configurable:!0},$queues:{configurable:!0}};_a.$suspend.set=function(t){var e=this;if("boolean"!=typeof t)throw new Error("$suspend only accept Boolean value!");var r=this.__suspend__;this.__suspend__=t,this.logger("($suspend)","Change from "+r+" --\x3e "+t),!0===r&&!1===t&&setTimeout((function(){e.release()}),1)},ba.prototype.$queue=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",t),this.queueStore.add(t)),this.__suspend__},_a.$queues.get=function(){var t=this.queueStore.size;return this.logger("($queues)","size: "+t),t>0?Array.from(this.queueStore):[]},ba.prototype.release=function(){var t=this,e=this.queueStore.size;if(this.logger("(release)","Release was called "+e),e>0){var r=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",r),r.forEach((function(e){t.logger(e),Reflect.apply(t.$trigger,t,e)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(ba.prototype,_a);var ma=function(t){function e(){t.call(this,{logger:da("nb-event-service")})}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={name:{configurable:!0}};return r.name.get=function(){return"jsonql-ws-client"},Object.defineProperties(e.prototype,r),e}(function(t){function e(e){void 0===e&&(e={}),t.call(this,e)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={$done:{configurable:!0}};return e.prototype.logger=function(){},e.prototype.$on=function(t,e,r){var n=this;void 0===r&&(r=null);this.validate(t,e);var o=this.takeFromStore(t);if(!1===o)return this.logger("($on)",t+" callback is not in lazy store"),this.addToNormalStore(t,"on",e,r);this.logger("($on)",t+" found in lazy store");var a=0;return o.forEach((function(o){var i=o[0],u=o[1],c=o[2];if(c&&"on"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);n.logger("($on)","call run on "+t),n.run(e,i,r||u),a+=n.addToNormalStore(t,"on",e,r||u)})),a},e.prototype.$once=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=this.takeFromStore(t);this.normalStore;if(!1===n)return this.logger("($once)",t+" not in the lazy store"),this.addToNormalStore(t,"once",e,r);this.logger("($once)",n);var o=Array.from(n)[0],a=o[0],i=o[1],u=o[2];if(u&&"once"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);this.logger("($once)","call run for "+t),this.run(e,a,r||i),this.$off(t)},e.prototype.$only=function(t,e,r){var n=this;void 0===r&&(r=null),this.validate(t,e);var o=!1,a=this.takeFromStore(t);(this.normalStore.has(t)||(this.logger("($only)",t+" add to store"),o=this.addToNormalStore(t,"only",e,r)),!1!==a)&&(this.logger("($only)",t+" found data in lazy store to execute"),Array.from(a).forEach((function(o){var a=o[0],i=o[1],u=o[2];if(u&&"only"!==u)throw new Error("You are trying to register an event already been taken by other type: "+u);n.logger("($only)","call run for "+t),n.run(e,a,r||i)})));return o},e.prototype.$onlyOnce=function(t,e,r){void 0===r&&(r=null),this.validate(t,e);var n=!1,o=this.takeFromStore(t);if(this.normalStore.has(t)||(this.logger("($onlyOnce)",t+" add to store"),n=this.addToNormalStore(t,"onlyOnce",e,r)),!1!==o){this.logger("($onlyOnce)",o);var a=Array.from(o)[0],i=a[0],u=a[1],c=a[2];if(c&&"onlyOnce"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);this.logger("($onlyOnce)","call run for "+t),this.run(e,i,r||u),this.$off(t)}return n},e.prototype.$replace=function(t,e,r,n){if(void 0===r&&(r=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(t);var o=this["$"+n];return this.logger("($replace)",t,e),Reflect.apply(o,this,[t,e,r])}throw new Error(n+" is not supported!")},e.prototype.$trigger=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1),this.validateEvt(t);var o=0,a=this.normalStore;if(this.logger("($trigger)","normalStore",a),a.has(t)){var i=this.$queue(t,e,r,n);if(this.logger("($trigger)",t,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",t,"not executed. Exit now."),!1;for(var u=Array.from(a.get(t)),c=u.length,f=!1,s=0;s0;)n[o]=arguments[o+2];if(t.has(e)?(this.logger("(addToStore)",e+" existed"),r=t.get(e)):(this.logger("(addToStore)","create new Set for "+e),r=new Set),n.length>2)if(Array.isArray(n[0])){var a=n[2];this.checkTypeInLazyStore(e,a)||r.add(n)}else this.checkContentExist(n,r)||(this.logger("(addToStore)","insert new",n),r.add(n));else r.add(n);return t.set(e,r),[t,r.size]},e.prototype.checkContentExist=function(t,e){return!!Array.from(e).filter((function(e){return e[0]===t[0]})).length},e.prototype.checkTypeInStore=function(t,e){this.validateEvt(t,e);var r=this.$get(t,!0);return!1===r||!r.filter((function(t){var r=t[3];return e!==r})).length},e.prototype.checkTypeInLazyStore=function(t,e){this.validateEvt(t,e);var r=this.lazyStore.get(t);return this.logger("(checkTypeInLazyStore)",r),!!r&&!!Array.from(r).filter((function(t){return t[2]!==e})).length},e.prototype.addToNormalStore=function(t,e,r,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",t,e,"try to add to normal store"),this.checkTypeInStore(t,e)){this.logger("(addToNormalStore)",e+" can add to "+t+" normal store");var o=this.hashFnToKey(r),a=[this.normalStore,t,o,r,n,e],i=Reflect.apply(this.addToStore,this,a),u=i[0],c=i[1];return this.normalStore=u,c}return!1},e.prototype.addToLazyStore=function(t,e,r,n){void 0===e&&(e=[]),void 0===r&&(r=null),void 0===n&&(n=!1);var o=[this.lazyStore,t,this.toArray(e),r];n&&o.push(n);var a=Reflect.apply(this.addToStore,this,o),i=a[0],u=a[1];return this.lazyStore=i,u},e.prototype.toArray=function(t){return Array.isArray(t)?t:[t]},r.normalStore.set=function(t){ga.set(this,t)},r.normalStore.get=function(){return ga.get(this)},r.lazyStore.set=function(t){ya.set(this,t)},r.lazyStore.get=function(){return ya.get(this)},e.prototype.hashFnToKey=function(t){return t.toString().split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)+""},Object.defineProperties(e.prototype,r),e}(ba))),wa=(da("process-contract"),function(t){var e=Ur(t);if(!1!==e)return e;throw new u("Missing property in contract!")});function ja(t){var e,r,n=t.contract;return t.enableAuth?function(t,e){void 0===e&&(e=!1);var r=Ur(t);if(!1===r){if(e)return t;throw new J("socket not found in contract!")}var n,o={},a=0;for(var i in r){var u=r[i],c=u.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=u,n||u.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}(n):((r={})[P]=((e={})[v]=wa(n),e),r[N]=v,r)}var Oa=function(t,e){return"ws"===e?t.replace("http://","ws://"):t},Sa=function(){try{return[window.location.protocol,window.location.host].join("//")}catch(t){throw new JsonqlValidationError(t)}},ka=function(t,e){Bt(e).forEach((function(e){t.$off(Ht(e,$))}))},Ea=da("respondHandler");function $a(t,e,r){Yt(t,h)?(Ea("-- rejecter called --",t[h]),r(t[h])):Yt(t,p)?(Ea("-- resolver called --",t[p]),e(t[p])):(Ea("-- UNKNOWN_RESULT --",t),r({message:H,error:t}))}var Aa=da("action-call");function Ta(t,e,r,n,o){void 0===o&&(o=[]);var a=Ht(e,$),i=n?F:z;return Aa("actionCall: "+a+" --\x3e "+r,o),t.$trigger(a,[r,Bt(o)]),new Promise((function(n,o){t.$on(Ht(e,r,i),(function(t){Aa("got the first result",t),$a(t,n,o)}))}))}var Pa=da("setup-send"),Na=function(t,e,r,n,o,a){return Lr(t,"send",(function(t){var i=a?L:x;Pa("got payload for",t),la(Bt(t),o.params,!0).then((function(o){if(!o[h]||!o[h].length)return Ta(e,r,n,a,t);Pa("got ERROR_KEY",o[h]),e.$call(Ht(r,n,i),[new l(n,o[h])])})).catch((function(t){Pa("error after validateAsync",t),e.$call(Ht(r,n,i),[new l(n,t)])}))}),(function(){return function(){for(var t=[],i=arguments.length;i--;)t[i]=arguments[i];return la(t,o.params,!0).then((function(t){return Ta(e,r,n,a,t)})).catch(V)}}))};da("setup-resolver");function Ra(t,e,r,n,o){return[Wr(t,G,(function(t,o){if(sa(t)&&Gt(o))switch(t){case F:e.$on(Ht(r,n,ON_RESULT_PROP_NAME),(function(t){$a(t,o,(function(t){e.$trigger(Ht(r,n,ON_ERROR_PROP_NAME),t)}))}));break;case M:e.$only(Ht(r,n,ON_MESSAGE_PROP_NAME),(function(t){$a(t,o,(function(t){e.$trigger(Ht(r,n,ON_ERROR_PROP_NAME),t)}))}));break;case READY_PROP_NAME:e.$only(Ht(r,n,ON_ERROR_PROP_NAME),o);break;default:e.$trigger(Ht(r,n,ON_ERROR_PROP_NAME),new J(n,"Unknown event name "+t+"!"))}})),e,r,n,o]}da("setup-resolver");var za=function(t,e,r,n,o,a){return[Wr(t,"myNamespace",r),e,r,n,o,a]},xa=function(t,e,r,n,o,a){return[Lr(t,z,(function(t){Gt(t)&&e.$on(Ht(r,n,z),(function(o){$a(o,t,(function(t){e.$trigger(Ht(r,n,x),t)}))}))})),e,r,n,o,a]},Ca=function(t,e,r,n,o,a){return[Lr(t,R,(function(t){if(Gt(t)){e.$only(Ht(r,n,R),(function(o){$a(o,t,(function(t){e.$trigger(Ht(r,n,x),t)}))}))}})),e,r,n,o,a]},qa=function(t,e,r,n,o,a){return[Lr(t,x,(function(t){Gt(t)&&e.$only(Ht(r,n,x),t)})),e,r,n,o,a]};function Ma(t,e,r,n,o,a){var i=[za];a?i.push(Ra):i.push(xa,Ca,qa),i.push(Na);var u=Reflect.apply(Kt,null,i);return Reflect.apply(u,null,[n,o,t,e,r,a])}da("resolver-methods");function Fa(t,e,r,n,o){return function(){for(var a=[],i=arguments.length;i--;)a[i]=arguments[i];return la(a,n.params,!0).then((function(n){return Ta(t,e,r,o,n)})).catch(V)}}var La=function(t,e,r){return[Wr(t,r.loginHandlerName,(function(t){if(t&&sa(t))return e.$trigger(k,[t]);throw new l(r.loginHandlerName,"Unexpected token "+t)})),e,r]},Wa=function(t,e,r){return Wr(t,r.logoutHandlerName,(function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];e.$trigger(E,t)}))};var Ua,Ia;da("generator");function Ja(t,e,r){var n={},o=e.nspSet,a=t.useCallbackStyle;for(var i in o){var u=o[i];for(var c in u){var f=u[c];n=Wr(n,c,Ma(i,c,f,Fa(r,i,c,f,a),r,a))}}return n.devHelpers={getNsp:function(){return Object.keys(o)},getVer:function(){return t.version||"NOT SET"}},Promise.resolve(n)}function Da(t,e,r){var n=e.nspSet,o=[Ja];return t.useCallbackStyle?o.push((function(t){return function(t,e,r,n){return Wr(t,G,(function(t,n){if(sa(t)&&Gt(n))switch(t){case L:for(var o in r)e.$on(Ht(o,L),n);break;case U:e.$only(U,n);break;case W:e.$on(W,n);break;default:e.$trigger(L,new J(G,"Unknown event name "+t+"!"))}}))}(t,r,n)})):o.push((function(t){return function(t,e,r){return Lr(t,x,(function(t){if(Gt(t))for(var n in r)e.$on(Ht(n,x),t)}))}(t,r,n)}),(function(t){return function(t,e,r){return Lr(t,C,(function(t){Gt(t)&&e.$on(C,t)}))}(t,r)}),(function(e){return function(t,e,r){return r.enableAuth?Lr(t,q,(function(t){Gt(t)&&e.$only(q,t)})):t}(e,r,t)})),o.push((function(e){return function(t,e,r){return r.enableAuth?Kt(La,Wa)(t,e,r):t}(e,r,t)})),Reflect.apply(Fr,null,o)(t,e,r)}var Va=["roundtip","handshake"],Ba={useCallbackStyle:pa(!1,["boolean"]),loginHandlerName:pa("login",["string"]),logoutHandlerName:pa("logout",["string"]),loginMethod:pa("handshake",["string"],(Ua={},Ua[m]=Va,Ua)),useJwt:pa(!0,["boolean","string"]),hostname:pa(!1,["string"]),namespace:pa(v,["string"]),wsOptions:pa({},["object"]),contract:pa({},["object"],(Ia={},Ia[j]=Br,Ia)),enableAuth:pa(!1,["boolean"]),token:pa(!1,["string"])},Ya=da("check-options"),Ha={eventEmitter:null,nspClient:null,nspAuthClient:null,wssPath:""};var Ga={version:"version: 0.8.3 module: umd",serverType:"ws"},Ka=null;"undefined"!=typeof WebSocket?Ka=WebSocket:"undefined"!=typeof MozWebSocket?Ka=MozWebSocket:void 0!==Q?Ka=Q.WebSocket||Q.MozWebSocket:"undefined"!=typeof window?Ka=window.WebSocket||window.MozWebSocket:"undefined"!=typeof self&&(Ka=self.WebSocket||self.MozWebSocket);var Qa=Ka,Xa=function(t){var e=t.toLowerCase();return e.indexOf("http")>-1?e.indexOf("https")>-1?e.replace("https","wss"):e.replace("http","ws"):e};function Za(t,e){return void 0===e&&(e=!1),!1===e?function(e){return new t(Xa(e))}:function(e,r){var n=Xa(e),o=r&&"string"==typeof r?n+"?"+I+"="+r:n;try{return new t(o)}catch(t){return console.error("WebSocket Connection Error",t),!1}}}function ti(t,e){var r=e.hostname,n=e.wssPath,o=e.wsOptions;return(0,e.nspClient)(t?[r,t].join("/"):n,o)}var ei=da("client-event-handler"),ri=function(t,e,r){var n=r.useCallbackStyle,o=n?L:x,a=n?F:z;e.$only(Ht(t,Y),(function(r,n){ei("noLoginHandler hijack the ws call",t,r,n);var i={message:"NOT LOGIN"};e.$call(Ht(t,r,o),[i]),e.$call(Ht(t,r,a),[{error:i}])}))},ni=function(t){return t.length>1&&t[0]};function oi(t,e,r,n,o,a){var i=ni(o),u=!1;o.forEach((function(o){if(u=i===o,a[o]){ei("call bindWsHandler",u,o);var c=[o,a[o],r,u,t];if(t.serverType===B){var f=e.nspSet;c.push(f[o])}Reflect.apply(n,null,c)}else ri(o,r,t)})),r.$on(E,(function(){ei("LOGOUT_EVENT_NAME"),function(t,e,r,n){void 0===n&&(n={});var o=n.useCallbackStyle?L:x;e.forEach((function(e){t.$call(Ht(e,o),[{message:r,namespace:e}])}))}(r,o,E),o.forEach((function(e){ka(r,e),a[e]=!1,ri(e,r,t)}))}))}var ai=["__reply__","__event__","__data__"],ii=function(t){var e,r=t.data;if(!1!==(e=function(t){var e=t.data;return!!e&&(ai.filter((function(t){return Yt(e,t)})).length===ai.length&&e)}(sa(r)?JSON.parse(r):r)))return{resolverName:e.__event__,data:e.__data__,type:e.__reply__};throw new J("payload can not be decoded",t)},ui=da("ws-main-handler"),ci=function(t,e,r,n,o){var a=[e];r&&(ui("a global error on "+e),a.push(r)),a.push(o);var i=Reflect.apply(Ht,null,a),u=n.data||n;t.$trigger(i,[u])};function fi(t,e,r,n,o){var a=o.useCallbackStyle,i=a?W:C,u=a?U:q,c=a?M:R,f=a?F:z,s=a?L:x;e.onopen=function(){ui("ws.onopen listened"),r.$call(i,t),n&&(console.log("isPrivate and fire the "+u),r.$call(u,t)),r.$only(Ht(t,$),(function(t,r){ui("calling server",t,r),e.send(Vr(t,r))}))},e.onmessage=function(e){try{var n=ii(e),o=n.resolverName,a=n.type;switch(ui("Hear from server",a,n),a){case $:var i=Ht(t,o,c),u=r.$trigger(i,[n]);ui("EMIT_REPLY_TYPE",i,u);break;case A:var l=Ht(t,o,f);r.$trigger(l,[n]);ui("ACKNOWLEDGE_REPLY_TYPE",l,n);break;case T:ui("ERROR_TYPE"),ci(r,t,o,n,s);break;default:ui("Unhandled event!",n),ci(r,t,o,n,s)}}catch(e){console.error("ws.onmessage error",e),ci(r,t,!1,e,s)}},e.onclose=function(){ui("ws.onclose callback")},r.$on(E,(function(){try{ui("terminate ws connection"),e.terminate()}catch(t){console.error("ws.terminate error",t)}}))}var si=da("ws-create-client"),li=function(t,e,r){var n,o=e.nspSet,a=e.publicNamespace,i=!1,u=[],c={};if(t.enableAuth)i=!0,c=(u=function(t,e){var r=[];for(var n in t)n===e?r[1]=n:r[0]=n;return r}(o,a)).map((function(e,n){var o,a,i;return 0===n?r?(t.token=r,(o={})[e]=function(t,e){var r=e.hostname,n=e.wssPath,o=e.token,a=e.wsOptions,i=e.nspAuthClient,u=t?[r,t].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(u,o,a)}(e,t),o):((a={})[e]=!1,a):((i={})[e]=ti(e,t),i)})).reduce((function(t,e){return Object.assign(t,e)}),{});else{var f=(n=o,Object.keys(n)[0]);u.push(f),c[f]=ti(!1,t)}return{nsps:c,namespaces:u,login:i}};return function(t,e){return void 0===e&&(e={}),function(r){var n=r.eventEmitter;return function(t,e){return ha(t,Ba,Object.assign(Ha,e)).then((function(t){return t.hostname||(t.hostname=Sa()),t.wssPath=Oa([t.hostname,t.namespace].join("/"),t.serverType),Ya("CONFIGURATION OPTIONS",t),t}))}(r,e).then((function(t){return{opts:t,nspMap:ja(t),ee:n||new ma}})).then((function(e){var r=e.opts,n=e.nspMap,o=e.ee;return t(r,n,o)})).then((function(t){return Da(t.opts,t.nspMap,t.ee)})).catch((function(t){console.error("jsonql-ws-client init error",t)}))}}(function(t){var e=Za(t),r=Za(t,!0);return function(t,n,o){return t.nspClient=e,t.nspAuthClient=r,function(t,e,r){var n=[t,e,r,fi],o=t.token,a=li(t,e,o),i=a.nsps,u=a.namespaces,c=a.login;return Reflect.apply(oi,null,n.concat([u,i])),c&&r.$only(k,(function(o){si("LOGIN_EVENT_NAME called with token:",o),ka(r,u);var a=li(t,e,o);Reflect.apply(oi,null,n.concat([a.namespaces,a.nsps]))})),{opts:t,nspMap:e,ee:r}}(t,n,o)}}(Qa),Ga)})); //# sourceMappingURL=jsonql-ws-client.umd.js.map diff --git a/packages/@jsonql/ws/node.js b/packages/@jsonql/ws/node.js index 9bf63d80e1f5a5c17c2e1a9d6b947642bd400606..25a496b9cdde94f619653a209ff24397b2a3df56 100644 --- a/packages/@jsonql/ws/node.js +++ b/packages/@jsonql/ws/node.js @@ -1,2 +1,2 @@ -"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}require("fs"),require("path");var WebSocket=_interopDefault(require("ws")),Jsonql406Error=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 406},t.name.get=function(){return"Jsonql406Error"},Object.defineProperties(r,t),r}(Error),Jsonql500Error=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 500},t.name.get=function(){return"Jsonql500Error"},Object.defineProperties(r,t),r}(Error),JsonqlAuthorisationError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 401},t.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(r,t),r}(Error),JsonqlContractAuthError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 401},t.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(r,t),r}(Error),JsonqlResolverAppError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 500},t.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(r,t),r}(Error),global$1="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},isBrowser=function(){try{if(window||document)return!0}catch(e){}return!1},isNode=function(){try{if(!isBrowser()&&global$1)return!0}catch(e){}return!1};function whereAmI(){return isBrowser()?"browser":isNode()?"node":"unknown"}var JsonqlBaseError=function(e){function r(){for(var r=[],t=arguments.length;t--;)r[t]=arguments[t];e.apply(this,r)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.where=function(){return whereAmI()},r}(Error),JsonqlResolverNotFoundError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={statusCode:{configurable:!0},name:{configurable:!0}};return t.statusCode.get=function(){return 404},t.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlEnumError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(r,t),r}(Error),JsonqlTypeError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(r,t),r}(Error),JsonqlCheckerError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,e.captureStackTrace&&e.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(r,t),r}(Error),JsonqlValidationError$1=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(r,t),r}(JsonqlBaseError),DATA_KEY="data",ERROR_KEY="error",JSONQL_PATH="jsonql",DEFAULT_TYPE="any",QUERY_NAME="query",MUTATION_NAME="mutation",SOCKET_NAME="socket",QUERY_ARG_NAME="args",KEY_WORD="continue",TYPE_KEY="type",OPTIONAL_KEY="optional",ENUM_KEY="enumv",ARGS_KEY="args",CHECKER_KEY="checker",ALIAS_KEY="alias",LOGIN_NAME="login",ISSUER_NAME=LOGIN_NAME,LOGOUT_NAME="logout",OR_SEPERATOR="|",STRING_TYPE="string",BOOLEAN_TYPE="boolean",ARRAY_TYPE="array",OBJECT_TYPE="object",NUMBER_TYPE="number",ARRAY_TYPE_LFT="array.<",ARRAY_TYPE_RGT=">",NO_ERROR_MSG="No message",NO_STATUS_CODE=-1,LOGIN_EVENT_NAME="__login__",LOGOUT_EVENT_NAME="__logout__",WS_REPLY_TYPE="__reply__",WS_EVT_NAME="__event__",WS_DATA_NAME="__data__",EMIT_REPLY_TYPE="emit",ACKNOWLEDGE_REPLY_TYPE="acknowledge",ERROR_TYPE="error",NSP_SET="nspSet",PUBLIC_NAMESPACE="publicNamespace",JS_WS_SOCKET_IO_NAME="socket.io",JS_WS_NAME="ws",ON_MESSAGE_PROP_NAME$1="onMessage",ON_RESULT_PROP_NAME$1="onResult",ON_ERROR_PROP_NAME$1="onError",ON_READY_PROP_NAME="onReady",ON_LOGIN_PROP_NAME="onLogin",SEND_MSG_PROP_NAME="send",MESSAGE_PROP_NAME="message",RESULT_PROP_NAME="result",ERROR_PROP_NAME="error",READY_PROP_NAME$1="ready",LOGIN_PROP_NAME="login",NOT_LOGIN_ERR_MSG="NOT LOGIN",TOKEN_PARAM_NAME="token",IO_ROUNDTRIP_LOGIN="roundtip",IO_HANDSHAKE_LOGIN="handshake",JsonqlError=function(e){function r(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];e.apply(this,t),this.message=t[0],this.detail=t[1],this.className=r.name,Error.captureStackTrace&&Error.captureStackTrace(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0},statusCode:{configurable:!0}};return t.name.get=function(){return"JsonqlError"},t.statusCode.get=function(){return NO_STATUS_CODE},Object.defineProperties(r,t),r}(JsonqlBaseError),JsonqlServerError=function(e){function r(t,n){e.call(this,n),this.statusCode=t,this.className=r.name}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={name:{configurable:!0}};return t.name.get=function(){return"JsonqlServerError"},Object.defineProperties(r,t),r}(Error);function finalCatch(e){if(Array.isArray(e))throw new JsonqlValidationError$1("",e);var r=e.message||NO_ERROR_MSG,t=e.detail||e;switch(!0){case e instanceof Jsonql406Error:throw new Jsonql406Error(r,t);case e instanceof Jsonql500Error:throw new Jsonql500Error(r,t);case e instanceof JsonqlAuthorisationError:throw new JsonqlAuthorisationError(r,t);case e instanceof JsonqlContractAuthError:throw new JsonqlContractAuthError(r,t);case e instanceof JsonqlResolverAppError:throw new JsonqlResolverAppError(r,t);case e instanceof JsonqlResolverNotFoundError:throw new JsonqlResolverNotFoundError(r,t);case e instanceof JsonqlEnumError:throw new JsonqlEnumError(r,t);case e instanceof JsonqlTypeError:throw new JsonqlTypeError(r,t);case e instanceof JsonqlCheckerError:throw new JsonqlCheckerError(r,t);case e instanceof JsonqlValidationError$1:throw new JsonqlValidationError$1(r,t);case e instanceof JsonqlServerError:throw new JsonqlServerError(r,t);default:throw new JsonqlError(r,t)}}var SOCKET_IO=JS_WS_SOCKET_IO_NAME,MISSING_PROP_ERR="Missing property in contract!",EMIT_EVT=EMIT_REPLY_TYPE,UNKNOWN_RESULT="UKNNOWN RESULT!",MY_NAMESPACE="myNamespace",CB_FN_NAME="on",isArray=Array.isArray,freeGlobal="object"==typeof global$1&&global$1&&global$1.Object===Object&&global$1,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function("return this")(),Symbol=root.Symbol,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=Symbol?Symbol.toStringTag:void 0;function getRawTag(e){var r=hasOwnProperty.call(e,symToStringTag),t=e[symToStringTag];try{e[symToStringTag]=void 0;var n=!0}catch(e){}var o=nativeObjectToString.call(e);return n&&(r?e[symToStringTag]=t:delete e[symToStringTag]),o}var objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=Symbol?Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?getRawTag(e):objectToString(e)}function overArg(e,r){return function(t){return e(r(t))}}var getPrototype=overArg(Object.getPrototypeOf,Object);function isObjectLike(e){return null!=e&&"object"==typeof e}var objectTag="[object Object]",funcProto=Function.prototype,objectProto$2=Object.prototype,funcToString=funcProto.toString,hasOwnProperty$1=objectProto$2.hasOwnProperty,objectCtorString=funcToString.call(Object);function isPlainObject(e){if(!isObjectLike(e)||baseGetTag(e)!=objectTag)return!1;var r=getPrototype(e);if(null===r)return!0;var t=hasOwnProperty$1.call(r,"constructor")&&r.constructor;return"function"==typeof t&&t instanceof t&&funcToString.call(t)==objectCtorString}function arrayMap(e,r){for(var t=-1,n=null==e?0:e.length,o=Array(n);++to?0:o+r),(t=t>o?o:t)<0&&(t+=o),o=r>t?0:t-r>>>0,r>>>=0;for(var a=Array(o);++n=n?e:baseSlice(e,r,t)}function baseFindIndex(e,r,t,n){for(var o=e.length,a=t+(n?1:-1);n?a--:++a-1;);return t}function charsStartIndex(e,r){for(var t=-1,n=e.length;++t-1;);return t}function asciiToArray(e){return e.split("")}var rsAstralRange="\\ud800-\\udfff",rsComboMarksRange="\\u0300-\\u036f",reComboHalfMarksRange="\\ufe20-\\ufe2f",rsComboSymbolsRange="\\u20d0-\\u20ff",rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsVarRange="\\ufe0e\\ufe0f",rsZWJ="\\u200d",reHasUnicode=RegExp("["+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+"]");function hasUnicode(e){return reHasUnicode.test(e)}var rsAstralRange$1="\\ud800-\\udfff",rsComboMarksRange$1="\\u0300-\\u036f",reComboHalfMarksRange$1="\\ufe20-\\ufe2f",rsComboSymbolsRange$1="\\u20d0-\\u20ff",rsComboRange$1=rsComboMarksRange$1+reComboHalfMarksRange$1+rsComboSymbolsRange$1,rsVarRange$1="\\ufe0e\\ufe0f",rsAstral="["+rsAstralRange$1+"]",rsCombo="["+rsComboRange$1+"]",rsFitz="\\ud83c[\\udffb-\\udfff]",rsModifier="(?:"+rsCombo+"|"+rsFitz+")",rsNonAstral="[^"+rsAstralRange$1+"]",rsRegional="(?:\\ud83c[\\udde6-\\uddff]){2}",rsSurrPair="[\\ud800-\\udbff][\\udc00-\\udfff]",rsZWJ$1="\\u200d",reOptMod=rsModifier+"?",rsOptVar="["+rsVarRange$1+"]?",rsOptJoin="(?:"+rsZWJ$1+"(?:"+[rsNonAstral,rsRegional,rsSurrPair].join("|")+")"+rsOptVar+reOptMod+")*",rsSeq=rsOptVar+reOptMod+rsOptJoin,rsSymbol="(?:"+[rsNonAstral+rsCombo+"?",rsCombo,rsRegional,rsSurrPair,rsAstral].join("|")+")",reUnicode=RegExp(rsFitz+"(?="+rsFitz+")|"+rsSymbol+rsSeq,"g");function unicodeToArray(e){return e.match(reUnicode)||[]}function stringToArray(e){return hasUnicode(e)?unicodeToArray(e):asciiToArray(e)}function toString(e){return null==e?"":baseToString(e)}var reTrim=/^\s+|\s+$/g;function trim(e,r,t){if((e=toString(e))&&(t||void 0===r))return e.replace(reTrim,"");if(!e||!(r=baseToString(r)))return e;var n=stringToArray(e),o=stringToArray(r);return castSlice(n,charsStartIndex(n,o),charsEndIndex(n,o)+1).join("")}var inArray=function(e,r){return!!e.filter((function(e){return e===r})).length},toArray=function(e){return isArray(e)?e:[e]},isObjectHasKey=function(e,r){try{var t=Object.keys(e);return inArray(t,r)}catch(e){return!1}},createEvt=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return e.join("_")},isFunc=function(e){if("function"==typeof e)return!0;console.error("Expect to be Function type!")},chainFns=function(e){for(var r=[],t=arguments.length-1;t-- >0;)r[t]=arguments[t+1];return function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return r.reduce((function(e,r){return Reflect.apply(r,null,toArray(e))}),Reflect.apply(e,null,t))}};function listCacheClear(){this.__data__=[],this.size=0}function eq(e,r){return e===r||e!=e&&r!=r}function assocIndexOf(e,r){for(var t=e.length;t--;)if(eq(e[t][0],r))return t;return-1}var arrayProto=Array.prototype,splice=arrayProto.splice;function listCacheDelete(e){var r=this.__data__,t=assocIndexOf(r,e);return!(t<0)&&(t==r.length-1?r.pop():splice.call(r,t,1),--this.size,!0)}function listCacheGet(e){var r=this.__data__,t=assocIndexOf(r,e);return t<0?void 0:r[t][1]}function listCacheHas(e){return assocIndexOf(this.__data__,e)>-1}function listCacheSet(e,r){var t=this.__data__,n=assocIndexOf(t,e);return n<0?(++this.size,t.push([e,r])):t[n][1]=r,this}function ListCache(e){var r=-1,t=null==e?0:e.length;for(this.clear();++r-1&&e%1==0&&e<=MAX_SAFE_INTEGER}function isArrayLike(e){return null!=e&&isLength(e.length)&&!isFunction(e)}function isArrayLikeObject(e){return isObjectLike(e)&&isArrayLike(e)}function stubFalse(){return!1}var freeExports$1="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule$1=freeExports$1&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports$1=freeModule$1&&freeModule$1.exports===freeExports$1,Buffer$1=moduleExports$1?root.Buffer:void 0,nativeIsBuffer=Buffer$1?Buffer$1.isBuffer:void 0,isBuffer=nativeIsBuffer||stubFalse,argsTag$1="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag$1="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag$1="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",typedArrayTags={};function baseIsTypedArray(e){return isObjectLike(e)&&isLength(e.length)&&!!typedArrayTags[baseGetTag(e)]}function baseUnary(e){return function(r){return e(r)}}typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag$1]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag$1]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag$1]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var freeExports$2="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule$2=freeExports$2&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports$2=freeModule$2&&freeModule$2.exports===freeExports$2,freeProcess=moduleExports$2&&freeGlobal.process,nodeUtil=function(){try{var e=freeModule$2&&freeModule$2.require&&freeModule$2.require("util").types;return e||freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}(),nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray,isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;function safeGet(e,r){if(("constructor"!==r||"function"!=typeof e[r])&&"__proto__"!=r)return e[r]}var objectProto$8=Object.prototype,hasOwnProperty$6=objectProto$8.hasOwnProperty;function assignValue(e,r,t){var n=e[r];hasOwnProperty$6.call(e,r)&&eq(n,t)&&(void 0!==t||r in e)||baseAssignValue(e,r,t)}function copyObject(e,r,t,n){var o=!t;t||(t={});for(var a=-1,i=r.length;++a-1&&e%1==0&&e0){if(++r>=HOT_COUNT)return arguments[0]}else r=0;return e.apply(void 0,arguments)}}var setToString=shortOut(baseSetToString);function baseRest(e,r){return setToString(overRest(e,r,identity),e+"")}function isIterateeCall(e,r,t){if(!isObject(t))return!1;var n=typeof r;return!!("number"==n?isArrayLike(t)&&isIndex(r,t.length):"string"==n&&r in t)&&eq(t[r],e)}function createAssigner(e){return baseRest((function(r,t){var n=-1,o=t.length,a=o>1?t[o-1]:void 0,i=o>2?t[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,i&&isIterateeCall(t[0],t[1],i)&&(a=o<3?void 0:a,o=1),r=Object(r);++n0;)r[t]=arguments[t+1];return function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return r.reduce((function(e,r){return e.then((function(e){return r(e)}))}),Reflect.apply(e,null,t))}}function objDefineProps(e,r,t,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(e,r)&&Object.defineProperty(e,r,{set:t,get:null===n?function(){return null}:n}),e}function injectToFn(e,r,t,n){void 0===n&&(n=!1);var o=Object.getOwnPropertyDescriptor(e,r);return!1===n&&void 0!==o?e:(Object.defineProperty(e,r,{value:t,writable:n}),e)}function checkIsContract(e){return isPlainObject(e)&&(isObjectHasKey(e,QUERY_NAME)||isObjectHasKey(e,MUTATION_NAME)||isObjectHasKey(e,SOCKET_NAME))}function extractSocketPart(e){return!!isObjectHasKey(e,"socket")&&e.socket}function groupByNamespace(e,r){void 0===r&&(r=!1);var t=extractSocketPart(e);if(!1===t){if(r)return e;throw new JsonqlError("socket not found in contract!")}var n,o={},a=0;for(var i in t){var s=t[i],c=s.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=s,n||s.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}function getNamespaceInOrder(e,r){var t=[];for(var n in e)n===r?t[1]=n:t[0]=n;return t}var stringTag$1="[object String]";function isString(e){return"string"==typeof e||!isArray(e)&&isObjectLike(e)&&baseGetTag(e)==stringTag$1}var formatPayload=function(e){var r;return(r={})[QUERY_ARG_NAME]=e,r};function getNameFromPayload(e){return Object.keys(e)[0]}function createQuery(e,r,t){var n;if(void 0===r&&(r=[]),void 0===t&&(t=!1),isString(e)&&isArray(r)){var o=formatPayload(r);return!0===t?o:((n={})[e]=o,n)}throw new JsonqlValidationError$1("[createQuery] expect resolverName to be string and args to be array!",{resolverName:e,args:r})}function createQueryStr(e,r,t){return void 0===r&&(r=[]),void 0===t&&(t=!1),JSON.stringify(createQuery(e,r,t))}var isContract=checkIsContract;function isNull(e){return null===e}function isUndefined(e){return void 0===e}var boolTag$1="[object Boolean]";function isBoolean(e){return!0===e||!1===e||isObjectLike(e)&&baseGetTag(e)==boolTag$1}var numberTag$1="[object Number]";function isNumber(e){return"number"==typeof e||isObjectLike(e)&&baseGetTag(e)==numberTag$1}function isNaN(e){return isNumber(e)&&e!=+e}function arrayFilter(e,r){for(var t=-1,n=null==e?0:e.length,o=0,a=[];++ts))return!1;var u=a.get(e);if(u&&a.get(r))return u==r;var l=-1,f=!0,p=t&COMPARE_UNORDERED_FLAG?new SetCache:void 0;for(a.set(e,r),a.set(r,e);++l0))},isArrayLike$1=function(e){if(e.indexOf(ARRAY_TYPE_LFT$1)>-1&&e.indexOf(ARRAY_TYPE_RGT$1)>-1){var r=e.replace(ARRAY_TYPE_LFT$1,"").replace(ARRAY_TYPE_RGT$1,"");return r.indexOf(OR_SEPERATOR$1)?r.split(OR_SEPERATOR$1):[r]}return!1},arrayTypeHandler=function(e,r){var t=e.arg;return r.length>1?!t.filter((function(e){return!(r.length>r.filter((function(r){return!combineFn(r)(e)})).length)})).length:r.length>r.filter((function(e){return!checkIsArray(t,e)})).length},checkIsObject=function(e,r){if(void 0===r&&(r=null),isPlainObject(e)){if(!r)return!0;if(checkIsArray(r))return!r.filter((function(r){var t=e[r.name];return!(r.type.length>r.type.filter((function(e){var r;return!!isUndefined(t)||(!1!==(r=isArrayLike$1(e))?!arrayTypeHandler({arg:t},r):!combineFn(e)(t))})).length)})).length}return!1},objectTypeHandler=function(e){var r=e.arg,t=e.param,n=[r];return Array.isArray(t.keys)&&t.keys.length&&n.push(t.keys),checkIsObject.apply(null,n)};function log(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];try{window&&window.console&&Reflect.apply(console.log,console,e)}catch(e){}}var optionalHandler=function(e){var r=e.arg,t=e.param;return!!notEmpty(r)&&!(t.type.length>t.type.filter((function(r){return validateHandler(r,e)})).length)},validateHandler=function(e,r){var t;switch(!0){case e===OBJECT_TYPE$1:return!objectTypeHandler(r);case e===ARRAY_TYPE$1:return!checkIsArray(r.arg);case!1!==(t=isArrayLike$1(e)):return!arrayTypeHandler(r,t);default:return!combineFn(e)(r.arg)}},getOptionalValue=function(e,r){return isUndefined(e)?!0!==r.optional||isUndefined(r.defaultvalue)?null:r.defaultvalue:e},normalizeArgs=function(e,r){if(!checkIsArray(r))throw new JsonqlError(PARAMS_NOT_ARRAY_ERR);if(0===r.length)return[];if(!checkIsArray(e))throw new JsonqlError(ARGS_NOT_ARRAY_ERR);switch(!0){case e.length==r.length:return log(1),e.map((function(e,t){return{arg:e,index:t,param:r[t]}}));case!0===r[0].variable:log(2);var t=r[0].type;return e.map((function(e,n){return{arg:e,index:n,param:r[n]||{type:t,name:"_"}}}));case e.lengthr.length:log(4);var n=r.length,o=[DEFAULT_TYPE$1];return e.map((function(e,t){var a=t>=n||!!r[t].optional,i=r[t]||{type:o,name:"_"+t};return{arg:a?getOptionalValue(e,i):e,index:t,param:i,optional:a}}));default:throw log(5),new JsonqlError(EXCEPTION_CASE_ERR,{args:e,params:r})}},processReturn=function(e){return e.map((function(e){return e.arg}))},validateSync=function(e,r,t){var n;void 0===t&&(t=!1);var o=normalizeArgs(e,r),a=o.filter((function(e){return!0===e.optional||!0===e.param.optional?optionalHandler(e):!(e.param.type.length>e.param.type.filter((function(r){return validateHandler(r,e)})).length)}));return t?((n={})[ERROR_KEY]=a,n[DATA_KEY]=processReturn(o),n):a},validateAsync=function(e,r,t){return void 0===t&&(t=!1),new Promise((function(n,o){var a=validateSync(e,r,t);return t?a[ERROR_KEY].length?o(a[ERROR_KEY]):n(a[DATA_KEY]):a.length?o(a):n([])}))},isInArray=function(e,r){return!!e.filter((function(e){return e===r})).length},isKeyInObject=function(e,r){var t=Object.keys(e);return isInArray(t,r)},isEmpty=function(e){return!notEmpty(e)};function mapAliasConfigKeys(e,r){var t=omitBy(r,(function(e,r){return!e[ALIAS_KEY$1]}));return isEqual(t,{})?e:mapKeys(e,(function(e,r){return findKey(t,(function(e){return e.alias===r}))||r}))}function preservePristineValues(e,r){var t=mapAliasConfigKeys(e,r);return{pristineValues:mapValues(omitBy(r,(function(e,r){return isKeyInObject(t,r)})),(function(e){return e.args})),checkAgainstAppProps:omitBy(r,(function(e,r){return!isKeyInObject(t,r)})),config:t}}function processConfigAction(e,r){return mapValues(r,(function(r,t){var n,o;return isUndefined(e[t])||!0===r[OPTIONAL_KEY$1]&&isEmpty(e[t])?merge({},r,((n={})[KEY_WORD$1]=!0,n)):((o={})[ARGS_KEY$1]=e[t],o[TYPE_KEY$1]=r[TYPE_KEY$1],o[OPTIONAL_KEY$1]=r[OPTIONAL_KEY$1]||!1,o[ENUM_KEY$1]=r[ENUM_KEY$1]||!1,o[CHECKER_KEY$1]=r[CHECKER_KEY$1]||!1,o)}))}function prepareArgsForValidation(e,r){var t=preservePristineValues(e,r),n=t.config,o=t.pristineValues;return[processConfigAction(n,t.checkAgainstAppProps),o]}var toArray$1=function(e){return checkIsArray(e)?e:[e]},inArray$1=function(e,r){return!!e.filter((function(e){return e===r})).length};function validateHandler$1(e,r){var t,n=[[e[ARGS_KEY$1]],[(t={},t[TYPE_KEY$1]=toArray$1(e[TYPE_KEY$1]),t[OPTIONAL_KEY$1]=e[OPTIONAL_KEY$1],t)]];return Reflect.apply(r,null,n)}var enumHandler=function(e,r){return!checkIsArray(r)||inArray$1(r,e)},checkerHandler=function(e,r){try{return!!isFunction(r)&&r.apply(null,[e])}catch(e){return!1}};function runValidationAction(e){return function(r,t){if(r[KEY_WORD$1])return r[ARGS_KEY$1];var n=validateHandler$1(r,e);if(n.length)throw log("runValidationAction",t,r),new JsonqlTypeError(t,n);if(!1!==r[ENUM_KEY$1]&&!enumHandler(r[ARGS_KEY$1],r[ENUM_KEY$1]))throw log(ENUM_KEY$1,r[ENUM_KEY$1]),new JsonqlEnumError(t);if(!1!==r[CHECKER_KEY$1]&&!checkerHandler(r[ARGS_KEY$1],r[CHECKER_KEY$1]))throw log(CHECKER_KEY$1,r[CHECKER_KEY$1]),new JsonqlCheckerError(t);return r[ARGS_KEY$1]}}function runValidation(e,r){var t=e[0],n=e[1],o=mapValues(t,runValidationAction(r));return merge(o,n)}var configToArgs=function(e,r){return Promise.resolve(prepareArgsForValidation(e,r))};function checkOptionsAsync(e,r,t,n){return void 0===e&&(e={}),configToArgs(e,r).then((function(e){return runValidation(e,n)})).then((function(e){return merge({},e,t)}))}function constructConfigFn(e,r,t,n,o,a){void 0===t&&(t=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===a&&(a=!1);var i={};return i[ARGS_KEY]=e,i[TYPE_KEY]=r,!0===t&&(i[OPTIONAL_KEY]=!0),checkIsArray(n)&&(i[ENUM_KEY]=n),isFunction(o)&&(i[CHECKER_KEY]=o),isString(a)&&(i[ALIAS_KEY]=a),i}var createConfig=function(e,r,t){void 0===t&&(t={});var n=t[OPTIONAL_KEY],o=t[ENUM_KEY],a=t[CHECKER_KEY],i=t[ALIAS_KEY];return constructConfigFn.apply(null,[e,r,n,o,a,i])},checkConfigAsync=function(e){return function(r,t,n){return void 0===n&&(n={}),checkOptionsAsync(r,t,n,e)}},isString$1=checkIsString,validateAsync$1=validateAsync,createConfig$1=createConfig,checkConfigAsync$1=checkConfigAsync(validateSync),BASE_NAME="jsonql-ws-client",getDebug=function(e){try{if(window.debug)return window.debug(BASE_NAME).extend(e)}catch(e){}try{if(global$1.debug)return global$1.debug(BASE_NAME).extend(e)}catch(e){}return function(){for(var r=[],t=arguments.length;t--;)r[t]=arguments[t];console.info.apply(null,[BASE_NAME,e].concat(r))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",BASE_NAME+"*")}catch(e){}var NB_EVENT_SERVICE_PRIVATE_STORE=new WeakMap,NB_EVENT_SERVICE_PRIVATE_LAZY=new WeakMap;function hashCode(e){return e.split("").reduce((function(e,r){return(e=(e<<5)-e+r.charCodeAt(0))&e}),0)}var SuspendClass=function(){this.__suspend__=null,this.queueStore=new Set},prototypeAccessors={$suspend:{configurable:!0},$queues:{configurable:!0}};prototypeAccessors.$suspend.set=function(e){var r=this;if("boolean"!=typeof e)throw new Error("$suspend only accept Boolean value!");var t=this.__suspend__;this.__suspend__=e,this.logger("($suspend)","Change from "+t+" --\x3e "+e),!0===t&&!1===e&&setTimeout((function(){r.release()}),1)},SuspendClass.prototype.$queue=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",e),this.queueStore.add(e)),this.__suspend__},prototypeAccessors.$queues.get=function(){var e=this.queueStore.size;return this.logger("($queues)","size: "+e),e>0?Array.from(this.queueStore):[]},SuspendClass.prototype.release=function(){var e=this,r=this.queueStore.size;if(this.logger("(release)","Release was called "+r),r>0){var t=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",t),t.forEach((function(r){e.logger(r),Reflect.apply(e.$trigger,e,r)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(SuspendClass.prototype,prototypeAccessors);var NbEventServiceBase=function(e){function r(r){void 0===r&&(r={}),e.call(this),r.logger&&"function"==typeof r.logger&&(this.logger=r.logger),this.keep=r.keep,this.result=r.keep?[]:null,this.normalStore=new Map,this.lazyStore=new Map}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={normalStore:{configurable:!0},lazyStore:{configurable:!0}};return r.prototype.validateEvt=function(){for(var e=this,r=[],t=arguments.length;t--;)r[t]=arguments[t];return r.forEach((function(r){if("string"!=typeof r)throw e.logger("(validateEvt)",r),new Error("event name must be string type!")})),!0},r.prototype.validate=function(e,r){if(this.validateEvt(e)&&"function"==typeof r)return!0;throw new Error("callback required to be function type!")},r.prototype.validateType=function(e){return!!["on","only","once","onlyOnce"].filter((function(r){return e===r})).length},r.prototype.run=function(e,r,t){this.logger("(run)",e,r,t),this.$done=Reflect.apply(e,t,this.toArray(r))},r.prototype.takeFromStore=function(e,r){void 0===r&&(r="lazyStore");var t=this[r];if(t){if(this.logger("(takeFromStore)",r,t),t.has(e)){var n=t.get(e);return this.logger("(takeFromStore)","has "+e,n),t.delete(e),n}return!1}throw new Error(r+" is not supported!")},r.prototype.addToStore=function(e,r){for(var t,n=[],o=arguments.length-2;o-- >0;)n[o]=arguments[o+2];if(e.has(r)?(this.logger("(addToStore)",r+" existed"),t=e.get(r)):(this.logger("(addToStore)","create new Set for "+r),t=new Set),n.length>2)if(Array.isArray(n[0])){var a=n[2];this.checkTypeInLazyStore(r,a)||t.add(n)}else this.checkContentExist(n,t)||(this.logger("(addToStore)","insert new",n),t.add(n));else t.add(n);return e.set(r,t),[e,t.size]},r.prototype.checkContentExist=function(e,r){return!!Array.from(r).filter((function(r){return r[0]===e[0]})).length},r.prototype.checkTypeInStore=function(e,r){this.validateEvt(e,r);var t=this.$get(e,!0);return!1===t||!t.filter((function(e){var t=e[3];return r!==t})).length},r.prototype.checkTypeInLazyStore=function(e,r){this.validateEvt(e,r);var t=this.lazyStore.get(e);return this.logger("(checkTypeInLazyStore)",t),!!t&&!!Array.from(t).filter((function(e){return e[2]!==r})).length},r.prototype.addToNormalStore=function(e,r,t,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",e,r,"try to add to normal store"),this.checkTypeInStore(e,r)){this.logger("(addToNormalStore)",r+" can add to "+e+" normal store");var o=this.hashFnToKey(t),a=[this.normalStore,e,o,t,n,r],i=Reflect.apply(this.addToStore,this,a),s=i[0],c=i[1];return this.normalStore=s,c}return!1},r.prototype.addToLazyStore=function(e,r,t,n){void 0===r&&(r=[]),void 0===t&&(t=null),void 0===n&&(n=!1);var o=[this.lazyStore,e,this.toArray(r),t];n&&o.push(n);var a=Reflect.apply(this.addToStore,this,o),i=a[0],s=a[1];return this.lazyStore=i,s},r.prototype.toArray=function(e){return Array.isArray(e)?e:[e]},t.normalStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_STORE.set(this,e)},t.normalStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_STORE.get(this)},t.lazyStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_LAZY.set(this,e)},t.lazyStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_LAZY.get(this)},r.prototype.hashFnToKey=function(e){return hashCode(e.toString())+""},Object.defineProperties(r.prototype,t),r}(SuspendClass),EventService=function(e){function r(r){void 0===r&&(r={}),e.call(this,r)}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var t={$done:{configurable:!0}};return r.prototype.logger=function(){},r.prototype.$on=function(e,r,t){var n=this;void 0===t&&(t=null);this.validate(e,r);var o=this.takeFromStore(e);if(!1===o)return this.logger("($on)",e+" callback is not in lazy store"),this.addToNormalStore(e,"on",r,t);this.logger("($on)",e+" found in lazy store");var a=0;return o.forEach((function(o){var i=o[0],s=o[1],c=o[2];if(c&&"on"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);n.logger("($on)","call run on "+e),n.run(r,i,t||s),a+=n.addToNormalStore(e,"on",r,t||s)})),a},r.prototype.$once=function(e,r,t){void 0===t&&(t=null),this.validate(e,r);var n=this.takeFromStore(e);this.normalStore;if(!1===n)return this.logger("($once)",e+" not in the lazy store"),this.addToNormalStore(e,"once",r,t);this.logger("($once)",n);var o=Array.from(n)[0],a=o[0],i=o[1],s=o[2];if(s&&"once"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);this.logger("($once)","call run for "+e),this.run(r,a,t||i),this.$off(e)},r.prototype.$only=function(e,r,t){var n=this;void 0===t&&(t=null),this.validate(e,r);var o=!1,a=this.takeFromStore(e);(this.normalStore.has(e)||(this.logger("($only)",e+" add to store"),o=this.addToNormalStore(e,"only",r,t)),!1!==a)&&(this.logger("($only)",e+" found data in lazy store to execute"),Array.from(a).forEach((function(o){var a=o[0],i=o[1],s=o[2];if(s&&"only"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);n.logger("($only)","call run for "+e),n.run(r,a,t||i)})));return o},r.prototype.$onlyOnce=function(e,r,t){void 0===t&&(t=null),this.validate(e,r);var n=!1,o=this.takeFromStore(e);if(this.normalStore.has(e)||(this.logger("($onlyOnce)",e+" add to store"),n=this.addToNormalStore(e,"onlyOnce",r,t)),!1!==o){this.logger("($onlyOnce)",o);var a=Array.from(o)[0],i=a[0],s=a[1],c=a[2];if(c&&"onlyOnce"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);this.logger("($onlyOnce)","call run for "+e),this.run(r,i,t||s),this.$off(e)}return n},r.prototype.$replace=function(e,r,t,n){if(void 0===t&&(t=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(e);var o=this["$"+n];return this.logger("($replace)",e,r),Reflect.apply(o,this,[e,r,t])}throw new Error(n+" is not supported!")},r.prototype.$trigger=function(e,r,t,n){void 0===r&&(r=[]),void 0===t&&(t=null),void 0===n&&(n=!1),this.validateEvt(e);var o=0,a=this.normalStore;if(this.logger("($trigger)","normalStore",a),a.has(e)){var i=this.$queue(e,r,t,n);if(this.logger("($trigger)",e,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",e,"not executed. Exit now."),!1;for(var s=Array.from(a.get(e)),c=s.length,u=!1,l=0;l-1?r.indexOf("https")>-1?r.replace("https","wss"):r.replace("http","ws"):r};function createWsClient(e,r){return void 0===r&&(r=!1),!1===r?function(r){return new e(fixWss$1(r))}:function(r,t){var n=fixWss$1(r),o=t&&"string"==typeof t?n+"?"+TOKEN_PARAM_NAME+"="+t:n;try{return new e(o)}catch(e){return console.error("WebSocket Connection Error",e),!1}}}function createNspClient(e,r){var t=r.hostname,n=r.wssPath,o=r.wsOptions;return(0,r.nspClient)(e?[t,e].join("/"):n,o)}function createNspAuthClient(e,r){var t=r.hostname,n=r.wssPath,o=r.token,a=r.wsOptions,i=r.nspAuthClient,s=e?[t,e].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(s,o,a)}function triggerNamespacesOnError(e,r,t,n){void 0===n&&(n={});var o=n.useCallbackStyle?ERROR_PROP_NAME:ON_ERROR_PROP_NAME$1;r.forEach((function(r){e.$call(createEvt(r,o),[{message:t,namespace:r}])}))}var debugFn$7=getDebug("client-event-handler"),notLoginWsHandler=function(e,r,t){var n=t.useCallbackStyle,o=n?ERROR_PROP_NAME:ON_ERROR_PROP_NAME$1,a=n?RESULT_PROP_NAME:ON_RESULT_PROP_NAME$1;r.$only(createEvt(e,EMIT_EVT),(function(t,n){debugFn$7("noLoginHandler hijack the ws call",e,t,n);var i={message:NOT_LOGIN_ERR_MSG};r.$call(createEvt(e,t,o),[i]),r.$call(createEvt(e,t,a),[{error:i}])}))},getPrivateNamespace=function(e){return e.length>1&&e[0]};function clientEventHandler(e,r,t,n,o,a){var i=getPrivateNamespace(o),s=!1;o.forEach((function(o){if(s=i===o,a[o]){debugFn$7("call bindWsHandler",s,o);var c=[o,a[o],t,s,e];if(e.serverType===SOCKET_IO){var u=r.nspSet;c.push(u[o])}Reflect.apply(n,null,c)}else notLoginWsHandler(o,t,e)})),t.$on(LOGOUT_EVENT_NAME,(function(){debugFn$7("LOGOUT_EVENT_NAME"),triggerNamespacesOnError(t,o,LOGOUT_EVENT_NAME),o.forEach((function(r){clearMainEmitEvt(t,r),a[r]=!1,notLoginWsHandler(r,t,e)}))}))}var keys$1=[WS_REPLY_TYPE,WS_EVT_NAME,WS_DATA_NAME],isWsReply=function(e){var r=e.data;return!!r&&(keys$1.filter((function(e){return isObjectHasKey(r,e)})).length===keys$1.length&&r)},extractWsPayload=function(e){var r,t=e.data,n=isString$1(t)?JSON.parse(t):t;if(!1!==(r=isWsReply(n)))return{resolverName:r[WS_EVT_NAME],data:r[WS_DATA_NAME],type:r[WS_REPLY_TYPE]};throw new JsonqlError("payload can not be decoded",e)},debugFn$8=getDebug("ws-main-handler"),errorTypeHandler=function(e,r,t,n,o){var a=[r];t&&(debugFn$8("a global error on "+r),a.push(t)),a.push(o);var i=Reflect.apply(createEvt,null,a),s=n.data||n;e.$trigger(i,[s])};function wsMainHandler(e,r,t,n,o){var a=o.useCallbackStyle,i=a?READY_PROP_NAME$1:ON_READY_PROP_NAME,s=a?LOGIN_PROP_NAME:ON_LOGIN_PROP_NAME,c=a?MESSAGE_PROP_NAME:ON_MESSAGE_PROP_NAME$1,u=a?RESULT_PROP_NAME:ON_RESULT_PROP_NAME$1,l=a?ERROR_PROP_NAME:ON_ERROR_PROP_NAME$1;r.onopen=function(){debugFn$8("ws.onopen listened"),t.$call(i,e),n&&(console.log("isPrivate and fire the "+s),t.$call(s,e)),t.$only(createEvt(e,EMIT_REPLY_TYPE),(function(e,t){debugFn$8("calling server",e,t),r.send(createQueryStr(e,t))}))},r.onmessage=function(r){try{var n=extractWsPayload(r),o=n.resolverName,a=n.type;switch(debugFn$8("Hear from server",a,n),a){case EMIT_REPLY_TYPE:var i=createEvt(e,o,c),s=t.$trigger(i,[n]);debugFn$8("EMIT_REPLY_TYPE",i,s);break;case ACKNOWLEDGE_REPLY_TYPE:var f=createEvt(e,o,u);t.$trigger(f,[n]);debugFn$8("ACKNOWLEDGE_REPLY_TYPE",f,n);break;case ERROR_TYPE:debugFn$8("ERROR_TYPE"),errorTypeHandler(t,e,o,n,l);break;default:debugFn$8("Unhandled event!",n),errorTypeHandler(t,e,o,n,l)}}catch(r){console.error("ws.onmessage error",r),errorTypeHandler(t,e,!1,r,l)}},r.onclose=function(){debugFn$8("ws.onclose callback")},t.$on(LOGOUT_EVENT_NAME,(function(){try{debugFn$8("terminate ws connection"),r.terminate()}catch(e){console.error("ws.terminate error",e)}}))}var debugFn$9=getDebug("ws-create-client"),createNsps=function(e,r,t){var n=r.nspSet,o=r.publicNamespace,a=!1,i=[],s={};if(e.enableAuth&&e.useJwt)a=!0,s=(i=getNamespaceInOrder(n,o)).map((function(r,n){var o,a,i;return 0===n?t?(e.token=t,(o={})[r]=createNspAuthClient(r,e),o):((a={})[r]=!1,a):((i={})[r]=createNspClient(r,e),i)})).reduce((function(e,r){return Object.assign(e,r)}),{});else{var c=getNameFromPayload(n);i.push(c),s[c]=createNspClient(!1,e)}return{nsps:s,namespaces:i,login:a}};function createClient(e,r,t){var n=[e,r,t,wsMainHandler],o=e.token,a=createNsps(e,r,o),i=a.nsps,s=a.namespaces,c=a.login;return Reflect.apply(clientEventHandler,null,n.concat([s,i])),c&&t.$only(LOGIN_EVENT_NAME,(function(o){clearMainEmitEvt(t,s);var a=createNsps(e,r,o);Reflect.apply(clientEventHandler,null,n.concat([a.namespaces,a.nsps]))})),{opts:e,nspMap:r,ee:t}}function createClientResolver(e){var r=createWsClient(e),t=createWsClient(e,!0);return function(e,n,o){return e.nspClient=r,e.nspAuthClient=t,createClient(e,n,o)}}var wsClientResolver=createClientResolver(WebSocket),node=wsClient(wsClientResolver,constProps);module.exports=node; +"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}require("fs"),require("path");var WebSocket=_interopDefault(require("ws")),Jsonql406Error=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 406},r.name.get=function(){return"Jsonql406Error"},Object.defineProperties(t,r),t}(Error),Jsonql500Error=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"Jsonql500Error"},Object.defineProperties(t,r),t}(Error),JsonqlAuthorisationError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlAuthorisationError"},Object.defineProperties(t,r),t}(Error),JsonqlContractAuthError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 401},r.name.get=function(){return"JsonqlContractAuthError"},Object.defineProperties(t,r),t}(Error),JsonqlResolverAppError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 500},r.name.get=function(){return"JsonqlResolverAppError"},Object.defineProperties(t,r),t}(Error),JsonqlResolverNotFoundError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={statusCode:{configurable:!0},name:{configurable:!0}};return r.statusCode.get=function(){return 404},r.name.get=function(){return"JsonqlResolverNotFoundError"},Object.defineProperties(t,r),t}(Error),JsonqlEnumError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlEnumError"},Object.defineProperties(t,r),t}(Error),JsonqlTypeError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlTypeError"},Object.defineProperties(t,r),t}(Error),JsonqlCheckerError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlCheckerError"},Object.defineProperties(t,r),t}(Error),JsonqlValidationError$1=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlValidationError"},Object.defineProperties(t,r),t}(Error),DATA_KEY="data",ERROR_KEY="error",JSONQL_PATH="jsonql",DEFAULT_TYPE="any",QUERY_NAME="query",MUTATION_NAME="mutation",SOCKET_NAME="socket",QUERY_ARG_NAME="args",KEY_WORD="continue",TYPE_KEY="type",OPTIONAL_KEY="optional",ENUM_KEY="enumv",ARGS_KEY="args",CHECKER_KEY="checker",ALIAS_KEY="alias",LOGIN_NAME="login",ISSUER_NAME=LOGIN_NAME,LOGOUT_NAME="logout",OR_SEPERATOR="|",STRING_TYPE="string",BOOLEAN_TYPE="boolean",ARRAY_TYPE="array",OBJECT_TYPE="object",NUMBER_TYPE="number",ARRAY_TYPE_LFT="array.<",ARRAY_TYPE_RGT=">",NO_ERROR_MSG="No message",NO_STATUS_CODE=-1,LOGIN_EVENT_NAME="__login__",LOGOUT_EVENT_NAME="__logout__",WS_REPLY_TYPE="__reply__",WS_EVT_NAME="__event__",WS_DATA_NAME="__data__",EMIT_REPLY_TYPE="emit",ACKNOWLEDGE_REPLY_TYPE="acknowledge",ERROR_TYPE="error",NSP_SET="nspSet",PUBLIC_NAMESPACE="publicNamespace",JS_WS_SOCKET_IO_NAME="socket.io",JS_WS_NAME="ws",ON_MESSAGE_PROP_NAME$1="onMessage",ON_RESULT_PROP_NAME$1="onResult",ON_ERROR_PROP_NAME$1="onError",ON_READY_PROP_NAME="onReady",ON_LOGIN_PROP_NAME="onLogin",SEND_MSG_PROP_NAME="send",MESSAGE_PROP_NAME="message",RESULT_PROP_NAME="result",ERROR_PROP_NAME="error",READY_PROP_NAME$1="ready",LOGIN_PROP_NAME="login",NOT_LOGIN_ERR_MSG="NOT LOGIN",TOKEN_PARAM_NAME="token",IO_ROUNDTRIP_LOGIN="roundtip",IO_HANDSHAKE_LOGIN="handshake",JsonqlError=function(e){function t(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];e.apply(this,r),this.message=r[0],this.detail=r[1],this.className=t.name,e.captureStackTrace&&e.captureStackTrace(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={name:{configurable:!0},statusCode:{configurable:!0}};return r.name.get=function(){return"JsonqlError"},r.statusCode.get=function(){return NO_STATUS_CODE},Object.defineProperties(t,r),t}(Error),JsonqlServerError=function(e){function t(r,n){e.call(this,n),this.statusCode=r,this.className=t.name}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={name:{configurable:!0}};return r.name.get=function(){return"JsonqlServerError"},Object.defineProperties(t,r),t}(Error);function finalCatch(e){if(Array.isArray(e))throw new JsonqlValidationError$1("",e);var t=e.message||NO_ERROR_MSG,r=e.detail||e;switch(!0){case e instanceof Jsonql406Error:throw new Jsonql406Error(t,r);case e instanceof Jsonql500Error:throw new Jsonql500Error(t,r);case e instanceof JsonqlAuthorisationError:throw new JsonqlAuthorisationError(t,r);case e instanceof JsonqlContractAuthError:throw new JsonqlContractAuthError(t,r);case e instanceof JsonqlResolverAppError:throw new JsonqlResolverAppError(t,r);case e instanceof JsonqlResolverNotFoundError:throw new JsonqlResolverNotFoundError(t,r);case e instanceof JsonqlEnumError:throw new JsonqlEnumError(t,r);case e instanceof JsonqlTypeError:throw new JsonqlTypeError(t,r);case e instanceof JsonqlCheckerError:throw new JsonqlCheckerError(t,r);case e instanceof JsonqlValidationError$1:throw new JsonqlValidationError$1(t,r);case e instanceof JsonqlServerError:throw new JsonqlServerError(t,r);default:throw new JsonqlError(t,r)}}var SOCKET_IO=JS_WS_SOCKET_IO_NAME,MISSING_PROP_ERR="Missing property in contract!",EMIT_EVT=EMIT_REPLY_TYPE,UNKNOWN_RESULT="UKNNOWN RESULT!",MY_NAMESPACE="myNamespace",CB_FN_NAME="on",isArray=Array.isArray,global$1="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},freeGlobal="object"==typeof global$1&&global$1&&global$1.Object===Object&&global$1,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function("return this")(),Symbol=root.Symbol,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=Symbol?Symbol.toStringTag:void 0;function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag),r=e[symToStringTag];try{e[symToStringTag]=void 0;var n=!0}catch(e){}var o=nativeObjectToString.call(e);return n&&(t?e[symToStringTag]=r:delete e[symToStringTag]),o}var objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString;function objectToString(e){return nativeObjectToString$1.call(e)}var nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag$1=Symbol?Symbol.toStringTag:void 0;function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:symToStringTag$1&&symToStringTag$1 in Object(e)?getRawTag(e):objectToString(e)}function overArg(e,t){return function(r){return e(t(r))}}var getPrototype=overArg(Object.getPrototypeOf,Object);function isObjectLike(e){return null!=e&&"object"==typeof e}var objectTag="[object Object]",funcProto=Function.prototype,objectProto$2=Object.prototype,funcToString=funcProto.toString,hasOwnProperty$1=objectProto$2.hasOwnProperty,objectCtorString=funcToString.call(Object);function isPlainObject(e){if(!isObjectLike(e)||baseGetTag(e)!=objectTag)return!1;var t=getPrototype(e);if(null===t)return!0;var r=hasOwnProperty$1.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&funcToString.call(r)==objectCtorString}function arrayMap(e,t){for(var r=-1,n=null==e?0:e.length,o=Array(n);++ro?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(o);++n=n?e:baseSlice(e,t,r)}function baseFindIndex(e,t,r,n){for(var o=e.length,a=r+(n?1:-1);n?a--:++a-1;);return r}function charsStartIndex(e,t){for(var r=-1,n=e.length;++r-1;);return r}function asciiToArray(e){return e.split("")}var rsAstralRange="\\ud800-\\udfff",rsComboMarksRange="\\u0300-\\u036f",reComboHalfMarksRange="\\ufe20-\\ufe2f",rsComboSymbolsRange="\\u20d0-\\u20ff",rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsVarRange="\\ufe0e\\ufe0f",rsZWJ="\\u200d",reHasUnicode=RegExp("["+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+"]");function hasUnicode(e){return reHasUnicode.test(e)}var rsAstralRange$1="\\ud800-\\udfff",rsComboMarksRange$1="\\u0300-\\u036f",reComboHalfMarksRange$1="\\ufe20-\\ufe2f",rsComboSymbolsRange$1="\\u20d0-\\u20ff",rsComboRange$1=rsComboMarksRange$1+reComboHalfMarksRange$1+rsComboSymbolsRange$1,rsVarRange$1="\\ufe0e\\ufe0f",rsAstral="["+rsAstralRange$1+"]",rsCombo="["+rsComboRange$1+"]",rsFitz="\\ud83c[\\udffb-\\udfff]",rsModifier="(?:"+rsCombo+"|"+rsFitz+")",rsNonAstral="[^"+rsAstralRange$1+"]",rsRegional="(?:\\ud83c[\\udde6-\\uddff]){2}",rsSurrPair="[\\ud800-\\udbff][\\udc00-\\udfff]",rsZWJ$1="\\u200d",reOptMod=rsModifier+"?",rsOptVar="["+rsVarRange$1+"]?",rsOptJoin="(?:"+rsZWJ$1+"(?:"+[rsNonAstral,rsRegional,rsSurrPair].join("|")+")"+rsOptVar+reOptMod+")*",rsSeq=rsOptVar+reOptMod+rsOptJoin,rsSymbol="(?:"+[rsNonAstral+rsCombo+"?",rsCombo,rsRegional,rsSurrPair,rsAstral].join("|")+")",reUnicode=RegExp(rsFitz+"(?="+rsFitz+")|"+rsSymbol+rsSeq,"g");function unicodeToArray(e){return e.match(reUnicode)||[]}function stringToArray(e){return hasUnicode(e)?unicodeToArray(e):asciiToArray(e)}function toString(e){return null==e?"":baseToString(e)}var reTrim=/^\s+|\s+$/g;function trim(e,t,r){if((e=toString(e))&&(r||void 0===t))return e.replace(reTrim,"");if(!e||!(t=baseToString(t)))return e;var n=stringToArray(e),o=stringToArray(t);return castSlice(n,charsStartIndex(n,o),charsEndIndex(n,o)+1).join("")}var inArray=function(e,t){return!!e.filter((function(e){return e===t})).length},toArray=function(e){return isArray(e)?e:[e]},isObjectHasKey=function(e,t){try{var r=Object.keys(e);return inArray(r,t)}catch(e){return!1}},createEvt=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return e.join("_")},isFunc=function(e){if("function"==typeof e)return!0;console.error("Expect to be Function type!")},chainFns=function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return t.reduce((function(e,t){return Reflect.apply(t,null,toArray(e))}),Reflect.apply(e,null,r))}};function listCacheClear(){this.__data__=[],this.size=0}function eq(e,t){return e===t||e!=e&&t!=t}function assocIndexOf(e,t){for(var r=e.length;r--;)if(eq(e[r][0],t))return r;return-1}var arrayProto=Array.prototype,splice=arrayProto.splice;function listCacheDelete(e){var t=this.__data__,r=assocIndexOf(t,e);return!(r<0)&&(r==t.length-1?t.pop():splice.call(t,r,1),--this.size,!0)}function listCacheGet(e){var t=this.__data__,r=assocIndexOf(t,e);return r<0?void 0:t[r][1]}function listCacheHas(e){return assocIndexOf(this.__data__,e)>-1}function listCacheSet(e,t){var r=this.__data__,n=assocIndexOf(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}function ListCache(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=MAX_SAFE_INTEGER}function isArrayLike(e){return null!=e&&isLength(e.length)&&!isFunction(e)}function isArrayLikeObject(e){return isObjectLike(e)&&isArrayLike(e)}function stubFalse(){return!1}var freeExports$1="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule$1=freeExports$1&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports$1=freeModule$1&&freeModule$1.exports===freeExports$1,Buffer$1=moduleExports$1?root.Buffer:void 0,nativeIsBuffer=Buffer$1?Buffer$1.isBuffer:void 0,isBuffer=nativeIsBuffer||stubFalse,argsTag$1="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag$1="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag$1="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",typedArrayTags={};function baseIsTypedArray(e){return isObjectLike(e)&&isLength(e.length)&&!!typedArrayTags[baseGetTag(e)]}function baseUnary(e){return function(t){return e(t)}}typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag$1]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag$1]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag$1]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var freeExports$2="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule$2=freeExports$2&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports$2=freeModule$2&&freeModule$2.exports===freeExports$2,freeProcess=moduleExports$2&&freeGlobal.process,nodeUtil=function(){try{var e=freeModule$2&&freeModule$2.require&&freeModule$2.require("util").types;return e||freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}(),nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray,isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;function safeGet(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var objectProto$8=Object.prototype,hasOwnProperty$6=objectProto$8.hasOwnProperty;function assignValue(e,t,r){var n=e[t];hasOwnProperty$6.call(e,t)&&eq(n,r)&&(void 0!==r||t in e)||baseAssignValue(e,t,r)}function copyObject(e,t,r,n){var o=!r;r||(r={});for(var a=-1,i=t.length;++a-1&&e%1==0&&e0){if(++t>=HOT_COUNT)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var setToString=shortOut(baseSetToString);function baseRest(e,t){return setToString(overRest(e,t,identity),e+"")}function isIterateeCall(e,t,r){if(!isObject(r))return!1;var n=typeof t;return!!("number"==n?isArrayLike(r)&&isIndex(t,r.length):"string"==n&&t in r)&&eq(r[t],e)}function createAssigner(e){return baseRest((function(t,r){var n=-1,o=r.length,a=o>1?r[o-1]:void 0,i=o>2?r[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,i&&isIterateeCall(r[0],r[1],i)&&(a=o<3?void 0:a,o=1),t=Object(t);++n0;)t[r]=arguments[r+1];return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];return t.reduce((function(e,t){return e.then((function(e){return t(e)}))}),Reflect.apply(e,null,r))}}function objDefineProps(e,t,r,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(e,t)&&Object.defineProperty(e,t,{set:r,get:null===n?function(){return null}:n}),e}function objHasProp(e,t){var r=Object.getOwnPropertyDescriptor(e,t);return void 0!==r&&r.value?r.value:r}function injectToFn(e,t,r,n){void 0===n&&(n=!1);var o=objHasProp(e,t);return!1===n&&void 0!==o?e:(Object.defineProperty(e,t,{value:r,writable:n}),e)}function checkIsContract(e){return isPlainObject(e)&&(isObjectHasKey(e,QUERY_NAME)||isObjectHasKey(e,MUTATION_NAME)||isObjectHasKey(e,SOCKET_NAME))}function extractSocketPart(e){return!!isObjectHasKey(e,"socket")&&e.socket}function groupByNamespace(e,t){void 0===t&&(t=!1);var r=extractSocketPart(e);if(!1===r){if(t)return e;throw new JsonqlError("socket not found in contract!")}var n,o={},a=0;for(var i in r){var s=r[i],c=s.namespace;c&&(o[c]||(++a,o[c]={}),o[c][i]=s,n||s.public&&(n=c))}return{size:a,nspSet:o,publicNamespace:n}}function getNamespaceInOrder(e,t){var r=[];for(var n in e)n===t?r[1]=n:r[0]=n;return r}var stringTag$1="[object String]";function isString(e){return"string"==typeof e||!isArray(e)&&isObjectLike(e)&&baseGetTag(e)==stringTag$1}var formatPayload=function(e){var t;return(t={})[QUERY_ARG_NAME]=e,t};function getNameFromPayload(e){return Object.keys(e)[0]}function createQuery(e,t,r){var n;if(void 0===t&&(t=[]),void 0===r&&(r=!1),isString(e)&&isArray(t)){var o=formatPayload(t);return!0===r?o:((n={})[e]=o,n)}throw new JsonqlValidationError$1("[createQuery] expect resolverName to be string and args to be array!",{resolverName:e,args:t})}function createQueryStr(e,t,r){return void 0===t&&(t=[]),void 0===r&&(r=!1),JSON.stringify(createQuery(e,t,r))}var isContract=checkIsContract;function isNull(e){return null===e}function isUndefined(e){return void 0===e}var boolTag$1="[object Boolean]";function isBoolean(e){return!0===e||!1===e||isObjectLike(e)&&baseGetTag(e)==boolTag$1}var numberTag$1="[object Number]";function isNumber(e){return"number"==typeof e||isObjectLike(e)&&baseGetTag(e)==numberTag$1}function isNaN(e){return isNumber(e)&&e!=+e}function arrayFilter(e,t){for(var r=-1,n=null==e?0:e.length,o=0,a=[];++rs))return!1;var u=a.get(e);if(u&&a.get(t))return u==t;var l=-1,f=!0,p=r&COMPARE_UNORDERED_FLAG?new SetCache:void 0;for(a.set(e,t),a.set(t,e);++l0))},isArrayLike$1=function(e){if(e.indexOf(ARRAY_TYPE_LFT$1)>-1&&e.indexOf(ARRAY_TYPE_RGT$1)>-1){var t=e.replace(ARRAY_TYPE_LFT$1,"").replace(ARRAY_TYPE_RGT$1,"");return t.indexOf(OR_SEPERATOR$1)?t.split(OR_SEPERATOR$1):[t]}return!1},arrayTypeHandler=function(e,t){var r=e.arg;return t.length>1?!r.filter((function(e){return!(t.length>t.filter((function(t){return!combineFn(t)(e)})).length)})).length:t.length>t.filter((function(e){return!checkIsArray(r,e)})).length},checkIsObject=function(e,t){if(void 0===t&&(t=null),isPlainObject(e)){if(!t)return!0;if(checkIsArray(t))return!t.filter((function(t){var r=e[t.name];return!(t.type.length>t.type.filter((function(e){var t;return!!isUndefined(r)||(!1!==(t=isArrayLike$1(e))?!arrayTypeHandler({arg:r},t):!combineFn(e)(r))})).length)})).length}return!1},objectTypeHandler=function(e){var t=e.arg,r=e.param,n=[t];return Array.isArray(r.keys)&&r.keys.length&&n.push(r.keys),checkIsObject.apply(null,n)};function log(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];try{window&&window.console&&Reflect.apply(console.log,console,e)}catch(e){}}var optionalHandler=function(e){var t=e.arg,r=e.param;return!!notEmpty(t)&&!(r.type.length>r.type.filter((function(t){return validateHandler(t,e)})).length)},validateHandler=function(e,t){var r;switch(!0){case e===OBJECT_TYPE$1:return!objectTypeHandler(t);case e===ARRAY_TYPE$1:return!checkIsArray(t.arg);case!1!==(r=isArrayLike$1(e)):return!arrayTypeHandler(t,r);default:return!combineFn(e)(t.arg)}},getOptionalValue=function(e,t){return isUndefined(e)?!0!==t.optional||isUndefined(t.defaultvalue)?null:t.defaultvalue:e},normalizeArgs=function(e,t){if(!checkIsArray(t))throw new JsonqlError(PARAMS_NOT_ARRAY_ERR);if(0===t.length)return[];if(!checkIsArray(e))throw new JsonqlError(ARGS_NOT_ARRAY_ERR);switch(!0){case e.length==t.length:return log(1),e.map((function(e,r){return{arg:e,index:r,param:t[r]}}));case!0===t[0].variable:log(2);var r=t[0].type;return e.map((function(e,n){return{arg:e,index:n,param:t[n]||{type:r,name:"_"}}}));case e.lengtht.length:log(4);var n=t.length,o=[DEFAULT_TYPE$1];return e.map((function(e,r){var a=r>=n||!!t[r].optional,i=t[r]||{type:o,name:"_"+r};return{arg:a?getOptionalValue(e,i):e,index:r,param:i,optional:a}}));default:throw log(5),new JsonqlError(EXCEPTION_CASE_ERR,{args:e,params:t})}},processReturn=function(e){return e.map((function(e){return e.arg}))},validateSync=function(e,t,r){var n;void 0===r&&(r=!1);var o=normalizeArgs(e,t),a=o.filter((function(e){return!0===e.optional||!0===e.param.optional?optionalHandler(e):!(e.param.type.length>e.param.type.filter((function(t){return validateHandler(t,e)})).length)}));return r?((n={})[ERROR_KEY]=a,n[DATA_KEY]=processReturn(o),n):a},validateAsync=function(e,t,r){return void 0===r&&(r=!1),new Promise((function(n,o){var a=validateSync(e,t,r);return r?a[ERROR_KEY].length?o(a[ERROR_KEY]):n(a[DATA_KEY]):a.length?o(a):n([])}))},isInArray=function(e,t){return!!e.filter((function(e){return e===t})).length},isKeyInObject=function(e,t){var r=Object.keys(e);return isInArray(r,t)},isEmpty=function(e){return!notEmpty(e)};function mapAliasConfigKeys(e,t){var r=omitBy(t,(function(e,t){return!e[ALIAS_KEY$1]}));return isEqual(r,{})?e:mapKeys(e,(function(e,t){return findKey(r,(function(e){return e.alias===t}))||t}))}function preservePristineValues(e,t){var r=mapAliasConfigKeys(e,t);return{pristineValues:mapValues(omitBy(t,(function(e,t){return isKeyInObject(r,t)})),(function(e){return e.args})),checkAgainstAppProps:omitBy(t,(function(e,t){return!isKeyInObject(r,t)})),config:r}}function processConfigAction(e,t){return mapValues(t,(function(t,r){var n,o;return isUndefined(e[r])||!0===t[OPTIONAL_KEY$1]&&isEmpty(e[r])?merge({},t,((n={})[KEY_WORD$1]=!0,n)):((o={})[ARGS_KEY$1]=e[r],o[TYPE_KEY$1]=t[TYPE_KEY$1],o[OPTIONAL_KEY$1]=t[OPTIONAL_KEY$1]||!1,o[ENUM_KEY$1]=t[ENUM_KEY$1]||!1,o[CHECKER_KEY$1]=t[CHECKER_KEY$1]||!1,o)}))}function prepareArgsForValidation(e,t){var r=preservePristineValues(e,t),n=r.config,o=r.pristineValues;return[processConfigAction(n,r.checkAgainstAppProps),o]}var toArray$1=function(e){return checkIsArray(e)?e:[e]},inArray$1=function(e,t){return!!e.filter((function(e){return e===t})).length};function validateHandler$1(e,t){var r,n=[[e[ARGS_KEY$1]],[(r={},r[TYPE_KEY$1]=toArray$1(e[TYPE_KEY$1]),r[OPTIONAL_KEY$1]=e[OPTIONAL_KEY$1],r)]];return Reflect.apply(t,null,n)}var enumHandler=function(e,t){return!checkIsArray(t)||inArray$1(t,e)},checkerHandler=function(e,t){try{return!!isFunction(t)&&t.apply(null,[e])}catch(e){return!1}};function runValidationAction(e){return function(t,r){if(t[KEY_WORD$1])return t[ARGS_KEY$1];var n=validateHandler$1(t,e);if(n.length)throw log("runValidationAction",r,t),new JsonqlTypeError(r,n);if(!1!==t[ENUM_KEY$1]&&!enumHandler(t[ARGS_KEY$1],t[ENUM_KEY$1]))throw log(ENUM_KEY$1,t[ENUM_KEY$1]),new JsonqlEnumError(r);if(!1!==t[CHECKER_KEY$1]&&!checkerHandler(t[ARGS_KEY$1],t[CHECKER_KEY$1]))throw log(CHECKER_KEY$1,t[CHECKER_KEY$1]),new JsonqlCheckerError(r);return t[ARGS_KEY$1]}}function runValidation(e,t){var r=e[0],n=e[1],o=mapValues(r,runValidationAction(t));return merge(o,n)}var configToArgs=function(e,t){return Promise.resolve(prepareArgsForValidation(e,t))};function checkOptionsAsync(e,t,r,n){return void 0===e&&(e={}),configToArgs(e,t).then((function(e){return runValidation(e,n)})).then((function(e){return merge({},e,r)}))}function constructConfigFn(e,t,r,n,o,a){void 0===r&&(r=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===a&&(a=!1);var i={};return i[ARGS_KEY]=e,i[TYPE_KEY]=t,!0===r&&(i[OPTIONAL_KEY]=!0),checkIsArray(n)&&(i[ENUM_KEY]=n),isFunction(o)&&(i[CHECKER_KEY]=o),isString(a)&&(i[ALIAS_KEY]=a),i}var createConfig=function(e,t,r){void 0===r&&(r={});var n=r[OPTIONAL_KEY],o=r[ENUM_KEY],a=r[CHECKER_KEY],i=r[ALIAS_KEY];return constructConfigFn.apply(null,[e,t,n,o,a,i])},checkConfigAsync=function(e){return function(t,r,n){return void 0===n&&(n={}),checkOptionsAsync(t,r,n,e)}},isString$1=checkIsString,validateAsync$1=validateAsync,createConfig$1=createConfig,checkConfigAsync$1=checkConfigAsync(validateSync),BASE_NAME="jsonql-ws-client",getDebug=function(e){try{if(window.debug)return window.debug(BASE_NAME).extend(e)}catch(e){}try{if(global$1.debug)return global$1.debug(BASE_NAME).extend(e)}catch(e){}return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];console.info.apply(null,[BASE_NAME,e].concat(t))}};try{window&&window.localStorage&&window.DEBUG&&localStorage.setItem("DEBUG",BASE_NAME+"*")}catch(e){}var NB_EVENT_SERVICE_PRIVATE_STORE=new WeakMap,NB_EVENT_SERVICE_PRIVATE_LAZY=new WeakMap;function hashCode(e){return e.split("").reduce((function(e,t){return(e=(e<<5)-e+t.charCodeAt(0))&e}),0)}var SuspendClass=function(){this.__suspend__=null,this.queueStore=new Set},prototypeAccessors={$suspend:{configurable:!0},$queues:{configurable:!0}};prototypeAccessors.$suspend.set=function(e){var t=this;if("boolean"!=typeof e)throw new Error("$suspend only accept Boolean value!");var r=this.__suspend__;this.__suspend__=e,this.logger("($suspend)","Change from "+r+" --\x3e "+e),!0===r&&!1===e&&setTimeout((function(){t.release()}),1)},SuspendClass.prototype.$queue=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return!0===this.__suspend__&&(this.logger("($queue)","added to $queue",e),this.queueStore.add(e)),this.__suspend__},prototypeAccessors.$queues.get=function(){var e=this.queueStore.size;return this.logger("($queues)","size: "+e),e>0?Array.from(this.queueStore):[]},SuspendClass.prototype.release=function(){var e=this,t=this.queueStore.size;if(this.logger("(release)","Release was called "+t),t>0){var r=Array.from(this.queueStore);this.queueStore.clear(),this.logger("queue",r),r.forEach((function(t){e.logger(t),Reflect.apply(e.$trigger,e,t)})),this.logger("Release size "+this.queueStore.size)}},Object.defineProperties(SuspendClass.prototype,prototypeAccessors);var NbEventServiceBase=function(e){function t(t){void 0===t&&(t={}),e.call(this),t.logger&&"function"==typeof t.logger&&(this.logger=t.logger),this.keep=t.keep,this.result=t.keep?[]:null,this.normalStore=new Map,this.lazyStore=new Map}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={normalStore:{configurable:!0},lazyStore:{configurable:!0}};return t.prototype.validateEvt=function(){for(var e=this,t=[],r=arguments.length;r--;)t[r]=arguments[r];return t.forEach((function(t){if("string"!=typeof t)throw e.logger("(validateEvt)",t),new Error("event name must be string type!")})),!0},t.prototype.validate=function(e,t){if(this.validateEvt(e)&&"function"==typeof t)return!0;throw new Error("callback required to be function type!")},t.prototype.validateType=function(e){return!!["on","only","once","onlyOnce"].filter((function(t){return e===t})).length},t.prototype.run=function(e,t,r){this.logger("(run)",e,t,r),this.$done=Reflect.apply(e,r,this.toArray(t))},t.prototype.takeFromStore=function(e,t){void 0===t&&(t="lazyStore");var r=this[t];if(r){if(this.logger("(takeFromStore)",t,r),r.has(e)){var n=r.get(e);return this.logger("(takeFromStore)","has "+e,n),r.delete(e),n}return!1}throw new Error(t+" is not supported!")},t.prototype.addToStore=function(e,t){for(var r,n=[],o=arguments.length-2;o-- >0;)n[o]=arguments[o+2];if(e.has(t)?(this.logger("(addToStore)",t+" existed"),r=e.get(t)):(this.logger("(addToStore)","create new Set for "+t),r=new Set),n.length>2)if(Array.isArray(n[0])){var a=n[2];this.checkTypeInLazyStore(t,a)||r.add(n)}else this.checkContentExist(n,r)||(this.logger("(addToStore)","insert new",n),r.add(n));else r.add(n);return e.set(t,r),[e,r.size]},t.prototype.checkContentExist=function(e,t){return!!Array.from(t).filter((function(t){return t[0]===e[0]})).length},t.prototype.checkTypeInStore=function(e,t){this.validateEvt(e,t);var r=this.$get(e,!0);return!1===r||!r.filter((function(e){var r=e[3];return t!==r})).length},t.prototype.checkTypeInLazyStore=function(e,t){this.validateEvt(e,t);var r=this.lazyStore.get(e);return this.logger("(checkTypeInLazyStore)",r),!!r&&!!Array.from(r).filter((function(e){return e[2]!==t})).length},t.prototype.addToNormalStore=function(e,t,r,n){if(void 0===n&&(n=null),this.logger("(addToNormalStore)",e,t,"try to add to normal store"),this.checkTypeInStore(e,t)){this.logger("(addToNormalStore)",t+" can add to "+e+" normal store");var o=this.hashFnToKey(r),a=[this.normalStore,e,o,r,n,t],i=Reflect.apply(this.addToStore,this,a),s=i[0],c=i[1];return this.normalStore=s,c}return!1},t.prototype.addToLazyStore=function(e,t,r,n){void 0===t&&(t=[]),void 0===r&&(r=null),void 0===n&&(n=!1);var o=[this.lazyStore,e,this.toArray(t),r];n&&o.push(n);var a=Reflect.apply(this.addToStore,this,o),i=a[0],s=a[1];return this.lazyStore=i,s},t.prototype.toArray=function(e){return Array.isArray(e)?e:[e]},r.normalStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_STORE.set(this,e)},r.normalStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_STORE.get(this)},r.lazyStore.set=function(e){NB_EVENT_SERVICE_PRIVATE_LAZY.set(this,e)},r.lazyStore.get=function(){return NB_EVENT_SERVICE_PRIVATE_LAZY.get(this)},t.prototype.hashFnToKey=function(e){return hashCode(e.toString())+""},Object.defineProperties(t.prototype,r),t}(SuspendClass),EventService=function(e){function t(t){void 0===t&&(t={}),e.call(this,t)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var r={$done:{configurable:!0}};return t.prototype.logger=function(){},t.prototype.$on=function(e,t,r){var n=this;void 0===r&&(r=null);this.validate(e,t);var o=this.takeFromStore(e);if(!1===o)return this.logger("($on)",e+" callback is not in lazy store"),this.addToNormalStore(e,"on",t,r);this.logger("($on)",e+" found in lazy store");var a=0;return o.forEach((function(o){var i=o[0],s=o[1],c=o[2];if(c&&"on"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);n.logger("($on)","call run on "+e),n.run(t,i,r||s),a+=n.addToNormalStore(e,"on",t,r||s)})),a},t.prototype.$once=function(e,t,r){void 0===r&&(r=null),this.validate(e,t);var n=this.takeFromStore(e);this.normalStore;if(!1===n)return this.logger("($once)",e+" not in the lazy store"),this.addToNormalStore(e,"once",t,r);this.logger("($once)",n);var o=Array.from(n)[0],a=o[0],i=o[1],s=o[2];if(s&&"once"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);this.logger("($once)","call run for "+e),this.run(t,a,r||i),this.$off(e)},t.prototype.$only=function(e,t,r){var n=this;void 0===r&&(r=null),this.validate(e,t);var o=!1,a=this.takeFromStore(e);(this.normalStore.has(e)||(this.logger("($only)",e+" add to store"),o=this.addToNormalStore(e,"only",t,r)),!1!==a)&&(this.logger("($only)",e+" found data in lazy store to execute"),Array.from(a).forEach((function(o){var a=o[0],i=o[1],s=o[2];if(s&&"only"!==s)throw new Error("You are trying to register an event already been taken by other type: "+s);n.logger("($only)","call run for "+e),n.run(t,a,r||i)})));return o},t.prototype.$onlyOnce=function(e,t,r){void 0===r&&(r=null),this.validate(e,t);var n=!1,o=this.takeFromStore(e);if(this.normalStore.has(e)||(this.logger("($onlyOnce)",e+" add to store"),n=this.addToNormalStore(e,"onlyOnce",t,r)),!1!==o){this.logger("($onlyOnce)",o);var a=Array.from(o)[0],i=a[0],s=a[1],c=a[2];if(c&&"onlyOnce"!==c)throw new Error("You are trying to register an event already been taken by other type: "+c);this.logger("($onlyOnce)","call run for "+e),this.run(t,i,r||s),this.$off(e)}return n},t.prototype.$replace=function(e,t,r,n){if(void 0===r&&(r=null),void 0===n&&(n="on"),this.validateType(n)){this.$off(e);var o=this["$"+n];return this.logger("($replace)",e,t),Reflect.apply(o,this,[e,t,r])}throw new Error(n+" is not supported!")},t.prototype.$trigger=function(e,t,r,n){void 0===t&&(t=[]),void 0===r&&(r=null),void 0===n&&(n=!1),this.validateEvt(e);var o=0,a=this.normalStore;if(this.logger("($trigger)","normalStore",a),a.has(e)){var i=this.$queue(e,t,r,n);if(this.logger("($trigger)",e,"found; add to queue: ",i),!0===i)return this.logger("($trigger)",e,"not executed. Exit now."),!1;for(var s=Array.from(a.get(e)),c=s.length,u=!1,l=0;l-1?t.indexOf("https")>-1?t.replace("https","wss"):t.replace("http","ws"):t};function createWsClient(e,t){return void 0===t&&(t=!1),!1===t?function(t){return new e(fixWss$1(t))}:function(t,r){var n=fixWss$1(t),o=r&&"string"==typeof r?n+"?"+TOKEN_PARAM_NAME+"="+r:n;try{return new e(o)}catch(e){return console.error("WebSocket Connection Error",e),!1}}}function createNspClient(e,t){var r=t.hostname,n=t.wssPath,o=t.wsOptions;return(0,t.nspClient)(e?[r,e].join("/"):n,o)}function createNspAuthClient(e,t){var r=t.hostname,n=t.wssPath,o=t.token,a=t.wsOptions,i=t.nspAuthClient,s=e?[r,e].join("/"):n;if(o&&"string"!=typeof o)throw new Error("Expect token to be string, but got "+o);return i(s,o,a)}function triggerNamespacesOnError(e,t,r,n){void 0===n&&(n={});var o=n.useCallbackStyle?ERROR_PROP_NAME:ON_ERROR_PROP_NAME$1;t.forEach((function(t){e.$call(createEvt(t,o),[{message:r,namespace:t}])}))}var debugFn$7=getDebug("client-event-handler"),notLoginWsHandler=function(e,t,r){var n=r.useCallbackStyle,o=n?ERROR_PROP_NAME:ON_ERROR_PROP_NAME$1,a=n?RESULT_PROP_NAME:ON_RESULT_PROP_NAME$1;t.$only(createEvt(e,EMIT_EVT),(function(r,n){debugFn$7("noLoginHandler hijack the ws call",e,r,n);var i={message:NOT_LOGIN_ERR_MSG};t.$call(createEvt(e,r,o),[i]),t.$call(createEvt(e,r,a),[{error:i}])}))},getPrivateNamespace=function(e){return e.length>1&&e[0]};function clientEventHandler(e,t,r,n,o,a){var i=getPrivateNamespace(o),s=!1;o.forEach((function(o){if(s=i===o,a[o]){debugFn$7("call bindWsHandler",s,o);var c=[o,a[o],r,s,e];if(e.serverType===SOCKET_IO){var u=t.nspSet;c.push(u[o])}Reflect.apply(n,null,c)}else notLoginWsHandler(o,r,e)})),r.$on(LOGOUT_EVENT_NAME,(function(){debugFn$7("LOGOUT_EVENT_NAME"),triggerNamespacesOnError(r,o,LOGOUT_EVENT_NAME),o.forEach((function(t){clearMainEmitEvt(r,t),a[t]=!1,notLoginWsHandler(t,r,e)}))}))}var keys$1=[WS_REPLY_TYPE,WS_EVT_NAME,WS_DATA_NAME],isWsReply=function(e){var t=e.data;return!!t&&(keys$1.filter((function(e){return isObjectHasKey(t,e)})).length===keys$1.length&&t)},extractWsPayload=function(e){var t,r=e.data,n=isString$1(r)?JSON.parse(r):r;if(!1!==(t=isWsReply(n)))return{resolverName:t[WS_EVT_NAME],data:t[WS_DATA_NAME],type:t[WS_REPLY_TYPE]};throw new JsonqlError("payload can not be decoded",e)},debugFn$8=getDebug("ws-main-handler"),errorTypeHandler=function(e,t,r,n,o){var a=[t];r&&(debugFn$8("a global error on "+t),a.push(r)),a.push(o);var i=Reflect.apply(createEvt,null,a),s=n.data||n;e.$trigger(i,[s])};function wsMainHandler(e,t,r,n,o){var a=o.useCallbackStyle,i=a?READY_PROP_NAME$1:ON_READY_PROP_NAME,s=a?LOGIN_PROP_NAME:ON_LOGIN_PROP_NAME,c=a?MESSAGE_PROP_NAME:ON_MESSAGE_PROP_NAME$1,u=a?RESULT_PROP_NAME:ON_RESULT_PROP_NAME$1,l=a?ERROR_PROP_NAME:ON_ERROR_PROP_NAME$1;t.onopen=function(){debugFn$8("ws.onopen listened"),r.$call(i,e),n&&(console.log("isPrivate and fire the "+s),r.$call(s,e)),r.$only(createEvt(e,EMIT_REPLY_TYPE),(function(e,r){debugFn$8("calling server",e,r),t.send(createQueryStr(e,r))}))},t.onmessage=function(t){try{var n=extractWsPayload(t),o=n.resolverName,a=n.type;switch(debugFn$8("Hear from server",a,n),a){case EMIT_REPLY_TYPE:var i=createEvt(e,o,c),s=r.$trigger(i,[n]);debugFn$8("EMIT_REPLY_TYPE",i,s);break;case ACKNOWLEDGE_REPLY_TYPE:var f=createEvt(e,o,u);r.$trigger(f,[n]);debugFn$8("ACKNOWLEDGE_REPLY_TYPE",f,n);break;case ERROR_TYPE:debugFn$8("ERROR_TYPE"),errorTypeHandler(r,e,o,n,l);break;default:debugFn$8("Unhandled event!",n),errorTypeHandler(r,e,o,n,l)}}catch(t){console.error("ws.onmessage error",t),errorTypeHandler(r,e,!1,t,l)}},t.onclose=function(){debugFn$8("ws.onclose callback")},r.$on(LOGOUT_EVENT_NAME,(function(){try{debugFn$8("terminate ws connection"),t.terminate()}catch(e){console.error("ws.terminate error",e)}}))}var debugFn$9=getDebug("ws-create-client"),createNsps=function(e,t,r){var n=t.nspSet,o=t.publicNamespace,a=!1,i=[],s={};if(e.enableAuth)a=!0,s=(i=getNamespaceInOrder(n,o)).map((function(t,n){var o,a,i;return 0===n?r?(e.token=r,(o={})[t]=createNspAuthClient(t,e),o):((a={})[t]=!1,a):((i={})[t]=createNspClient(t,e),i)})).reduce((function(e,t){return Object.assign(e,t)}),{});else{var c=getNameFromPayload(n);i.push(c),s[c]=createNspClient(!1,e)}return{nsps:s,namespaces:i,login:a}};function createClient(e,t,r){var n=[e,t,r,wsMainHandler],o=e.token,a=createNsps(e,t,o),i=a.nsps,s=a.namespaces,c=a.login;return Reflect.apply(clientEventHandler,null,n.concat([s,i])),c&&r.$only(LOGIN_EVENT_NAME,(function(o){debugFn$9("LOGIN_EVENT_NAME called with token:",o),clearMainEmitEvt(r,s);var a=createNsps(e,t,o);Reflect.apply(clientEventHandler,null,n.concat([a.namespaces,a.nsps]))})),{opts:e,nspMap:t,ee:r}}function createClientResolver(e){var t=createWsClient(e),r=createWsClient(e,!0);return function(e,n,o){return e.nspClient=t,e.nspAuthClient=r,createClient(e,n,o)}}var wsClientResolver=createClientResolver(WebSocket),node=wsClient(wsClientResolver,constProps);module.exports=node; //# sourceMappingURL=node.js.map diff --git a/packages/@jsonql/ws/package.json b/packages/@jsonql/ws/package.json index f70cc93b9280397db62ae97e6e90e07b79f63679..646de64b9bf15cb95371c250902f0392a9f001fe 100644 --- a/packages/@jsonql/ws/package.json +++ b/packages/@jsonql/ws/package.json @@ -1,6 +1,6 @@ { "name": "@jsonql/ws", - "version": "0.8.2", + "version": "0.8.3", "description": "WS (WebSocket) jsonql client module for browser / node", "main": "node.js", "browser": "dist/jsonql-ws.umd.js", @@ -34,15 +34,15 @@ "server", "node" ], - "author": "Joel Chu ", + "author": "Joel Chu ", "license": "ISC", "homepage": "jsonql.org", "dependencies": { - "jsonql-constants": "^1.8.9", - "jsonql-errors": "^1.1.3", - "jsonql-jwt": "^1.3.3", + "jsonql-constants": "^1.8.10", + "jsonql-errors": "^1.1.6", + "jsonql-jwt": "^1.3.4", "jsonql-params-validator": "^1.4.11", - "jsonql-utils": "^0.8.3", + "jsonql-utils": "^0.8.4", "jsonql-ws-client": "^1.3.3", "ws": "^7.2.0" }, @@ -50,14 +50,14 @@ "ava": "^2.4.0", "esm": "^3.2.25", "fs-extra": "^8.1.0", - "glob": "^7.1.5", - "jsonql-contract": "^1.7.22", - "jsonql-koa": "^1.3.11", - "jsonql-ws-server": "^1.3.5", + "glob": "^7.1.6", + "jsonql-contract": "^1.8.4", + "jsonql-koa": "^1.4.12", + "jsonql-ws-server": "^1.4.3", "kefir": "^3.8.6", "koa": "^2.11.0", "koa-bodyparser": "^4.2.1", - "rollup": "^1.26.3", + "rollup": "^1.26.5", "rollup-plugin-alias": "^2.2.0", "rollup-plugin-async": "^1.2.0", "rollup-plugin-buble": "^0.19.8", diff --git a/packages/@jsonql/ws/src/core/create-client.js b/packages/@jsonql/ws/src/core/create-client.js index 44819e7d9123909cf5cbbaa4cba953397314b66f..465f3fe4342ff2f3dfcf7aab2ce30b04104fedf6 100644 --- a/packages/@jsonql/ws/src/core/create-client.js +++ b/packages/@jsonql/ws/src/core/create-client.js @@ -28,7 +28,7 @@ const createNsps = function(opts, nspMap, token) { let namespaces = []; let nsps = {}; // first we need to binding all the events handler - if (opts.enableAuth && opts.useJwt) { + if (opts.enableAuth) { // && opts.useJwt login = true; // just saying we need to listen to login event namespaces = getNamespaceInOrder(nspSet, publicNamespace) nsps = namespaces.map((namespace, i) => { @@ -72,6 +72,7 @@ export function createClient(opts, nspMap, ee) { // setup listener if (login) { ee.$only(LOGIN_EVENT_NAME, function loginEventHandler(tokenLater) { + debugFn(`LOGIN_EVENT_NAME called with token:`, tokenLater) // @BUG this keep causing an "Disconnect call failed TypeError: Cannot read property 'readyState' of null" // I think that is because it's not login then it can not be disconnect // how do we track this state globally diff --git a/packages/node-client/package.json b/packages/node-client/package.json index 1a049a72d612a8bad01cd6f6ae5080e9b017929d..f8edc7500806d26caa9e95432f0f7298ec04c9d0 100755 --- a/packages/node-client/package.json +++ b/packages/node-client/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-node-client", - "version": "1.2.2", + "version": "1.2.3", "description": "jsonql node.js client", "main": "index.js", "scripts": { @@ -41,23 +41,25 @@ ], "license": "MIT", "dependencies": { - "@jsonql/ws": "^0.8.2", "debug": "^4.1.1", "fs-extra": "^8.1.0", - "jsonql-constants": "^1.8.9", - "jsonql-errors": "^1.1.5", - "jsonql-jwt": "^1.3.3", + "jsonql-constants": "^1.8.10", + "jsonql-errors": "^1.1.6", + "jsonql-jwt": "^1.3.4", "jsonql-params-validator": "^1.4.11", - "jsonql-utils": "^0.8.3", + "jsonql-utils": "^0.8.4", "lodash.merge": "^4.6.2", "node-cache": "^5.0.1", "request": "^2.88.0" }, + "optionalDependencies": { + "@jsonql/ws": "^0.8.2" + }, "devDependencies": { "ava": "^2.4.0", "jsonql-contract": "^1.8.4", - "jsonql-koa": "^1.4.2", - "jsonql-ws-server": "^1.3.6", + "jsonql-koa": "^1.4.12", + "jsonql-ws-server": "^1.4.3", "nyc": "^14.1.1", "server-io-core": "^1.2.0", "superkoa": "^1.0.3" diff --git a/packages/node-client/src/base/jsonql-auth-cls.js b/packages/node-client/src/base/jsonql-auth-cls.js index ff88c7c8b5df0ec593118fc70e40b4f9a218c986..d6b7e76a292dab3ef9ec3c0440f7c2d29fb9a135 100644 --- a/packages/node-client/src/base/jsonql-auth-cls.js +++ b/packages/node-client/src/base/jsonql-auth-cls.js @@ -50,6 +50,7 @@ class JsonqlAuthClient extends JsonqlRequestClient { * @return {string} the token */ loginCallback(token) { + debug(`loginCallback called`) this.token = token; this.eventEmitter.$trigger(LOGIN_EVENT_NAME, token) return token; diff --git a/packages/node-client/src/options/index.js b/packages/node-client/src/options/index.js index a5a8101705d65bffaadfe5b34912fc37154ad3a2..b0e250fd33d45e81994fc0b5cdbfc46f31987467 100755 --- a/packages/node-client/src/options/index.js +++ b/packages/node-client/src/options/index.js @@ -5,7 +5,7 @@ const { createConfig, checkConfigAsync } = require('jsonql-params-validator') -const { getDebug } = require('../utils') +const { getDebug, injectToFn } = require('../utils') const debug = getDebug('options') const { JSONQL_PATH, @@ -33,7 +33,8 @@ const { // for socket client JS_WS_NAME, JS_WS_SOCKET_IO_NAME, - JS_PRIMUS_NAME + JS_PRIMUS_NAME, + CHECKED_KEY } = require('jsonql-constants') const BASE_DIR = process.cwd() @@ -86,6 +87,7 @@ module.exports = function(config) { return checkConfigAsync(config, appProps, constProps) .then(opts => { opts.contract = contract; - return opts; + // 1.2.3 add a CHECKED_KEY to the opts so the ws client will know it's part of nodeClient + return injectToFn(opts, CHECKED_KEY, Date.now()) }) } diff --git a/packages/node-client/tests/config.test.js b/packages/node-client/tests/config.test.js index 5b76917b9d23ae01f0550ae3da16576838ae07fa..f34aa217b24da8ccf4c2459bad43d49c7e855a41 100644 --- a/packages/node-client/tests/config.test.js +++ b/packages/node-client/tests/config.test.js @@ -5,6 +5,9 @@ const { checkOptions } = require('../src') let contractDir = join(__dirname, 'fixtures', 'contract', 'tmp') let hostname = 'http://localhost:8899'; let contractKey = 'what-wrong-with-you-mf'; +const { CHECKED_KEY } = require('jsonql-constants') +const { objHasProp } = require('jsonql-utils') + test('It should not throw Error', async t => { @@ -17,4 +20,6 @@ test('It should not throw Error', async t => { t.is(opts.contractKey, contractKey) t.falsy(opts.optionNotInList) + + t.truthy(objHasProp, CHECKED_KEY) }) diff --git a/packages/node-client/tests/fixtures/contract/server-with-auth/contract.json b/packages/node-client/tests/fixtures/contract/server-with-auth/contract.json new file mode 100644 index 0000000000000000000000000000000000000000..7a31268001e1c53e708d126f4a91e9e9338b3a58 --- /dev/null +++ b/packages/node-client/tests/fixtures/contract/server-with-auth/contract.json @@ -0,0 +1,147 @@ +{ + "query": { + "getUser": { + "file": "/home/joel/projects/open-source/jsonql/packages/node-client/tests/fixtures/resolvers/query/get-user.js", + "description": "get user call", + "params": [ + { + "type": [ + "number" + ], + "name": "id", + "description": "user id" + } + ], + "returns": [ + { + "type": [ + "object", + "string" + ], + "description": "user object on ok" + } + ] + } + }, + "mutation": { + "sendUser": { + "file": "/home/joel/projects/open-source/jsonql/packages/node-client/tests/fixtures/resolvers/mutation/send-user.js", + "description": false, + "params": [ + { + "type": [ + "object" + ], + "name": "payload" + }, + { + "type": [ + "object" + ], + "name": "condition" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "two merge together" + } + ] + } + }, + "auth": { + "login": { + "file": "/home/joel/projects/open-source/jsonql/packages/node-client/tests/fixtures/resolvers/auth/login.js", + "description": "The login function", + "params": [ + { + "type": [ + "string" + ], + "name": "credential", + "description": "to check" + } + ], + "returns": [ + { + "type": [ + "boolean", + "string" + ], + "description": "string on ok" + } + ] + }, + "validator": { + "file": "/home/joel/projects/open-source/jsonql/packages/node-client/tests/fixtures/resolvers/auth/validator.js", + "description": "This is secondary valdiator provide by the developer", + "params": [ + { + "type": [ + "string" + ], + "name": "userToken" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "IT MUST RETURN AN OBJECT!!!" + } + ] + } + }, + "timestamp": 1573566754, + "sourceType": "script", + "socket": { + "gateway": { + "namespace": "jsonql/public", + "public": true, + "file": "/home/joel/projects/open-source/jsonql/packages/node-client/tests/fixtures/resolvers/socket/public/gateway.js", + "description": "tell the gateway what you want and wait for the broadcast", + "params": [ + { + "type": [ + "string" + ], + "name": "msg", + "description": "a message" + } + ], + "returns": [ + { + "type": [ + "string" + ], + "description": "the first will just say, hang on" + } + ] + }, + "secretChat": { + "namespace": "jsonql/private", + "file": "/home/joel/projects/open-source/jsonql/packages/node-client/tests/fixtures/resolvers/socket/secret-chat.js", + "description": "for testing the private socket interface", + "params": [ + { + "type": [ + "string" + ], + "name": "msg", + "description": "something you want to say" + } + ], + "returns": [ + { + "type": [ + "string" + ], + "description": "my reply" + } + ] + } + } +} diff --git a/packages/node-client/tests/fixtures/contract/server-with-auth/public-contract.json b/packages/node-client/tests/fixtures/contract/server-with-auth/public-contract.json new file mode 100644 index 0000000000000000000000000000000000000000..c0a9c8052cc8a615b4e316447a4efbdcaaebf0d7 --- /dev/null +++ b/packages/node-client/tests/fixtures/contract/server-with-auth/public-contract.json @@ -0,0 +1,131 @@ +{ + "query": { + "helloWorld": { + "description": "This is the stock resolver for testing purpose", + "params": [], + "returns": [ + { + "type": "string", + "description": "stock message" + } + ] + }, + "getUser": { + "description": "get user call", + "params": [ + { + "type": [ + "number" + ], + "name": "id", + "description": "user id" + } + ], + "returns": [ + { + "type": [ + "object", + "string" + ], + "description": "user object on ok" + } + ] + } + }, + "mutation": { + "sendUser": { + "description": false, + "params": [ + { + "type": [ + "object" + ], + "name": "payload" + }, + { + "type": [ + "object" + ], + "name": "condition" + } + ], + "returns": [ + { + "type": [ + "object" + ], + "description": "two merge together" + } + ] + } + }, + "auth": { + "login": { + "description": "The login function", + "params": [ + { + "type": [ + "string" + ], + "name": "credential", + "description": "to check" + } + ], + "returns": [ + { + "type": [ + "boolean", + "string" + ], + "description": "string on ok" + } + ] + } + }, + "timestamp": 1573566754, + "socket": { + "gateway": { + "namespace": "jsonql/public", + "public": true, + "description": "tell the gateway what you want and wait for the broadcast", + "params": [ + { + "type": [ + "string" + ], + "name": "msg", + "description": "a message" + } + ], + "returns": [ + { + "type": [ + "string" + ], + "description": "the first will just say, hang on" + } + ] + }, + "secretChat": { + "namespace": "jsonql/private", + "description": "for testing the private socket interface", + "params": [ + { + "type": [ + "string" + ], + "name": "msg", + "description": "something you want to say" + } + ], + "returns": [ + { + "type": [ + "string" + ], + "description": "my reply" + } + ] + } + } +} diff --git a/packages/node-client/tests/fixtures/server-with-socket.js b/packages/node-client/tests/fixtures/server-with-socket.js index 7e6b532b56ae55c49121fa5ecf69aaae2a37f893..9c967f815f1e06434f0c2fd2f0a67f445c845aa7 100644 --- a/packages/node-client/tests/fixtures/server-with-socket.js +++ b/packages/node-client/tests/fixtures/server-with-socket.js @@ -3,7 +3,7 @@ const { join } = require('path') const server = require('server-io-core') const jsonqlKoa = require('./jsonql-koa') -const jsonqlWsServer = require('jsonql-ws-server') +const { jsonqlWsServer } = require('jsonql-ws-server') // output module.exports = function serverWithSocket(extra = {}) { diff --git a/packages/ws-base/package.json b/packages/ws-base/package.json index 0aafe355e3dea1c1bbc3226a65ffdfeb74579af2..49b33a24fcb776b844f3995a25c8a980b16dabac 100644 --- a/packages/ws-base/package.json +++ b/packages/ws-base/package.json @@ -25,7 +25,7 @@ "WebSocket", "Primus" ], - "author": "Joel Chu ", + "author": "Joel Chu ", "license": "ISC", "ava": { "files": [ diff --git a/packages/ws-base/src/client/generator.js b/packages/ws-base/src/client/generator.js index 5549619c0155b0113345a0d843eee93d6767e7d0..c6d91eb5102e55afc39512642636b68052d18c23 100644 --- a/packages/ws-base/src/client/generator.js +++ b/packages/ws-base/src/client/generator.js @@ -1,3 +1,5 @@ +// DEPRECATED for reference ONLY + // generator resolvers // this will be a mini client server architect // The reason is when the enableAuth setup - the private route diff --git a/packages/ws-base/src/client/node/client-generator.js b/packages/ws-base/src/client/node/client-generator.js index 788a3153df2b53ac2182f4178dc6bba3c3b87027..54e2efd83efeae736a96c4ff685429bc47d9c66c 100644 --- a/packages/ws-base/src/client/node/client-generator.js +++ b/packages/ws-base/src/client/node/client-generator.js @@ -1,21 +1,5 @@ // client generator for node.js - -// @TODO move this out of the jsonql-jwt -/* -const { - socketIoNodeHandshakeLogin, - socketIoNodeRoundtripLogin, - socketIoNodeClientAsync -} = require('./socketio-client') - -const { - wsNodeClient, - wsNodeAuthClient -} = require('./ws-client') -*/ - const { chainPromises } = require('jsonql-jwt') - const { JsonqlError } = require('jsonql-errors') const { JS_WS_SOCKET_IO_NAME, JS_WS_NAME } = require('jsonql-constants') const { isString } = require('jsonql-params-validator') diff --git a/packages/ws-base/src/client/utils/get-debug.js b/packages/ws-base/src/client/utils/get-debug.js index d6615dcf8d3f47f655499a91e4fa3b6192440abb..f16764eefacfd0fc53674edaa41cdd540775fdcd 100644 --- a/packages/ws-base/src/client/utils/get-debug.js +++ b/packages/ws-base/src/client/utils/get-debug.js @@ -1,5 +1,6 @@ // not using the jsonql-utils version import debug from 'debug' +const MODULE_NAME = 'jsonql-ws-base' /** * Try to normalize it to use between browser and node * @param {string} name for the debug output @@ -7,15 +8,17 @@ import debug from 'debug' */ const getDebug = name => { if (debug) { - return debug('jsonql-ws-client').extend(name) + console.info(`using node debug`) + return debug(MODULE_NAME).extend(name) } return (...args) => { - console.info.apply(null, [name].concat(args)); + console.info.apply(null, [name].concat(args)) } } try { - if (window && window.localStorage) { - localStorage.setItem('DEBUG', 'jsonql-ws-client*'); + // only when we set a global DEBUG=true + if (window && window.DEBUG && window.localStorage) { + localStorage.setItem('DEBUG', `${MODULE_NAME}*`) } } catch(e) {} // export it diff --git a/packages/ws-client/src/core/respond-handler.js b/packages/ws-client/src/core/respond-handler.js index aff9443c463e66aed91654b0ba26e994cd151335..3996b2e32290eac8db5a025ead7fc032fceb287a 100644 --- a/packages/ws-client/src/core/respond-handler.js +++ b/packages/ws-client/src/core/respond-handler.js @@ -3,6 +3,7 @@ import { DATA_KEY, ERROR_KEY } from 'jsonql-constants' import { UNKNOWN_RESULT } from '../options/constants' import { getDebug, isObjectHasKey } from '../utils' const debugFn = getDebug('respondHandler') + /** * break out to use in different places to handle the return from server * @param {object} data from server diff --git a/packages/ws-server/package.json b/packages/ws-server/package.json index ff848fa6468aa520f2f97279aa269e7b6f00f8d5..4ad3d1659d29f277c07de014eb1988fc747ec536 100755 --- a/packages/ws-server/package.json +++ b/packages/ws-server/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-ws-server", - "version": "1.4.2", + "version": "1.4.3", "description": "Setup WebSocket server for the jsonql to run on the same host, automatic generate public / private channel using contract", "main": "index.js", "files": [ diff --git a/packages/ws-server/src/options/index.js b/packages/ws-server/src/options/index.js index 6970a2fe7b9416fba62a95d0377504df0be406ea..41b9a21219ba1b4e7613d3482e4dacf8814330da 100644 --- a/packages/ws-server/src/options/index.js +++ b/packages/ws-server/src/options/index.js @@ -88,7 +88,7 @@ const constProps = { * @return {object} checked opts */ function preCheck(config, defaultOptions, constProps) { - if (objHasProp(config, CHECKER_KEY)) { + if (objHasProp(config, CHECKED_KEY)) { debug('checked', config) return Promise.resolve(config) }