diff --git a/packages/constants/module.js b/packages/constants/module.js index 96e78747ba9f711be30cc8af1463fa104da62114..4a3bb53c541910b25d34273fef03f7231406cbee 100644 --- a/packages/constants/module.js +++ b/packages/constants/module.js @@ -23,9 +23,10 @@ export const DEFAULT_TYPE = 'any' // export const PUBLIC_FILE_NAME = 'public-contract.json' // @TODO remove once all changed export const DEFAULT_CONTRACT_FILE_NAME = 'contract.json' export const PUBLIC_CONTRACT_FILE_NAME = 'public-contract.json' -// this is for the ES6 module import and export +// this is for the ES6 module import and export @TODO remove later export const DEFAULT_RESOLVER_LIST_FILE_NAME = 'resolver.js' export const DEFAULT_RESOLVER_IMPORT_FILE_NAME = 'import.js' + export const MODULE_TYPE = 'module' export const SCRIPT_TYPE = 'script' @@ -128,29 +129,29 @@ export const NO_STATUS_CODE = -1 export const SWITCH_USER_EVENT_NAME = '__switch__' export const LOGIN_EVENT_NAME = '__login__' export const LOGOUT_EVENT_NAME = '__logout__' -// when ws switch on standalone mode then we add this event to allow +// when ws switch on standalone mode then we add this event to allow // perform a standalone login method export const SA_LOGIN_EVENT_NAME = '__standalone_login__' -// after the user issue the disconnect, then we need a reconnect +// after the user issue the disconnect, then we need a reconnect export const RECONNECT_EVENT_NAME = '__reconnect__' -// when we receive the token and decode the userdata +// when we receive the token and decode the userdata // we will inject two more properties into the userdata object export const SOCKET_CLIENT_ID_KEY = '__socket_client_id_key__' export const SOCKET_CLIENT_TS_KEY = '__socket_client_ts_key__' -// at the moment we only have __logout__ regardless enableAuth is enable -// this is incorrect, because logout suppose to come after login -// and it should only logout from auth nsp, instead of clear out the +// at the moment we only have __logout__ regardless enableAuth is enable +// this is incorrect, because logout suppose to come after login +// and it should only logout from auth nsp, instead of clear out the // connection, the following new event @1.9.2 will correct this edge case -// although it should never happens, but in some edge case might want to +// although it should never happens, but in some edge case might want to // disconnect from the current server, then re-establish connection later export const DISCONNECT_EVENT_NAME = '__disconnect__' -// group the inter communcation event name in one then for the server +// group the inter communcation event name in one then for the server // to create a handler to handle this kind of event export const INTER_COM_EVENT_NAME = '__inter_com__' export const INTER_COM_EVENT_NAMES = [ - SWITCH_USER_EVENT_NAME, + SWITCH_USER_EVENT_NAME, DISCONNECT_EVENT_NAME -] +] // for ws servers export const WS_REPLY_TYPE = '__reply__' export const WS_EVT_NAME = '__event__' @@ -168,12 +169,12 @@ export const JS_WS_SOCKET_IO_NAME = 'socket.io' export const JS_WS_NAME = 'ws' export const JS_PRIMUS_NAME = 'primus' export const GO_WS_COOLPY7_NAME = 'coolpy7' -// type name and Alias +// type name and Alias export const SOCKET_TYPE_KEY = 'serverType' //1.9.1 export const SOCKET_TYPE_CLIENT_ALIAS = 'socketClientType' // 1.9.0 -export const SOCKET_TYPE_SERVER_ALIAS = 'socketServerType' // 1.9.1 +export const SOCKET_TYPE_SERVER_ALIAS = 'socketServerType' // 1.9.1 -// for ws client, 1.9.3 breaking change to name them as FN instead of PROP +// for ws client, 1.9.3 breaking change to name them as FN instead of PROP export const ON_MESSAGE_FN_NAME = 'onMessage' export const ON_RESULT_FN_NAME = 'onResult' export const ON_ERROR_FN_NAME = 'onError' @@ -218,7 +219,7 @@ export const PRIVATE_KEY_NAME = 'privateKey' export const DEFAULT_PUBLIC_KEY_FILE = [PUBLIC_KEY_NAME, PEM_EXT].join('.') export const DEFAULT_PRIVATE_KEY_FILE = [PRIVATE_KEY_NAME, PEM_EXT].join('.') -// status +// status export const SUCCESS_STATUS = 200 export const UNAUTHORIZED_STATUS = 401 export const FORBIDDEN_STATUS = 403 diff --git a/packages/utils/browser.js b/packages/utils/browser.js index 6be14f063c48e73d825bfff8a8a60fc66b6caf3f..5c02c21a8404758e4c79758c73cd84d94d8be295 100644 --- a/packages/utils/browser.js +++ b/packages/utils/browser.js @@ -1,2 +1,2 @@ -!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((t=t||self).jsonqlUtils={})}(this,(function(t){"use strict";var r=Array.isArray,e="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},n="object"==typeof e&&e&&e.Object===Object&&e,o="object"==typeof self&&self&&self.Object===Object&&self,u=n||o||Function("return this")(),i=u.Symbol,a=Object.prototype,c=a.hasOwnProperty,f=a.toString,s=i?i.toStringTag:void 0;var l=Object.prototype.toString;var p=i?i.toStringTag:void 0;function v(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":p&&p in Object(t)?function(t){var r=c.call(t,s),e=t[s];try{t[s]=void 0;var n=!0}catch(t){}var o=f.call(t);return n&&(r?t[s]=e:delete t[s]),o}(t):function(t){return l.call(t)}(t)}var d,y,h=(d=Object.getPrototypeOf,y=Object,function(t){return d(y(t))});function g(t){return null!=t&&"object"==typeof t}var b=Function.prototype,_=Object.prototype,j=b.toString,m=_.hasOwnProperty,O=j.call(Object);function w(t){if(!g(t)||"[object Object]"!=v(t))return!1;var r=h(t);if(null===r)return!0;var e=m.call(r,"constructor")&&r.constructor;return"function"==typeof e&&e instanceof e&&j.call(e)==O}var S=i?i.prototype:void 0,P=S?S.toString:void 0;function A(t){if("string"==typeof t)return t;if(r(t))return function(t,r){for(var e=-1,n=null==t?0:t.length,o=Array(n);++e=n?t:function(t,r,e){var n=-1,o=t.length;r<0&&(r=-r>o?0:o+r),(e=e>o?o:e)<0&&(e+=o),o=r>e?0:e-r>>>0,r>>>=0;for(var u=Array(o);++n-1;);return e}(o,u),function(t,r){for(var e=t.length;e--&&z(r,t[e],0)>-1;);return e}(o,u)+1).join("")}var Q=function(t,r){return!!t.filter((function(t){return t===r})).length},V=function(t){return r(t)?t:[t]},G=function(t,r){try{var e=Object.keys(t);return Q(e,r)}catch(t){return!1}};function H(t,r){return t===r||t!=t&&r!=r}function L(t,r){for(var e=t.length;e--;)if(H(t[e][0],r))return e;return-1}var K=Array.prototype.splice;function W(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1},W.prototype.set=function(t,r){var e=this.__data__,n=L(e,t);return n<0?(++this.size,e.push([t,r])):e[n][1]=r,this};function X(t){if(!Z(t))return!1;var r=v(t);return"[object Function]"==r||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r}var Y,tt=u["__core-js_shared__"],rt=(Y=/[^.]+$/.exec(tt&&tt.keys&&tt.keys.IE_PROTO||""))?"Symbol(src)_1."+Y:"";var et=Function.prototype.toString;var nt=/^\[object .+?Constructor\]$/,ot=Function.prototype,ut=Object.prototype,it=ot.toString,at=ut.hasOwnProperty,ct=RegExp("^"+it.call(at).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ft(t){return!(!Z(t)||function(t){return!!rt&&rt in t}(t))&&(X(t)?ct:nt).test(function(t){if(null!=t){try{return et.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function st(t,r){var e=function(t,r){return null==t?void 0:t[r]}(t,r);return ft(e)?e:void 0}var lt=st(u,"Map"),pt=st(Object,"create");var vt=Object.prototype.hasOwnProperty;var dt=Object.prototype.hasOwnProperty;function yt(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1&&t%1==0&&t<=9007199254740991}function Bt(t){return null!=t&&qt(t.length)&&!X(t)}var $t="object"==typeof t&&t&&!t.nodeType&&t,Dt=$t&&"object"==typeof module&&module&&!module.nodeType&&module,It=Dt&&Dt.exports===$t?u.Buffer:void 0,Qt=(It?It.isBuffer:void 0)||function(){return!1},Vt={};Vt["[object Float32Array]"]=Vt["[object Float64Array]"]=Vt["[object Int8Array]"]=Vt["[object Int16Array]"]=Vt["[object Int32Array]"]=Vt["[object Uint8Array]"]=Vt["[object Uint8ClampedArray]"]=Vt["[object Uint16Array]"]=Vt["[object Uint32Array]"]=!0,Vt["[object Arguments]"]=Vt["[object Array]"]=Vt["[object ArrayBuffer]"]=Vt["[object Boolean]"]=Vt["[object DataView]"]=Vt["[object Date]"]=Vt["[object Error]"]=Vt["[object Function]"]=Vt["[object Map]"]=Vt["[object Number]"]=Vt["[object Object]"]=Vt["[object RegExp]"]=Vt["[object Set]"]=Vt["[object String]"]=Vt["[object WeakMap]"]=!1;var Gt="object"==typeof t&&t&&!t.nodeType&&t,Ht=Gt&&"object"==typeof module&&module&&!module.nodeType&&module,Lt=Ht&&Ht.exports===Gt&&n.process,Kt=function(){try{var t=Ht&&Ht.require&&Ht.require("util").types;return t||Lt&&Lt.binding&&Lt.binding("util")}catch(t){}}(),Wt=Kt&&Kt.isTypedArray,Zt=Wt?function(t){return function(r){return t(r)}}(Wt):function(t){return g(t)&&qt(t.length)&&!!Vt[v(t)]};function Xt(t,r){if(("constructor"!==r||"function"!=typeof t[r])&&"__proto__"!=r)return t[r]}var Yt=Object.prototype.hasOwnProperty;function tr(t,r,e){var n=t[r];Yt.call(t,r)&&H(n,e)&&(void 0!==e||r in t)||jt(t,r,e)}var rr=/^(?:0|[1-9]\d*)$/;function er(t,r){var e=typeof t;return!!(r=null==r?9007199254740991:r)&&("number"==e||"symbol"!=e&&rr.test(t))&&t>-1&&t%1==0&&t0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}(dr);function gr(t,r){return hr(function(t,r,e){return r=vr(void 0===r?t.length-1:r,0),function(){for(var n=arguments,o=-1,u=vr(n.length-r,0),i=Array(u);++o1?r[n-1]:void 0,u=n>2?r[2]:void 0;for(o=br.length>3&&"function"==typeof o?(n--,o):void 0,u&&function(t,r,e){if(!Z(e))return!1;var n=typeof r;return!!("number"==n?Bt(e)&&er(r,e.length):"string"==n&&r in e)&&H(e[r],t)}(r[0],r[1],u)&&(o=n<3?void 0:o,n=1),t=Object(t);++e0;)r[e]=arguments[e+1];return function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return r.reduce((function(t,r){return Reflect.apply(r,null,V(t))}),Reflect.apply(t,null,e))}},t.chainProcessPromises=function(t){for(var r=[],e=arguments.length-1;e-- >0;)r[e]=arguments[e+1];return function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return r.reduce((function(t,r){return t.then((function(t){return r(t)}))}),Reflect.apply(t,null,e))}},t.chainPromises=function(t,r){return void 0===r&&(r=!1),t.reduce((function(t,e){return t.then((function(t){return e.then((function(e){return!1===r?t.concat([e]):_r(t,e)}))}))}),Promise.resolve(!1===r?[]:w(r)?r:{}))},t.createEvt=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return t.join("_")},t.createMutation=Cr,t.createMutationStr=function(t,r,e,n){return void 0===e&&(e={}),void 0===n&&(n=!1),JSON.stringify(Cr(t,r,e,n))},t.createQuery=Jr,t.createQueryStr=function(t,r,e){return void 0===r&&(r=[]),void 0===e&&(e=!1),JSON.stringify(Jr(t,r,e))},t.dasherize=function(t){return I(t).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()},t.extractArgsFromPayload=function(t,r){switch(r){case"query":return t.args;case"mutation":return[t.payload,t.condition];default:throw new Sr("Unknown "+r+" to extract argument from!")}},t.extractParamsFromContract=function(t,r,e){try{var n=t[r][e];if(!n)throw new Or(e,r);return n}catch(t){throw new Or(e,t)}},t.extractSocketPart=Pr,t.formatPayload=Er,t.getCallMethod=function(t){switch(!0){case t===mr[0]:return"query";case t===mr[1]:return"mutation";default:return!1}},t.getConfigValue=function(t,r){return r&&w(r)&&t in r?r[t]:void 0},t.getMutationFromArgs=Ur,t.getMutationFromPayload=function(t){var r=Rr(t,Ur);if(!1!==r)return r;throw new wr("[getMutationArgs] Payload is malformed!",t)},t.getNameFromPayload=kr,t.getNamespaceInOrder=function(t,r){var e=[];for(var n in t)n===r?e[1]=n:e[0]=n;return e},t.getQueryFromArgs=Mr,t.getQueryFromPayload=function(t){var r=Rr(t,Mr);if(!1!==r)return r;throw new wr("[getQueryArgs] Payload is malformed!",t)},t.groupByNamespace=function(t,r){void 0===r&&(r=!1);var e=Pr(t);if(!1===e){if(r)return t;throw new Sr("socket not found in contract!")}var n,o={},u=0;for(var i in e){var a=e[i],c=a.namespace;c&&(o[c]||(++u,o[c]={}),o[c][i]=a,n||a.public&&(n=c))}return{size:u,nspSet:o,publicNamespace:n}},t.inArray=Q,t.injectToFn=function(t,r,e,n){void 0===n&&(n=!1);var o=jr(t,r);return!1===n&&void 0!==o||Object.defineProperty(t,r,{value:e,writable:n}),t},t.isContract=function(t){return!!function(t){return w(t)&&(G(t,"query")||G(t,"mutation")||G(t,"socket"))}(t)&&t},t.isFunc=function(t){if("function"==typeof t)return!0;console.error("Expect to be Function type! Got "+typeof t)},t.isJsonqlErrorObj=qr,t.isNotEmpty=function(t){return void 0!==t&&!1!==t&&null!==t&&""!==I(t)},t.isObjectHasKey=G,t.logger=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];try{window&&window.DEBUG&&Reflect.apply(console.log,console,t)}catch(t){}},t.objDefineProps=function(t,r,e,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(t,r)&&Object.defineProperty(t,r,{set:e,get:null===n?function(){return null}:n}),t},t.objHasProp=jr,t.packError=function(t,r,e,n){var o;void 0===r&&(r="JsonqlError"),void 0===e&&(e=0),void 0===n&&(n="");var u={detail:t,className:r,statusCode:e,message:n};return JSON.stringify(((o={}).error=qr(t)||u,o.TS=Ar(),o))},t.packResult=function(t,e){void 0===e&&(e=!1);var n={};return n.data=t,e&&r(e)&&(e.push(Ar()),n.TS=e),JSON.stringify(n)},t.resultHandler=function(t){return G(t,"data")&&!G(t,"error")?t.data:t},t.timestamp=Ar,t.toArray=V,t.toJson=function(t){return"string"==typeof t?function(t){try{return JSON.parse(t)}catch(r){return t}}(t):JSON.parse(JSON.stringify(t))},t.toPayload=Fr,t.urlParams=Nr,Object.defineProperty(t,"__esModule",{value:!0})})); +!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((t=t||self).jsonqlUtils={})}(this,(function(t){"use strict";var r=Array.isArray,e="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},n="object"==typeof e&&e&&e.Object===Object&&e,o="object"==typeof self&&self&&self.Object===Object&&self,u=n||o||Function("return this")(),i=u.Symbol,a=Object.prototype,c=a.hasOwnProperty,f=a.toString,s=i?i.toStringTag:void 0;var l=Object.prototype.toString;var p=i?i.toStringTag:void 0;function v(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":p&&p in Object(t)?function(t){var r=c.call(t,s),e=t[s];try{t[s]=void 0;var n=!0}catch(t){}var o=f.call(t);return n&&(r?t[s]=e:delete t[s]),o}(t):function(t){return l.call(t)}(t)}var d,y,h=(d=Object.getPrototypeOf,y=Object,function(t){return d(y(t))});function g(t){return null!=t&&"object"==typeof t}var b=Function.prototype,_=Object.prototype,j=b.toString,m=_.hasOwnProperty,O=j.call(Object);function w(t){if(!g(t)||"[object Object]"!=v(t))return!1;var r=h(t);if(null===r)return!0;var e=m.call(r,"constructor")&&r.constructor;return"function"==typeof e&&e instanceof e&&j.call(e)==O}var S=i?i.prototype:void 0,P=S?S.toString:void 0;function A(t){if("string"==typeof t)return t;if(r(t))return function(t,r){for(var e=-1,n=null==t?0:t.length,o=Array(n);++e=n?t:function(t,r,e){var n=-1,o=t.length;r<0&&(r=-r>o?0:o+r),(e=e>o?o:e)<0&&(e+=o),o=r>e?0:e-r>>>0,r>>>=0;for(var u=Array(o);++n-1;);return e}(o,u),function(t,r){for(var e=t.length;e--&&z(r,t[e],0)>-1;);return e}(o,u)+1).join("")}var Q=function(t,r){return!!t.filter((function(t){return t===r})).length},V=function(t){return r(t)?t:[t]},G=function(t,r){try{var e=Object.keys(t);return Q(e,r)}catch(t){return!1}};function H(t,r){return t===r||t!=t&&r!=r}function L(t,r){for(var e=t.length;e--;)if(H(t[e][0],r))return e;return-1}var K=Array.prototype.splice;function W(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1},W.prototype.set=function(t,r){var e=this.__data__,n=L(e,t);return n<0?(++this.size,e.push([t,r])):e[n][1]=r,this};function X(t){if(!Z(t))return!1;var r=v(t);return"[object Function]"==r||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r}var Y,tt=u["__core-js_shared__"],rt=(Y=/[^.]+$/.exec(tt&&tt.keys&&tt.keys.IE_PROTO||""))?"Symbol(src)_1."+Y:"";var et=Function.prototype.toString;var nt=/^\[object .+?Constructor\]$/,ot=Function.prototype,ut=Object.prototype,it=ot.toString,at=ut.hasOwnProperty,ct=RegExp("^"+it.call(at).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ft(t){return!(!Z(t)||function(t){return!!rt&&rt in t}(t))&&(X(t)?ct:nt).test(function(t){if(null!=t){try{return et.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function st(t,r){var e=function(t,r){return null==t?void 0:t[r]}(t,r);return ft(e)?e:void 0}var lt=st(u,"Map"),pt=st(Object,"create");var vt=Object.prototype.hasOwnProperty;var dt=Object.prototype.hasOwnProperty;function yt(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1&&t%1==0&&t<=9007199254740991}function Bt(t){return null!=t&&Ut(t.length)&&!X(t)}var $t="object"==typeof t&&t&&!t.nodeType&&t,Dt=$t&&"object"==typeof module&&module&&!module.nodeType&&module,It=Dt&&Dt.exports===$t?u.Buffer:void 0,Qt=(It?It.isBuffer:void 0)||function(){return!1},Vt={};Vt["[object Float32Array]"]=Vt["[object Float64Array]"]=Vt["[object Int8Array]"]=Vt["[object Int16Array]"]=Vt["[object Int32Array]"]=Vt["[object Uint8Array]"]=Vt["[object Uint8ClampedArray]"]=Vt["[object Uint16Array]"]=Vt["[object Uint32Array]"]=!0,Vt["[object Arguments]"]=Vt["[object Array]"]=Vt["[object ArrayBuffer]"]=Vt["[object Boolean]"]=Vt["[object DataView]"]=Vt["[object Date]"]=Vt["[object Error]"]=Vt["[object Function]"]=Vt["[object Map]"]=Vt["[object Number]"]=Vt["[object Object]"]=Vt["[object RegExp]"]=Vt["[object Set]"]=Vt["[object String]"]=Vt["[object WeakMap]"]=!1;var Gt="object"==typeof t&&t&&!t.nodeType&&t,Ht=Gt&&"object"==typeof module&&module&&!module.nodeType&&module,Lt=Ht&&Ht.exports===Gt&&n.process,Kt=function(){try{var t=Ht&&Ht.require&&Ht.require("util").types;return t||Lt&&Lt.binding&&Lt.binding("util")}catch(t){}}(),Wt=Kt&&Kt.isTypedArray,Zt=Wt?function(t){return function(r){return t(r)}}(Wt):function(t){return g(t)&&Ut(t.length)&&!!Vt[v(t)]};function Xt(t,r){if(("constructor"!==r||"function"!=typeof t[r])&&"__proto__"!=r)return t[r]}var Yt=Object.prototype.hasOwnProperty;function tr(t,r,e){var n=t[r];Yt.call(t,r)&&H(n,e)&&(void 0!==e||r in t)||jt(t,r,e)}var rr=/^(?:0|[1-9]\d*)$/;function er(t,r){var e=typeof t;return!!(r=null==r?9007199254740991:r)&&("number"==e||"symbol"!=e&&rr.test(t))&&t>-1&&t%1==0&&t0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}(dr);function gr(t,r){return hr(function(t,r,e){return r=vr(void 0===r?t.length-1:r,0),function(){for(var n=arguments,o=-1,u=vr(n.length-r,0),i=Array(u);++o1?r[n-1]:void 0,u=n>2?r[2]:void 0;for(o=br.length>3&&"function"==typeof o?(n--,o):void 0,u&&function(t,r,e){if(!Z(e))return!1;var n=typeof r;return!!("number"==n?Bt(e)&&er(r,e.length):"string"==n&&r in e)&&H(e[r],t)}(r[0],r[1],u)&&(o=n<3?void 0:o,n=1),t=Object(t);++e0;)r[e]=arguments[e+1];return function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return r.reduce((function(t,r){return Reflect.apply(r,null,V(t))}),Reflect.apply(t,null,e))}},t.chainProcessPromises=function(t){for(var r=[],e=arguments.length-1;e-- >0;)r[e]=arguments[e+1];return function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return r.reduce((function(t,r){return t.then((function(t){return r(t)}))}),Reflect.apply(t,null,e))}},t.chainPromises=function(t,r){return void 0===r&&(r=!1),t.reduce((function(t,e){return t.then((function(t){return e.then((function(e){return!1===r?t.concat([e]):_r(t,e)}))}))}),Promise.resolve(!1===r?[]:w(r)?r:{}))},t.createEvt=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return t.join("_")},t.createMutation=Mr,t.createMutationStr=function(t,r,e,n){return void 0===e&&(e={}),void 0===n&&(n=!1),JSON.stringify(Mr(t,r,e,n))},t.createQuery=Cr,t.createQueryStr=function(t,r,e){return void 0===r&&(r=[]),void 0===e&&(e=!1),JSON.stringify(Cr(t,r,e))},t.dasherize=function(t){return I(t).replace(/([A-Z])/g,"-$1").replace(/[-_\s]+/g,"-").toLowerCase()},t.extractArgsFromPayload=function(t,r){switch(r){case"query":return t.args;case"mutation":return[t.payload,t.condition];default:throw new Ar("Unknown "+r+" to extract argument from!")}},t.extractParamsFromContract=function(t,r,e){try{var n=t[r][e];if(!n)throw new Sr(e,r);return n}catch(t){throw new Sr(e,t)}},t.extractSocketPart=Nr,t.formatPayload=xr,t.getCallMethod=function(t){switch(!0){case t===mr[0]:return"query";case t===mr[1]:return"mutation";default:return!1}},t.getConfigValue=function(t,r){return r&&w(r)&&t in r?r[t]:void 0},t.getMutationFromArgs=Br,t.getMutationFromPayload=function(t){var r=Ur(t,Br);if(!1!==r)return r;throw new Pr("[getMutationArgs] Payload is malformed!",t)},t.getNameFromPayload=Jr,t.getNamespace=function(t){var r="jsonql";return t.enableAuth?[[r,Or].join("/"),[r,wr].join("/")]:[r]},t.getNamespaceInOrder=function(t,r){var e=[];for(var n in t)n===r?e[1]=n:e[0]=n;return e},t.getQueryFromArgs=Rr,t.getQueryFromPayload=function(t){var r=Ur(t,Rr);if(!1!==r)return r;throw new Pr("[getQueryArgs] Payload is malformed!",t)},t.groupByNamespace=function(t,r){void 0===r&&(r=!1);var e=Nr(t);if(!1===e){if(r)return t;throw new JsonqlError("groupByNamespace","socket not found in contract!")}var n,o={},u=0;for(var i in e){var a=e[i],c=a.namespace;c&&(o[c]||(++u,o[c]={}),o[c][i]=a,n||a[Or]&&(n=c))}return{size:u,nspSet:o,publicNamespace:n}},t.inArray=Q,t.injectToFn=function(t,r,e,n){void 0===n&&(n=!1);var o=jr(t,r);return!1===n&&void 0!==o||Object.defineProperty(t,r,{value:e,writable:n}),t},t.isContract=function(t){return!!function(t){return w(t)&&(G(t,"query")||G(t,"mutation")||G(t,"socket"))}(t)&&t},t.isFunc=function(t){if("function"==typeof t)return!0;console.error("Expect to be Function type! Got "+typeof t)},t.isJsonqlErrorObj=$r,t.isNotEmpty=function(t){return void 0!==t&&!1!==t&&null!==t&&""!==I(t)},t.isObjectHasKey=G,t.logger=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];try{window&&window.DEBUG&&Reflect.apply(console.log,console,t)}catch(t){}},t.objDefineProps=function(t,r,e,n){return void 0===n&&(n=null),void 0===Object.getOwnPropertyDescriptor(t,r)&&Object.defineProperty(t,r,{set:e,get:null===n?function(){return null}:n}),t},t.objHasProp=jr,t.packError=function(t,r,e,n){var o;void 0===r&&(r="JsonqlError"),void 0===e&&(e=0),void 0===n&&(n="");var u={detail:t,className:r,statusCode:e,message:n};return JSON.stringify(((o={}).error=$r(t)||u,o.TS=Tr(),o))},t.packResult=function(t,e){void 0===e&&(e=!1);var n={};return n.data=t,e&&r(e)&&(e.push(Tr()),n.TS=e),JSON.stringify(n)},t.resultHandler=function(t){return G(t,"data")&&!G(t,"error")?t.data:t},t.timestamp=Tr,t.toArray=V,t.toJson=function(t){return"string"==typeof t?function(t){try{return JSON.parse(t)}catch(r){return t}}(t):JSON.parse(JSON.stringify(t))},t.toPayload=kr,t.urlParams=zr,Object.defineProperty(t,"__esModule",{value:!0})})); //# sourceMappingURL=browser.js.map diff --git a/packages/utils/index.js b/packages/utils/index.js index b2c63d5557a0f46a41bbc8c65d48e0ce1d950e6a..153ade9eac03266104391685e37ff0384cfc015e 100644 --- a/packages/utils/index.js +++ b/packages/utils/index.js @@ -10,8 +10,6 @@ import { extractArgsFromPayload, extractParamsFromContract, extractSocketPart, - groupByNamespace, - getNamespaceInOrder, isContract, // alias // generic inArray, @@ -49,7 +47,11 @@ import { resultHandler, isJsonqlErrorObj, - VERSION + VERSION, + + groupByNamespace, + getNamespaceInOrder, + getNamespace } from './module' import { buff } from './src/jwt' // node import @@ -60,14 +62,6 @@ import { isJsonqlRequest, isJsonqlConsoleUrl } from './src/jsonql-handlers' -/* move back to the jsonql-koa since 0.9.1 -import { - handleOutput, - handleHtmlOutput, - ctxErrorHandler, - forbiddenHandler -} from './src/node-koa' -*/ import { getDocLen, headerParser, @@ -104,8 +98,6 @@ export { extractArgsFromPayload, extractParamsFromContract, extractSocketPart, - groupByNamespace, - getNamespaceInOrder, isContract, // alias // generic inArray, @@ -137,5 +129,10 @@ export { objDefineProps, objHasProp, - VERSION + VERSION, + + groupByNamespace, + getNamespaceInOrder, + getNamespace + } diff --git a/packages/utils/main.js b/packages/utils/main.js index b1b94dd65c0e7ca4090e345161bd3c47c4925ce0..260f177417453205de3a81d76488785346c329bf 100644 --- a/packages/utils/main.js +++ b/packages/utils/main.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,r=(t=require("fs"))&&"object"==typeof t&&"default"in t?t.default:t,e=require("path"),n=Array.isArray,o="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},i="object"==typeof o&&o&&o.Object===Object&&o,u="object"==typeof self&&self&&self.Object===Object&&self,a=i||u||Function("return this")(),f=a.Symbol,s=Object.prototype,c=s.hasOwnProperty,h=s.toString,p=f?f.toStringTag:void 0;var l=Object.prototype.toString;var g=f?f.toStringTag:void 0;function y(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":g&&g in Object(t)?function(t){var r=c.call(t,p),e=t[p];try{t[p]=void 0;var n=!0}catch(t){}var o=h.call(t);return n&&(r?t[p]=e:delete t[p]),o}(t):function(t){return l.call(t)}(t)}var v,d,b=(v=Object.getPrototypeOf,d=Object,function(t){return v(d(t))});function w(t){return null!=t&&"object"==typeof t}var _=Function.prototype,m=Object.prototype,A=_.toString,E=m.hasOwnProperty,j=A.call(Object);function P(t){if(!w(t)||"[object Object]"!=y(t))return!1;var r=b(t);if(null===r)return!0;var e=E.call(r,"constructor")&&r.constructor;return"function"==typeof e&&e instanceof e&&A.call(e)==j}var O=f?f.prototype:void 0,x=O?O.toString:void 0;function R(t){if("string"==typeof t)return t;if(n(t))return function(t,r){for(var e=-1,n=null==t?0:t.length,o=Array(n);++e=n?t:function(t,r,e){var n=-1,o=t.length;r<0&&(r=-r>o?0:o+r),(e=e>o?o:e)<0&&(e+=o),o=r>e?0:e-r>>>0,r>>>=0;for(var i=Array(o);++n-1;);return e}(o,i),function(t,r){for(var e=t.length;e--&&U(r,t[e],0)>-1;);return e}(o,i)+1).join("")}var Q=function(t,r){return!!t.filter((function(t){return t===r})).length},V=function(t){return n(t)?t:[t]},H=function(t,r){try{var e=Object.keys(t);return Q(e,r)}catch(t){return!1}};function G(t,r){return t===r||t!=t&&r!=r}function Z(t,r){for(var e=t.length;e--;)if(G(t[e][0],r))return e;return-1}var K=Array.prototype.splice;function W(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1},W.prototype.set=function(t,r){var e=this.__data__,n=Z(e,t);return n<0?(++this.size,e.push([t,r])):e[n][1]=r,this};function tt(t){if(!X(t))return!1;var r=y(t);return"[object Function]"==r||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r}var rt,et=a["__core-js_shared__"],nt=(rt=/[^.]+$/.exec(et&&et.keys&&et.keys.IE_PROTO||""))?"Symbol(src)_1."+rt:"";var ot=Function.prototype.toString;var it=/^\[object .+?Constructor\]$/,ut=Function.prototype,at=Object.prototype,ft=ut.toString,st=at.hasOwnProperty,ct=RegExp("^"+ft.call(st).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ht(t){return!(!X(t)||function(t){return!!nt&&nt in t}(t))&&(tt(t)?ct:it).test(function(t){if(null!=t){try{return ot.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function pt(t,r){var e=function(t,r){return null==t?void 0:t[r]}(t,r);return ht(e)?e:void 0}var lt=pt(a,"Map"),gt=pt(Object,"create");var yt=Object.prototype.hasOwnProperty;var vt=Object.prototype.hasOwnProperty;function dt(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1&&t%1==0&&t<=9007199254740991}function Ft(t){return null!=t&&zt(t.length)&&!tt(t)}var qt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Jt=qt&&"object"==typeof module&&module&&!module.nodeType&&module,$t=Jt&&Jt.exports===qt?a.Buffer:void 0,Qt=($t?$t.isBuffer:void 0)||function(){return!1},Vt={};Vt["[object Float32Array]"]=Vt["[object Float64Array]"]=Vt["[object Int8Array]"]=Vt["[object Int16Array]"]=Vt["[object Int32Array]"]=Vt["[object Uint8Array]"]=Vt["[object Uint8ClampedArray]"]=Vt["[object Uint16Array]"]=Vt["[object Uint32Array]"]=!0,Vt["[object Arguments]"]=Vt["[object Array]"]=Vt["[object ArrayBuffer]"]=Vt["[object Boolean]"]=Vt["[object DataView]"]=Vt["[object Date]"]=Vt["[object Error]"]=Vt["[object Function]"]=Vt["[object Map]"]=Vt["[object Number]"]=Vt["[object Object]"]=Vt["[object RegExp]"]=Vt["[object Set]"]=Vt["[object String]"]=Vt["[object WeakMap]"]=!1;var Ht="object"==typeof exports&&exports&&!exports.nodeType&&exports,Gt=Ht&&"object"==typeof module&&module&&!module.nodeType&&module,Zt=Gt&&Gt.exports===Ht&&i.process,Kt=function(){try{var t=Gt&&Gt.require&&Gt.require("util").types;return t||Zt&&Zt.binding&&Zt.binding("util")}catch(t){}}(),Wt=Kt&&Kt.isTypedArray,Xt=Wt?function(t){return function(r){return t(r)}}(Wt):function(t){return w(t)&&zt(t.length)&&!!Vt[y(t)]};function tr(t,r){if(("constructor"!==r||"function"!=typeof t[r])&&"__proto__"!=r)return t[r]}var rr=Object.prototype.hasOwnProperty;function er(t,r,e){var n=t[r];rr.call(t,r)&&G(n,e)&&(void 0!==e||r in t)||At(t,r,e)}var nr=/^(?:0|[1-9]\d*)$/;function or(t,r){var e=typeof t;return!!(r=null==r?9007199254740991:r)&&("number"==e||"symbol"!=e&&nr.test(t))&&t>-1&&t%1==0&&t0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}(vr);function wr(t,r){return br(function(t,r,e){return r=yr(void 0===r?t.length-1:r,0),function(){for(var n=arguments,o=-1,i=yr(n.length-r,0),u=Array(i);++o1?r[n-1]:void 0,i=n>2?r[2]:void 0;for(o=_r.length>3&&"function"==typeof o?(n--,o):void 0,i&&function(t,r,e){if(!X(e))return!1;var n=typeof r;return!!("number"==n?Ft(e)&&or(r,e.length):"string"==n&&r in e)&&G(e[r],t)}(r[0],r[1],i)&&(o=n<3?void 0:o,n=1),t=Object(t);++e>18&63]+$r[o>>12&63]+$r[o>>6&63]+$r[63&o]);return i.join("")}function Kr(t){var r;Hr||Gr();for(var e=t.length,n=e%3,o="",i=[],u=0,a=e-n;ua?a:u+16383));return 1===n?(r=t[e-1],o+=$r[r>>2],o+=$r[r<<4&63],o+="=="):2===n&&(r=(t[e-2]<<8)+t[e-1],o+=$r[r>>10],o+=$r[r>>4&63],o+=$r[r<<2&63],o+="="),i.push(o),i.join("")}function Wr(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<>1,c=-7,h=e?o-1:0,p=e?-1:1,l=t[r+h];for(h+=p,i=l&(1<<-c)-1,l>>=-c,c+=a;c>0;i=256*i+t[r+h],h+=p,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[r+h],h+=p,c-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(l?-1:1);u+=Math.pow(2,n),i-=s}return(l?-1:1)*u*Math.pow(2,i-n)}function Xr(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,c=(1<>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:i-1,g=n?1:-1,y=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=c):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),(r+=u+h>=1?p/f:p*Math.pow(2,1-h))*f>=2&&(u++,f/=2),u+h>=c?(a=0,u=c):u+h>=1?(a=(r*f-1)*Math.pow(2,o),u+=h):(a=r*Math.pow(2,h-1)*Math.pow(2,o),u=0));o>=8;t[e+l]=255&a,l+=g,a/=256,o-=8);for(u=u<0;t[e+l]=255&u,l+=g,u/=256,s-=8);t[e+l-g]|=128*y}var te={}.toString,re=Array.isArray||function(t){return"[object Array]"==te.call(t)};function ee(){return oe.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function ne(t,r){if(ee()=ee())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+ee().toString(16)+" bytes");return 0|t}function ce(t){return!(null==t||!t._isBuffer)}function he(t,r){if(ce(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return Me(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return De(t).length;default:if(n)return Me(t).length;r=(""+r).toLowerCase(),n=!0}}function pe(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Oe(this,r,e);case"utf8":case"utf-8":return Ee(this,r,e);case"ascii":return je(this,r,e);case"latin1":case"binary":return Pe(this,r,e);case"base64":return Ae(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return xe(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function le(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function ge(t,r,e,n,o){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof r&&(r=oe.from(r,n)),ce(r))return 0===r.length?-1:ye(t,r,e,n,o);if("number"==typeof r)return r&=255,oe.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):ye(t,[r],e,n,o);throw new TypeError("val must be string, number or Buffer")}function ye(t,r,e,n,o){var i,u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}function s(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(o){var c=-1;for(i=e;ia&&(e=a-f),i=e;i>=0;i--){for(var h=!0,p=0;po&&(n=o):n=o;var i=r.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(n);return i}(r,t.length-e),t,e,n)}function Ae(t,r,e){return 0===r&&e===t.length?Kr(t):Kr(t.slice(r,e))}function Ee(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o239?4:s>223?3:s>191?2:1;if(o+h<=e)switch(h){case 1:s<128&&(c=s);break;case 2:128==(192&(i=t[o+1]))&&(f=(31&s)<<6|63&i)>127&&(c=f);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(f=(15&s)<<12|(63&i)<<6|63&u)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(f=(15&s)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),o+=h}return function(t){var r=t.length;if(r<=4096)return String.fromCharCode.apply(String,t);var e="",n=0;for(;n0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),""},oe.prototype.compare=function(t,r,e,n,o){if(!ce(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),r<0||e>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&r>=e)return 0;if(n>=o)return-1;if(r>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),a=Math.min(i,u),f=this.slice(n,o),s=t.slice(r,e),c=0;co)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return ve(this,t,r,e);case"utf8":case"utf-8":return de(this,t,r,e);case"ascii":return be(this,t,r,e);case"latin1":case"binary":return we(this,t,r,e);case"base64":return _e(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return me(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},oe.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function je(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;on)&&(e=n);for(var o="",i=r;ie)throw new RangeError("Trying to access beyond buffer length")}function Se(t,r,e,n,o,i){if(!ce(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||rt.length)throw new RangeError("Index out of range")}function Te(t,r,e,n){r<0&&(r=65535+r+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(n?o:1-o)}function Ue(t,r,e,n){r<0&&(r=4294967295+r+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(n?o:3-o)&255}function Be(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function Ie(t,r,e,n,o){return o||Be(t,0,e,4),Xr(t,r,e,n,23,4),e+4}function Ce(t,r,e,n,o){return o||Be(t,0,e,8),Xr(t,r,e,n,52,8),e+8}oe.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r0&&(o*=256);)n+=this[t+--r]*o;return n},oe.prototype.readUInt8=function(t,r){return r||Re(t,1,this.length),this[t]},oe.prototype.readUInt16LE=function(t,r){return r||Re(t,2,this.length),this[t]|this[t+1]<<8},oe.prototype.readUInt16BE=function(t,r){return r||Re(t,2,this.length),this[t]<<8|this[t+1]},oe.prototype.readUInt32LE=function(t,r){return r||Re(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},oe.prototype.readUInt32BE=function(t,r){return r||Re(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},oe.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||Re(t,r,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*r)),n},oe.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||Re(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*r)),i},oe.prototype.readInt8=function(t,r){return r||Re(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},oe.prototype.readInt16LE=function(t,r){r||Re(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},oe.prototype.readInt16BE=function(t,r){r||Re(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},oe.prototype.readInt32LE=function(t,r){return r||Re(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},oe.prototype.readInt32BE=function(t,r){return r||Re(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},oe.prototype.readFloatLE=function(t,r){return r||Re(t,4,this.length),Wr(this,t,!0,23,4)},oe.prototype.readFloatBE=function(t,r){return r||Re(t,4,this.length),Wr(this,t,!1,23,4)},oe.prototype.readDoubleLE=function(t,r){return r||Re(t,8,this.length),Wr(this,t,!0,52,8)},oe.prototype.readDoubleBE=function(t,r){return r||Re(t,8,this.length),Wr(this,t,!1,52,8)},oe.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||Se(this,t,r,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[r]=255&t;++i=0&&(i*=256);)this[r+o]=t/i&255;return r+e},oe.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,1,255,0),oe.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},oe.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,2,65535,0),oe.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):Te(this,t,r,!0),r+2},oe.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,2,65535,0),oe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):Te(this,t,r,!1),r+2},oe.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,4,4294967295,0),oe.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):Ue(this,t,r,!0),r+4},oe.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,4,4294967295,0),oe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Ue(this,t,r,!1),r+4},oe.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);Se(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i>0)-a&255;return r+e},oe.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);Se(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},oe.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,1,127,-128),oe.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},oe.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,2,32767,-32768),oe.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):Te(this,t,r,!0),r+2},oe.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,2,32767,-32768),oe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):Te(this,t,r,!1),r+2},oe.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,4,2147483647,-2147483648),oe.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):Ue(this,t,r,!0),r+4},oe.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||Se(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),oe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Ue(this,t,r,!1),r+4},oe.prototype.writeFloatLE=function(t,r,e){return Ie(this,t,r,!0,e)},oe.prototype.writeFloatBE=function(t,r,e){return Ie(this,t,r,!1,e)},oe.prototype.writeDoubleLE=function(t,r,e){return Ce(this,t,r,!0,e)},oe.prototype.writeDoubleBE=function(t,r,e){return Ce(this,t,r,!1,e)},oe.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+e];else if(i<1e3||!oe.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=r;i55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function De(t){return function(t){var r,e,n,o,i,u;Hr||Gr();var a=t.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");i="="===t[a-2]?2:"="===t[a-1]?1:0,u=new Vr(3*a/4-i),n=i>0?a-4:a;var f=0;for(r=0,e=0;r>16&255,u[f++]=o>>8&255,u[f++]=255&o;return 2===i?(o=Qr[t.charCodeAt(r)]<<2|Qr[t.charCodeAt(r+1)]>>4,u[f++]=255&o):1===i&&(o=Qr[t.charCodeAt(r)]<<10|Qr[t.charCodeAt(r+1)]<<4|Qr[t.charCodeAt(r+2)]>>2,u[f++]=o>>8&255,u[f++]=255&o),u}(function(t){if((t=function(t){if(t.trim)return t.trim();return t.replace(/^\s+|\s+$/g,"")}(t).replace(Ne,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function ke(t,r,e,n){for(var o=0;o=r.length||o>=t.length);++o)r[o+e]=t[o];return o}function Le(t){return null!=t&&(!!t._isBuffer||ze(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&ze(t.slice(0,0))}(t))}function ze(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var Fe=function(t,r){if(r instanceof Error){var e={};return Object.getOwnPropertyNames(r).forEach((function(t){e[t]=r[t]})),e}return r};var qe=function(t,r){try{var e=t.headers.accept.split(",");return r?e.filter((function(t){return t===r})):e}catch(t){return[]}},Je=function(t,r){return!!qe(t,r).length},$e=function(t,r){return t.path===r.jsonqlPath};exports.VERSION="1.0.0",exports.buff=function(t,r){return void 0===r&&(r="base64"),Le(t)?t:new oe.from(t,r)},exports.cacheBurst=Ir,exports.cacheBurstUrl=function(t){return Br(t,Ir())},exports.chainFns=function(t){for(var r=[],e=arguments.length-1;e-- >0;)r[e]=arguments[e+1];return function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return r.reduce((function(t,r){return Reflect.apply(r,null,V(t))}),Reflect.apply(t,null,e))}},exports.chainPromises=function(t,r){return void 0===r&&(r=!1),t.reduce((function(t,e){return t.then((function(t){return e.then((function(e){return!1===r?t.concat([e]):mr(t,e)}))}))}),Promise.resolve(!1===r?[]:P(r)?r:{}))},exports.createEvt=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return t.join("_")},exports.createMutation=Lr,exports.createMutationStr=function(t,r,e,n){return void 0===e&&(e={}),void 0===n&&(n=!1),JSON.stringify(Lr(t,r,e,n))},exports.createQuery=kr,exports.createQueryStr=function(t,r,e){return void 0===r&&(r=[]),void 0===e&&(e=!1),JSON.stringify(kr(t,r,e))},exports.dasherize=Ur,exports.extractArgsFromPayload=function(t,r){switch(r){case"query":return t.args;case"mutation":return[t.payload,t.condition];default:throw new Rr("Unknown "+r+" to extract argument from!")}},exports.extractParamsFromContract=function(t,r,e){try{var n=t[r][e];if(!n)throw new Or(e,r);return n}catch(t){throw new Or(e,t)}},exports.extractSocketPart=Sr,exports.findFromContract=function(t,e,n){return!!(n[t]&&n[t][e]&&n[t][e].file&&r.existsSync(n[t][e].file))&&n[t][e].file},exports.formatPayload=Yr,exports.getCallMethod=function(t){switch(!0){case t===jr[0]:return"query";case t===jr[1]:return"mutation";default:return!1}},exports.getConfigValue=function(t,r){return r&&P(r)&&t in r?r[t]:void 0},exports.getDocLen=function(t){return oe.byteLength(t,"utf8")},exports.getMutationFromArgs=qr,exports.getMutationFromPayload=function(t){var r=Fr(t,qr);if(!1!==r)return r;throw new xr("[getMutationArgs] Payload is malformed!",t)},exports.getNameFromPayload=Mr,exports.getNamespaceInOrder=function(t,r){var e=[];for(var n in t)n===r?e[1]=n:e[0]=n;return e},exports.getPathToFn=function(t,n,o){var i=o.resolverDir,u=Ur(t),a=[];o.contract&&o.contract[n]&&o.contract[n].path&&a.push(o.contract[n].path),a.push(e.join(i,n,u,[Pr,Er].join("."))),a.push(e.join(i,n,[u,Er].join(".")));for(var f=a.length,s=0;s=n?t:function(t,r,e){var n=-1,o=t.length;r<0&&(r=-r>o?0:o+r),(e=e>o?o:e)<0&&(e+=o),o=r>e?0:e-r>>>0,r>>>=0;for(var i=Array(o);++n-1;);return e}(o,i),function(t,r){for(var e=t.length;e--&&U(r,t[e],0)>-1;);return e}(o,i)+1).join("")}var Q=function(t,r){return!!t.filter((function(t){return t===r})).length},V=function(t){return n(t)?t:[t]},H=function(t,r){try{var e=Object.keys(t);return Q(e,r)}catch(t){return!1}};function G(t,r){return t===r||t!=t&&r!=r}function Z(t,r){for(var e=t.length;e--;)if(G(t[e][0],r))return e;return-1}var K=Array.prototype.splice;function W(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1},W.prototype.set=function(t,r){var e=this.__data__,n=Z(e,t);return n<0?(++this.size,e.push([t,r])):e[n][1]=r,this};function tt(t){if(!X(t))return!1;var r=y(t);return"[object Function]"==r||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r}var rt,et=a["__core-js_shared__"],nt=(rt=/[^.]+$/.exec(et&&et.keys&&et.keys.IE_PROTO||""))?"Symbol(src)_1."+rt:"";var ot=Function.prototype.toString;var it=/^\[object .+?Constructor\]$/,ut=Function.prototype,at=Object.prototype,ft=ut.toString,st=at.hasOwnProperty,ct=RegExp("^"+ft.call(st).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ht(t){return!(!X(t)||function(t){return!!nt&&nt in t}(t))&&(tt(t)?ct:it).test(function(t){if(null!=t){try{return ot.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function pt(t,r){var e=function(t,r){return null==t?void 0:t[r]}(t,r);return ht(e)?e:void 0}var lt=pt(a,"Map"),gt=pt(Object,"create");var yt=Object.prototype.hasOwnProperty;var vt=Object.prototype.hasOwnProperty;function dt(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1&&t%1==0&&t<=9007199254740991}function Ft(t){return null!=t&&zt(t.length)&&!tt(t)}var qt="object"==typeof exports&&exports&&!exports.nodeType&&exports,Jt=qt&&"object"==typeof module&&module&&!module.nodeType&&module,$t=Jt&&Jt.exports===qt?a.Buffer:void 0,Qt=($t?$t.isBuffer:void 0)||function(){return!1},Vt={};Vt["[object Float32Array]"]=Vt["[object Float64Array]"]=Vt["[object Int8Array]"]=Vt["[object Int16Array]"]=Vt["[object Int32Array]"]=Vt["[object Uint8Array]"]=Vt["[object Uint8ClampedArray]"]=Vt["[object Uint16Array]"]=Vt["[object Uint32Array]"]=!0,Vt["[object Arguments]"]=Vt["[object Array]"]=Vt["[object ArrayBuffer]"]=Vt["[object Boolean]"]=Vt["[object DataView]"]=Vt["[object Date]"]=Vt["[object Error]"]=Vt["[object Function]"]=Vt["[object Map]"]=Vt["[object Number]"]=Vt["[object Object]"]=Vt["[object RegExp]"]=Vt["[object Set]"]=Vt["[object String]"]=Vt["[object WeakMap]"]=!1;var Ht="object"==typeof exports&&exports&&!exports.nodeType&&exports,Gt=Ht&&"object"==typeof module&&module&&!module.nodeType&&module,Zt=Gt&&Gt.exports===Ht&&i.process,Kt=function(){try{var t=Gt&&Gt.require&&Gt.require("util").types;return t||Zt&&Zt.binding&&Zt.binding("util")}catch(t){}}(),Wt=Kt&&Kt.isTypedArray,Xt=Wt?function(t){return function(r){return t(r)}}(Wt):function(t){return w(t)&&zt(t.length)&&!!Vt[y(t)]};function tr(t,r){if(("constructor"!==r||"function"!=typeof t[r])&&"__proto__"!=r)return t[r]}var rr=Object.prototype.hasOwnProperty;function er(t,r,e){var n=t[r];rr.call(t,r)&&G(n,e)&&(void 0!==e||r in t)||At(t,r,e)}var nr=/^(?:0|[1-9]\d*)$/;function or(t,r){var e=typeof t;return!!(r=null==r?9007199254740991:r)&&("number"==e||"symbol"!=e&&nr.test(t))&&t>-1&&t%1==0&&t0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}(vr);function wr(t,r){return br(function(t,r,e){return r=yr(void 0===r?t.length-1:r,0),function(){for(var n=arguments,o=-1,i=yr(n.length-r,0),u=Array(i);++o1?r[n-1]:void 0,i=n>2?r[2]:void 0;for(o=_r.length>3&&"function"==typeof o?(n--,o):void 0,i&&function(t,r,e){if(!X(e))return!1;var n=typeof r;return!!("number"==n?Ft(e)&&or(r,e.length):"string"==n&&r in e)&&G(e[r],t)}(r[0],r[1],i)&&(o=n<3?void 0:o,n=1),t=Object(t);++e>18&63]+Vr[o>>12&63]+Vr[o>>6&63]+Vr[63&o]);return i.join("")}function Xr(t){var r;Zr||Kr();for(var e=t.length,n=e%3,o="",i=[],u=0,a=e-n;ua?a:u+16383));return 1===n?(r=t[e-1],o+=Vr[r>>2],o+=Vr[r<<4&63],o+="=="):2===n&&(r=(t[e-2]<<8)+t[e-1],o+=Vr[r>>10],o+=Vr[r>>4&63],o+=Vr[r<<2&63],o+="="),i.push(o),i.join("")}function te(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<>1,c=-7,h=e?o-1:0,p=e?-1:1,l=t[r+h];for(h+=p,i=l&(1<<-c)-1,l>>=-c,c+=a;c>0;i=256*i+t[r+h],h+=p,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[r+h],h+=p,c-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(l?-1:1);u+=Math.pow(2,n),i-=s}return(l?-1:1)*u*Math.pow(2,i-n)}function re(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,c=(1<>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:i-1,g=n?1:-1,y=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=c):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),(r+=u+h>=1?p/f:p*Math.pow(2,1-h))*f>=2&&(u++,f/=2),u+h>=c?(a=0,u=c):u+h>=1?(a=(r*f-1)*Math.pow(2,o),u+=h):(a=r*Math.pow(2,h-1)*Math.pow(2,o),u=0));o>=8;t[e+l]=255&a,l+=g,a/=256,o-=8);for(u=u<0;t[e+l]=255&u,l+=g,u/=256,s-=8);t[e+l-g]|=128*y}var ee={}.toString,ne=Array.isArray||function(t){return"[object Array]"==ee.call(t)};function oe(){return ue.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function ie(t,r){if(oe()=oe())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+oe().toString(16)+" bytes");return 0|t}function pe(t){return!(null==t||!t._isBuffer)}function le(t,r){if(pe(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return ke(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return Le(t).length;default:if(n)return ke(t).length;r=(""+r).toLowerCase(),n=!0}}function ge(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Re(this,r,e);case"utf8":case"utf-8":return Pe(this,r,e);case"ascii":return xe(this,r,e);case"latin1":case"binary":return Oe(this,r,e);case"base64":return je(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Se(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function ye(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function ve(t,r,e,n,o){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(o)return-1;e=t.length-1}else if(e<0){if(!o)return-1;e=0}if("string"==typeof r&&(r=ue.from(r,n)),pe(r))return 0===r.length?-1:de(t,r,e,n,o);if("number"==typeof r)return r&=255,ue.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):de(t,[r],e,n,o);throw new TypeError("val must be string, number or Buffer")}function de(t,r,e,n,o){var i,u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}function s(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(o){var c=-1;for(i=e;ia&&(e=a-f),i=e;i>=0;i--){for(var h=!0,p=0;po&&(n=o):n=o;var i=r.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var u=0;u>8,o=e%256,i.push(o),i.push(n);return i}(r,t.length-e),t,e,n)}function je(t,r,e){return 0===r&&e===t.length?Xr(t):Xr(t.slice(r,e))}function Pe(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o239?4:s>223?3:s>191?2:1;if(o+h<=e)switch(h){case 1:s<128&&(c=s);break;case 2:128==(192&(i=t[o+1]))&&(f=(31&s)<<6|63&i)>127&&(c=f);break;case 3:i=t[o+1],u=t[o+2],128==(192&i)&&128==(192&u)&&(f=(15&s)<<12|(63&i)<<6|63&u)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:i=t[o+1],u=t[o+2],a=t[o+3],128==(192&i)&&128==(192&u)&&128==(192&a)&&(f=(15&s)<<18|(63&i)<<12|(63&u)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),o+=h}return function(t){var r=t.length;if(r<=4096)return String.fromCharCode.apply(String,t);var e="",n=0;for(;n0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),""},ue.prototype.compare=function(t,r,e,n,o){if(!pe(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),r<0||e>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&r>=e)return 0;if(n>=o)return-1;if(r>=e)return 1;if(this===t)return 0;for(var i=(o>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),a=Math.min(i,u),f=this.slice(n,o),s=t.slice(r,e),c=0;co)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return be(this,t,r,e);case"utf8":case"utf-8":return we(this,t,r,e);case"ascii":return _e(this,t,r,e);case"latin1":case"binary":return me(this,t,r,e);case"base64":return Ae(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ee(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},ue.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function xe(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;on)&&(e=n);for(var o="",i=r;ie)throw new RangeError("Trying to access beyond buffer length")}function Ue(t,r,e,n,o,i){if(!pe(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||rt.length)throw new RangeError("Index out of range")}function Be(t,r,e,n){r<0&&(r=65535+r+1);for(var o=0,i=Math.min(t.length-e,2);o>>8*(n?o:1-o)}function Ie(t,r,e,n){r<0&&(r=4294967295+r+1);for(var o=0,i=Math.min(t.length-e,4);o>>8*(n?o:3-o)&255}function Ne(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function Ce(t,r,e,n,o){return o||Ne(t,0,e,4),re(t,r,e,n,23,4),e+4}function Ye(t,r,e,n,o){return o||Ne(t,0,e,8),re(t,r,e,n,52,8),e+8}ue.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r0&&(o*=256);)n+=this[t+--r]*o;return n},ue.prototype.readUInt8=function(t,r){return r||Te(t,1,this.length),this[t]},ue.prototype.readUInt16LE=function(t,r){return r||Te(t,2,this.length),this[t]|this[t+1]<<8},ue.prototype.readUInt16BE=function(t,r){return r||Te(t,2,this.length),this[t]<<8|this[t+1]},ue.prototype.readUInt32LE=function(t,r){return r||Te(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},ue.prototype.readUInt32BE=function(t,r){return r||Te(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},ue.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||Te(t,r,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*r)),n},ue.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||Te(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*r)),i},ue.prototype.readInt8=function(t,r){return r||Te(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},ue.prototype.readInt16LE=function(t,r){r||Te(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},ue.prototype.readInt16BE=function(t,r){r||Te(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},ue.prototype.readInt32LE=function(t,r){return r||Te(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},ue.prototype.readInt32BE=function(t,r){return r||Te(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},ue.prototype.readFloatLE=function(t,r){return r||Te(t,4,this.length),te(this,t,!0,23,4)},ue.prototype.readFloatBE=function(t,r){return r||Te(t,4,this.length),te(this,t,!1,23,4)},ue.prototype.readDoubleLE=function(t,r){return r||Te(t,8,this.length),te(this,t,!0,52,8)},ue.prototype.readDoubleBE=function(t,r){return r||Te(t,8,this.length),te(this,t,!1,52,8)},ue.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||Ue(this,t,r,e,Math.pow(2,8*e)-1,0);var o=1,i=0;for(this[r]=255&t;++i=0&&(i*=256);)this[r+o]=t/i&255;return r+e},ue.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,1,255,0),ue.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},ue.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,2,65535,0),ue.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):Be(this,t,r,!0),r+2},ue.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,2,65535,0),ue.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):Be(this,t,r,!1),r+2},ue.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,4,4294967295,0),ue.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):Ie(this,t,r,!0),r+4},ue.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,4,4294967295,0),ue.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Ie(this,t,r,!1),r+4},ue.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);Ue(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i>0)-a&255;return r+e},ue.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var o=Math.pow(2,8*e-1);Ue(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},ue.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,1,127,-128),ue.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},ue.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,2,32767,-32768),ue.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):Be(this,t,r,!0),r+2},ue.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,2,32767,-32768),ue.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):Be(this,t,r,!1),r+2},ue.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,4,2147483647,-2147483648),ue.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):Ie(this,t,r,!0),r+4},ue.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||Ue(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),ue.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):Ie(this,t,r,!1),r+4},ue.prototype.writeFloatLE=function(t,r,e){return Ce(this,t,r,!0,e)},ue.prototype.writeFloatBE=function(t,r,e){return Ce(this,t,r,!1,e)},ue.prototype.writeDoubleLE=function(t,r,e){return Ye(this,t,r,!0,e)},ue.prototype.writeDoubleBE=function(t,r,e){return Ye(this,t,r,!1,e)},ue.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+e];else if(i<1e3||!ue.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(i=r;i55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function Le(t){return function(t){var r,e,n,o,i,u;Zr||Kr();var a=t.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");i="="===t[a-2]?2:"="===t[a-1]?1:0,u=new Gr(3*a/4-i),n=i>0?a-4:a;var f=0;for(r=0,e=0;r>16&255,u[f++]=o>>8&255,u[f++]=255&o;return 2===i?(o=Hr[t.charCodeAt(r)]<<2|Hr[t.charCodeAt(r+1)]>>4,u[f++]=255&o):1===i&&(o=Hr[t.charCodeAt(r)]<<10|Hr[t.charCodeAt(r+1)]<<4|Hr[t.charCodeAt(r+2)]>>2,u[f++]=o>>8&255,u[f++]=255&o),u}(function(t){if((t=function(t){if(t.trim)return t.trim();return t.replace(/^\s+|\s+$/g,"")}(t).replace(Me,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function ze(t,r,e,n){for(var o=0;o=r.length||o>=t.length);++o)r[o+e]=t[o];return o}function Fe(t){return null!=t&&(!!t._isBuffer||qe(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&qe(t.slice(0,0))}(t))}function qe(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var Je=function(t,r){if(r instanceof Error){var e={};return Object.getOwnPropertyNames(r).forEach((function(t){e[t]=r[t]})),e}return r};var $e=function(t,r){try{var e=t.headers.accept.split(",");return r?e.filter((function(t){return t===r})):e}catch(t){return[]}},Qe=function(t,r){return!!$e(t,r).length},Ve=function(t,r){return t.path===r.jsonqlPath};exports.VERSION="1.0.1",exports.buff=function(t,r){return void 0===r&&(r="base64"),Fe(t)?t:new ue.from(t,r)},exports.cacheBurst=Cr,exports.cacheBurstUrl=function(t){return Nr(t,Cr())},exports.chainFns=function(t){for(var r=[],e=arguments.length-1;e-- >0;)r[e]=arguments[e+1];return function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return r.reduce((function(t,r){return Reflect.apply(r,null,V(t))}),Reflect.apply(t,null,e))}},exports.chainPromises=function(t,r){return void 0===r&&(r=!1),t.reduce((function(t,e){return t.then((function(t){return e.then((function(e){return!1===r?t.concat([e]):mr(t,e)}))}))}),Promise.resolve(!1===r?[]:P(r)?r:{}))},exports.createEvt=function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return t.join("_")},exports.createMutation=Fr,exports.createMutationStr=function(t,r,e,n){return void 0===e&&(e={}),void 0===n&&(n=!1),JSON.stringify(Fr(t,r,e,n))},exports.createQuery=zr,exports.createQueryStr=function(t,r,e){return void 0===r&&(r=[]),void 0===e&&(e=!1),JSON.stringify(zr(t,r,e))},exports.dasherize=Ir,exports.extractArgsFromPayload=function(t,r){switch(r){case"query":return t.args;case"mutation":return[t.payload,t.condition];default:throw new Tr("Unknown "+r+" to extract argument from!")}},exports.extractParamsFromContract=function(t,r,e){try{var n=t[r][e];if(!n)throw new Rr(e,r);return n}catch(t){throw new Rr(e,t)}},exports.extractSocketPart=Ur,exports.findFromContract=function(t,e,n){return!!(n[t]&&n[t][e]&&n[t][e].file&&r.existsSync(n[t][e].file))&&n[t][e].file},exports.formatPayload=Dr,exports.getCallMethod=function(t){switch(!0){case t===jr[0]:return"query";case t===jr[1]:return"mutation";default:return!1}},exports.getConfigValue=function(t,r){return r&&P(r)&&t in r?r[t]:void 0},exports.getDocLen=function(t){return ue.byteLength(t,"utf8")},exports.getMutationFromArgs=$r,exports.getMutationFromPayload=function(t){var r=Jr(t,$r);if(!1!==r)return r;throw new Sr("[getMutationArgs] Payload is malformed!",t)},exports.getNameFromPayload=kr,exports.getNamespace=function(t){var r="jsonql";return t.enableAuth?[[r,Pr].join("/"),[r,xr].join("/")]:[r]},exports.getNamespaceInOrder=function(t,r){var e=[];for(var n in t)n===r?e[1]=n:e[0]=n;return e},exports.getPathToFn=function(t,n,o){var i=o.resolverDir,u=Ir(t),a=[];o.contract&&o.contract[n]&&o.contract[n].path&&a.push(o.contract[n].path),a.push(e.join(i,n,u,[Or,Er].join("."))),a.push(e.join(i,n,[u,Er].join(".")));for(var f=a.length,s=0;s resolvers - * 2. the size of the object (1 all private, 2 mixed public with private) - * 3. which namespace is public - */ -export function groupByNamespace(contract, fallback = false) { - let socket = extractSocketPart(contract) - if (socket === false) { - if (fallback) { - return contract; // just return the whole contract - } - throw new JsonqlError(`socket not found in contract!`) - } - let nspSet = {} - let size = 0 - let publicNamespace - for (let resolverName in socket) { - let params = socket[resolverName] - let { namespace } = params - if (namespace) { - if (!nspSet[namespace]) { - ++size; - nspSet[namespace] = {} - } - nspSet[namespace][resolverName] = params - if (!publicNamespace) { - if (params.public) { - publicNamespace = namespace - } - } - } - } - return { size, nspSet, publicNamespace } -} - -/** - * @NOTE ported from jsonql-ws-client - * Got to make sure the connection order otherwise - * it will hang - * @param {object} nspSet contract - * @param {string} publicNamespace like the name said - * @return {array} namespaces in order - */ -export function getNamespaceInOrder(nspSet, publicNamespace) { - let names = [] // need to make sure the order! - for (let namespace in nspSet) { - if (namespace === publicNamespace) { - names[1] = namespace - } else { - names[0] = namespace - } - } - return names -} - /** * Extract the args from the payload diff --git a/packages/utils/src/namespace.js b/packages/utils/src/namespace.js new file mode 100644 index 0000000000000000000000000000000000000000..2249fa8e8775df660fcf47ef468bdf4cb240e181 --- /dev/null +++ b/packages/utils/src/namespace.js @@ -0,0 +1,87 @@ +// take out all the namespace related methods in one place for easy to find +import { + JSONQL_PATH, + PUBLIC_KEY, + PRIVATE_KEY +} from 'jsonql-constants' +import { extractSocketPart } from './contract' +const SOCKET_NOT_FOUND_ERR = `socket not found in contract!` + +/** + * @BUG we should check the socket part instead of expect the downstream to read the menu! + * We only need this when the enableAuth is true otherwise there is only one namespace + * @param {object} contract the socket part of the contract file + * @param {boolean} [fallback=false] this is a fall back option for old code + * @return {object} 1. remap the contract using the namespace --> resolvers + * 2. the size of the object (1 all private, 2 mixed public with private) + * 3. which namespace is public + */ +export function groupByNamespace(contract, fallback = false) { + let socket = extractSocketPart(contract) + if (socket === false) { + if (fallback) { + return contract; // just return the whole contract + } + throw new JsonqlError('groupByNamespace', SOCKET_NOT_FOUND_ERR) + } + let nspSet = {} + let size = 0 + let publicNamespace + for (let resolverName in socket) { + let params = socket[resolverName] + let { namespace } = params + if (namespace) { + if (!nspSet[namespace]) { + ++size; + nspSet[namespace] = {} + } + nspSet[namespace][resolverName] = params + if (!publicNamespace) { + if (params[PUBLIC_KEY]) { + publicNamespace = namespace + } + } + } + } + return { size, nspSet, publicNamespace } +} + +/** + * @NOTE ported from jsonql-ws-client + * Got to make sure the connection order otherwise + * it will hang + * @param {object} nspSet contract + * @param {string} publicNamespace like the name said + * @return {array} namespaces in order + */ +export function getNamespaceInOrder(nspSet, publicNamespace) { + let names = [] // need to make sure the order! + for (let namespace in nspSet) { + if (namespace === publicNamespace) { + names[1] = namespace + } else { + names[0] = namespace + } + } + return names +} + +/** + * @TODO this might change, what if we want to do room with ws + * 1. there will only be max two namespace + * 2. when it's normal we will have the stock path as namespace + * 3. when enableAuth then we will have two, one is jsonql/public + private + * @param {object} config options + * @return {array} of namespace(s) + */ +export function getNamespace(config) { + const base = JSONQL_PATH + if (config.enableAuth) { + // the public come first @1.0.1 we use the constants instead of the user supplied value + return [ + [ base , /* config.publicNamespace */ PUBLIC_KEY].join('/'), + [ base , /* config.privateNamespace */ PRIVATE_KEY].join('/') + ] + } + return [ base ] +} diff --git a/packages/utils/src/results.js b/packages/utils/src/results.js index 02dcb8fbf9ececc19e802ba364f90e18b4dd6238..de2d6666a9444596adef98db3078575b1307ad3e 100644 --- a/packages/utils/src/results.js +++ b/packages/utils/src/results.js @@ -3,14 +3,8 @@ import { QUERY_NAME, MUTATION_NAME, API_REQUEST_METHODS, - PAYLOAD_PARAM_NAME, - CONDITION_PARAM_NAME, - RESOLVER_PARAM_NAME , - QUERY_ARG_NAME, DATA_KEY, ERROR_KEY, - INDEX_KEY, - EXT, TIMESTAMP_PARAM_NAME } from 'jsonql-constants' import { isObjectHasKey } from './generic' diff --git a/packages/ws-server-core/index.js b/packages/ws-server-core/index.js index 935782f600dfdac6e8dd5dd6b715bfa1bea8e824..315ccdfcfc029761c8570879b2fa76d99d3261dc 100644 --- a/packages/ws-server-core/index.js +++ b/packages/ws-server-core/index.js @@ -1,6 +1,7 @@ // Not going to use the koa-socket-2 due to it's lack of support namespace // which is completely useless for us if there is no namespace const { + SOCKET_STATE_KEY, // rename them wsServerDefaultOptions, wsServerConstProps, @@ -13,24 +14,29 @@ const { // in the respective external methods const { addProperty } = require('./src/share/add-property') const { getContract } = require('./src/share/get-contract') +const { resolveMethod } = require('./src/share/resolve-method') const { createWsReply, getDebug, + getRainbowDebug, getNamespace, extractWsPayload, nil, - getUserdata + getUserdata, + isUserdata, + prepareUserdata } = require('./src/share/helpers') -const { resolveMethod } = require('./src/share/resolve-method') + const { interComEventHandler } = require('./src/share/inter-com-handler') -const debug = getDebug('main') +// const debug = getDebug('main') // also report the constants const jsonqlWsCoreConstants = require('./src/options/constants') // export every bits out then the downstream build as they want module.exports = { - // @TODO not sure if we need to export any of these at all + SOCKET_STATE_KEY, + // for the server to use addProperty, getContract, createWsReply, @@ -38,9 +44,12 @@ module.exports = { extractWsPayload, nil, getUserdata, + isUserdata, + prepareUserdata, resolveMethod, // just uniform until method, really should be in the jsonql-utils/node getDebug, + getRainbowDebug, // this method just getting export to the top level to determine if there is a socket server checkSocketServerType, // bunch of properties diff --git a/packages/ws-server-core/package.json b/packages/ws-server-core/package.json index dff7614a958818b2c9f7af297efd6181260ab61c..3e28717d5ac18f5a285e542b80d1519ebf955af6 100644 --- a/packages/ws-server-core/package.json +++ b/packages/ws-server-core/package.json @@ -23,10 +23,11 @@ "author": "Joel Chu ", "license": "MIT", "dependencies": { + "colors": "^1.4.0", "debug": "^4.1.1", "esm": "^3.2.25", "fs-extra": "^8.1.0", - "jsonql-constants": "^1.9.6", + "jsonql-constants": "^1.9.7", "jsonql-errors": "^1.1.10", "jsonql-jwt": "^1.3.9", "jsonql-params-validator": "^1.5.2", diff --git a/packages/ws-server-core/src/index.js b/packages/ws-server-core/src/index.js index b5cdb138a187a0ad69ef775d6d45750a433794bb..99ebf2661e1a9569f47181ea48b250a8ff3eb98b 100644 --- a/packages/ws-server-core/src/index.js +++ b/packages/ws-server-core/src/index.js @@ -1,4 +1,7 @@ // re-export here +const { + SOCKET_STATE_KEY +} = require('./options/constants') const { initWsServerOption, checkSocketServerType, @@ -15,6 +18,7 @@ const wsServerDefaultOptions = wsDefaultOptions const wsServerConstProps = wsConstProps // re-export module.exports = { + SOCKET_STATE_KEY, // rename them wsServerDefaultOptions, wsServerConstProps, diff --git a/packages/ws-server-core/src/options/constants.js b/packages/ws-server-core/src/options/constants.js index 93efca2cf68fff7a5be88a8079555d48057e64b8..f09447a036303a4ce49e01d56a8f7394797e8992 100644 --- a/packages/ws-server-core/src/options/constants.js +++ b/packages/ws-server-core/src/options/constants.js @@ -7,6 +7,8 @@ const { // JS_PRIMUS_NAME, // GO_WS_COOLPY7_NAME } = require('jsonql-constants') +// use our own nameing instead of generic state +const SOCKET_STATE_KEY = 'jsonqlState' const SOCKET_AUTH_DIR = join(SOCKET_NAME, AUTH_TYPE) // short hand @@ -33,5 +35,6 @@ module.exports = { SECRET_MISSING_ERR, MODULE_NAME, CONTRACT_NOT_FOUND_ERR, - SOCKET_AUTH_DIR + SOCKET_AUTH_DIR, + SOCKET_STATE_KEY } diff --git a/packages/ws-server-core/src/share/helpers.js b/packages/ws-server-core/src/share/helpers.js index d0c066e011f41eae6d37daed899560ead350126f..8b4813d1bb348970a84c635551f72a287b4ecd9e 100644 --- a/packages/ws-server-core/src/share/helpers.js +++ b/packages/ws-server-core/src/share/helpers.js @@ -4,15 +4,31 @@ const { JSONQL_PATH, WS_REPLY_TYPE, WS_EVT_NAME, - WS_DATA_NAME + WS_DATA_NAME, + SOCKET_CLIENT_ID_KEY, + SOCKET_CLIENT_TS_KEY } = require('jsonql-constants') +const { + JsonqlError, + clientErrorsHandler +} = require('jsonql-errors') +const { + toJson, + isObjectHasKey, + isFunc, + chainFns, + objDefineProps, + objHasProp +} = require('jsonql-utils') const { isString } = require('jsonql-params-validator') -const { JsonqlError, clientErrorsHandler } = require('jsonql-errors') -const { toJson, isObjectHasKey, isFunc } = require('jsonql-utils') -const { MODULE_NAME } = require('../options/constants') +const { + MODULE_NAME, + SOCKET_STATE_KEY +} = require('../options/constants') // create debug const debug = require('debug') +const colors = require('colors/safe') // const _debug = getDebug('helpers') const WS_KEYS = [ WS_REPLY_TYPE, WS_EVT_NAME, WS_DATA_NAME ] @@ -25,6 +41,19 @@ const WS_KEYS = [ WS_REPLY_TYPE, WS_EVT_NAME, WS_DATA_NAME ] */ const getDebug = name => debug(MODULE_NAME).extend(name) +/** + * Create a rainbow effect debug on the first string + * help to id where the hell things coming from + * @param {string} name the extended name + * @return {function} the debug function + */ +const getRainbowDebug = name => { + const fn = getDebug(name) + return (str, ...args) => { + Reflect.apply(fn, null, [colors.rainbow(str+'')].concat(args)) + } +} + /** * The ws doesn't have a acknowledge callback like socket.io * so we have to DIY one for ws and other that doesn't have it @@ -79,25 +108,7 @@ const extractWsPayload = payload => { throw new JsonqlError('payload can not decoded', payload) } -/** - * We are going to completely change this - * 1. there will only be max two namespace - * 2. when it's normal we will have the stock path as namespace - * 3. when enableAuth then we will have two one is jsonql/public + private - * @param {object} config options - * @return {array} of namespace(s) - */ -const getNamespace = function(config) { - const base = JSONQL_PATH - if (config.enableAuth) { - // the public come first - return [ - [ base , config.publicNamespace].join('/'), - [ base , config.privateNamespace].join('/') - ] - } - return [ base ] -} + // just an empty method for addProperty getter const nil = function() { @@ -105,6 +116,7 @@ const nil = function() { } /** + * Should this be elsewhere because this is * get the userdata via the decoded jwt from the request object * @TODO we need to create a hook that let developer to plug in their own * implementation in the future, @@ -113,16 +125,50 @@ const nil = function() { * @return {object} userdata */ function getUserdata(req) { - return req && req.state && req.state.userdata ? req.state.userdata : false + debug(`check what is missing`, req[SOCKET_STATE_KEY]) + return req && req[SOCKET_STATE_KEY] && req[SOCKET_STATE_KEY].userdata + ? req[SOCKET_STATE_KEY].userdata + : false +} + +/** + * Inject extra properties to the userdata object + * @param {object} userdata the decoded userdata from the token string + * @param {string} client_id the client_id issue by the socket server + * @return {object} userdata injected with new properties + */ +function prepareUserdata(userdata, client_id) { + const fn1 = () => objDefineProps(userdata, SOCKET_CLIENT_ID_KEY, client_id) + const fn2 = () => objDefineProps(userdata, SOCKET_CLIENT_TS_KEY, Date.now()) + return chainFns([fn1, fn2])(userdata) } +/** + * check if an object is our userdata + * @param {*} userdata + * @return {boolean} true + */ +function isUserdata(userdata) { + if (userdata !== false && typeof userdata === 'object') { + return objHasProp(SOCKET_CLIENT_ID_KEY) && objHasProp(SOCKET_CLIENT_TS_KEY) + } + return false +} + + // export module.exports = { - createWsReply, getDebug, + getRainbowDebug, + + createWsReply, getNamespace, extractWsPayload, - nil, + getUserdata, + prepareUserdata, + isUserdata, + + nil, isFunc } diff --git a/packages/ws-server-core/src/share/namespace.js b/packages/ws-server-core/src/share/namespace.js new file mode 100644 index 0000000000000000000000000000000000000000..fcf82d20991a0c1faa9b67ac598da898692be3cf --- /dev/null +++ b/packages/ws-server-core/src/share/namespace.js @@ -0,0 +1,81 @@ +// this is move back from jsonql-utils +// because this is very socket specific + +/** + * @BUG we should check the socket part instead of expect the downstream to read the menu! + * We only need this when the enableAuth is true otherwise there is only one namespace + * @param {object} contract the socket part of the contract file + * @param {boolean} [fallback=false] this is a fall back option for old code + * @return {object} 1. remap the contract using the namespace --> resolvers + * 2. the size of the object (1 all private, 2 mixed public with private) + * 3. which namespace is public + */ +function groupByNamespace(contract, fallback = false) { + let socket = extractSocketPart(contract) + if (socket === false) { + if (fallback) { + return contract; // just return the whole contract + } + throw new JsonqlError(`socket not found in contract!`) + } + let nspSet = {} + let size = 0 + let publicNamespace + for (let resolverName in socket) { + let params = socket[resolverName] + let { namespace } = params + if (namespace) { + if (!nspSet[namespace]) { + ++size; + nspSet[namespace] = {} + } + nspSet[namespace][resolverName] = params + if (!publicNamespace) { + if (params.public) { + publicNamespace = namespace + } + } + } + } + return { size, nspSet, publicNamespace } +} + +/** + * @NOTE ported from jsonql-ws-client + * Got to make sure the connection order otherwise + * it will hang + * @param {object} nspSet contract + * @param {string} publicNamespace like the name said + * @return {array} namespaces in order + */ +function getNamespaceInOrder(nspSet, publicNamespace) { + let names = [] // need to make sure the order! + for (let namespace in nspSet) { + if (namespace === publicNamespace) { + names[1] = namespace + } else { + names[0] = namespace + } + } + return names +} + +/** + * @TODO this might change, what if we want to do room with ws + * 1. there will only be max two namespace + * 2. when it's normal we will have the stock path as namespace + * 3. when enableAuth then we will have two, one is jsonql/public + private + * @param {object} config options + * @return {array} of namespace(s) + */ +const getNamespace = function(config) { + const base = JSONQL_PATH + if (config.enableAuth) { + // the public come first + return [ + [ base , config.publicNamespace].join('/'), + [ base , config.privateNamespace].join('/') + ] + } + return [ base ] +} \ No newline at end of file diff --git a/packages/ws-server-core/src/share/resolve-method.js b/packages/ws-server-core/src/share/resolve-method.js index 3975494ea87a0d44d28d486014e42c402b2c87e1..7c85b0bf06e97e61b64f74446df91d202e069591 100644 --- a/packages/ws-server-core/src/share/resolve-method.js +++ b/packages/ws-server-core/src/share/resolve-method.js @@ -14,10 +14,10 @@ DEFAULT_RESOLVER_IMPORT_FILE_NAME, const { SOCKET_NAME } = require('jsonql-constants') const { getResolver } = require('jsonql-resolver') -const { getDebug } = require('./helpers') +const { getRainbowDebug } = require('./helpers') const { addProperty } = require('./add-property') -const debug = getDebug('resolve-method') +const debug = getRainbowDebug('resolve-method') /** * similiar to the one in Koa-middleware without the ctx @@ -31,14 +31,15 @@ const debug = getDebug('resolve-method') */ const resolveMethod = function(resolverName, args, params, opts, ws, userdata = false) { debug('wsServerCore.resolveMethod', params) // check what is this then decided what to do later + debug(`resolveMethod userdata`, userdata) // the contract is always part of the options here const { contract } = opts const fn = getResolver(resolverName, SOCKET_NAME, contract, opts) - + return addProperty(fn, resolverName, ws, userdata, opts) - .then(tfn => { + .then(resolver => { try { - return Reflect.apply(tfn, null, args) + return Reflect.apply(resolver, null, args) } catch(e) { debug(`resolveMethod Error`, e) throw new JsonqlResolverAppError(resolverName, e) @@ -46,16 +47,5 @@ const resolveMethod = function(resolverName, args, params, opts, ws, userdata = }) } -/** - * @TODO for 0.7.0 how do we allow user to create their own interceptors - * Find the auth related interceptors (handlers) - */ -/* -const resolveInterceptors = function(interceptorName, args, params, opts, ws, userdata = false) { - const { contract } = opts - const fn = getResolver(interceptorName, join(SOCKET_NAME)) -} -*/ - // we only need to export one method module.exports = { resolveMethod } diff --git a/packages/ws-server/src/core/handles/handle-nsp.js b/packages/ws-server/src/core/handles/handle-nsp.js index e7602964a5c69b011e4b781f5b7db91f6e99d01e..f7ca24aa723b453c24a63671ddf906a0ea41206a 100644 --- a/packages/ws-server/src/core/handles/handle-nsp.js +++ b/packages/ws-server/src/core/handles/handle-nsp.js @@ -43,7 +43,9 @@ const fnHandler = (ws, payload, resolverName, params, opts, userdata) => { ) ) .then(result => { - debug('result', result) + + debug('resolver return result', result) + // decide if we need to call the cb or not here if (isNotEmpty(result)) { cb(createWsReply(ACKNOWLEDGE_REPLY_TYPE, resolverName, result)) @@ -69,8 +71,9 @@ const handleNsp = (ws, json, socketFns, opts, userdata = false) => { // const ts = json[TIMESTAMP_PARAM_NAME] // keep this for use later for (let resolverName in json) { if (resolverName !== TIMESTAMP_PARAM_NAME) { // dirty hack for now - // dirty hack + debug('connection call', resolverName) + let payload = json[resolverName] let params = socketFns[resolverName] // we need to use the decoded token --> userdata diff --git a/packages/ws-server/src/core/modules.js b/packages/ws-server/src/core/modules.js index 17502fbd4f3c3b149b6cdcb135fdbd303a94f514..17dc57b1f730bba29406aee90149af7c062e9cb6 100644 --- a/packages/ws-server/src/core/modules.js +++ b/packages/ws-server/src/core/modules.js @@ -9,9 +9,16 @@ const { wsServerConstProps, getNamespace, getDebug, + getRainbowDebug, + createWsReply, + resolveMethod, + getUserdata, - resolveMethod + isUserdata, + prepareUserdata, + + SOCKET_STATE_KEY } = require('../../../ws-server-core') //require('jsonql-ws-server-core') module.exports = { @@ -23,9 +30,16 @@ module.exports = { wsServerDefaultOptions, wsServerConstProps, getNamespace, + getDebug, + getRainbowDebug, + createWsReply, + resolveMethod, + getUserdata, - resolveMethod + isUserdata, + prepareUserdata, + SOCKET_STATE_KEY } \ No newline at end of file diff --git a/packages/ws-server/src/core/verify-client.js b/packages/ws-server/src/core/verify-client.js index 2b6008ce07104ba1cbee0cb1a040a84cdb60fb2e..b1c69df801aac1a4a5297254ebb355b25193f23d 100644 --- a/packages/ws-server/src/core/verify-client.js +++ b/packages/ws-server/src/core/verify-client.js @@ -5,7 +5,7 @@ const url = require('url') const { parse } = require('querystring') const { TOKEN_PARAM_NAME } = require('jsonql-constants') const { jwtDecode } = require('jsonql-jwt') - +const { SOCKET_STATE_KEY } = require('./modules') const { debug } = require('../utils') /* @@ -57,11 +57,11 @@ function createVerifyClient(publicKey, jwtOptions = {}, failCallback = false) { debug(`verifyClient decoded with result:`, payload) - if (!info.req.state) { - info.req.state = {} + if (!info.req[SOCKET_STATE_KEY]) { + info.req[SOCKET_STATE_KEY] = {} } // passing this along to the next - info.req.state.userdata = payload + info.req[SOCKET_STATE_KEY].userdata = payload return done(payload) } catch(e) { done(false) diff --git a/packages/ws-server/src/core/ws-create-server.js b/packages/ws-server/src/core/ws-create-server.js index b3a5b1aee6a51f76793e02495d8f84aff14c0c08..4cc149db3f7c087cf893a07974dff82ac06a630c 100644 --- a/packages/ws-server/src/core/ws-create-server.js +++ b/packages/ws-server/src/core/ws-create-server.js @@ -70,8 +70,10 @@ function wsCreateServer(config, server) { // we will always call it via a namespace server.on('upgrade', function upgrade(req, socket, head) { const pathname = getPath(req) + debug('Hear the upgrade event', pathname) - let srv = false; + + let srv = false if ((srv = getWssByPath(nsps, pathname)) !== false) { srv.handleUpgrade(req, socket, head, function done(ws) { debug('found a srv to handle the call') diff --git a/packages/ws-server/src/core/ws-setup.js b/packages/ws-server/src/core/ws-setup.js index 122c2f4e5e1e0c94c3a4699cd79be6e927258bcd..37783a20c67c6bb5bcfe71691fa494088a004714 100644 --- a/packages/ws-server/src/core/ws-setup.js +++ b/packages/ws-server/src/core/ws-setup.js @@ -8,7 +8,9 @@ const { } = require('jsonql-constants') const { getDebug, + getRainbowDebug, getUserdata, + SOCKET_STATE_KEY } = require('./modules') const { handleInterCom, @@ -19,7 +21,7 @@ const { } = require('./handles') const debug = getDebug('ws-setup') - +const rdebug = getRainbowDebug('ws-setup') /** * We might want to send just a simple message back with a string * instead of a full payload @@ -45,9 +47,11 @@ const wsSetup = (opts, nspObj) => { if (opts.enableAuth) { nspInfo = groupByNamespace(socketFns, true) } + rdebug('nspInfo', nspInfo) + let { publicNamespace, nspSet } = nspInfo for (let namespace in nspObj) { - let userdata; + let userdata nspObj[namespace].on('connection', (ws, req) => { // the data part is different again // because there are only two events type in ws @@ -55,10 +59,14 @@ const wsSetup = (opts, nspObj) => { // so the data is wrap inside the resolverName ws.on('message', data => { let json = getPayload(data) + debug('called with: ', json) + if (nspSet) { let methodsInNsp = nspSet[namespace] - debug(namespace, methodsInNsp) + + debug('nspSet', namespace, methodsInNsp) + for (let resolverName in json) { switch (true) { case resolverName === LOGOUT_EVENT_NAME: @@ -71,6 +79,7 @@ const wsSetup = (opts, nspObj) => { debug('methodsInNsp[resolverName]', methodsInNsp[resolverName]) // only the private one will get a userdata property if (namespace !== publicNamespace) { + debug(`call get userdata`, req[SOCKET_STATE_KEY]) userdata = getUserdata(req) } handleNsp(ws, json, socketFns, opts, userdata) @@ -80,7 +89,10 @@ const wsSetup = (opts, nspObj) => { } } } else { // just public nsp - debug(`using public nsp`) + // the bug is here but how come the client disconnect and reconnect can affect + // the server setup? + + debug(`using public nsp`, namespace) handleNsp(ws, json, socketFns, opts) } })