diff --git a/packages/constants/README.md b/packages/constants/README.md index 283c8ca9fb1d18fbd5661f527464916909ecde80..b0799aab740a46bc7082b8141a1e002d782c5be6 100755 --- a/packages/constants/README.md +++ b/packages/constants/README.md @@ -91,6 +91,8 @@ Please consult the detail break down below. - UNAUTHORIZED_STATUS - FORBIDDEN_STATUS - NOT_FOUND_STATUS +- NOT_ACCEPTABLE_STATUS +- SERVER_INTERNAL_STATUS - DEFAULT_PORT_NUM - CSRF_HEADER_KEY - ORIGIN_HEADER_KEYS diff --git a/packages/constants/base.js b/packages/constants/base.js index 90cb479b789e5a824a73ad5fc7d9fe69257b0e87..65a6d698600967569f6376bf008f94479de88776 100644 --- a/packages/constants/base.js +++ b/packages/constants/base.js @@ -115,11 +115,6 @@ export const RETURN_AS_ENUM = [ export const NO_ERROR_MSG = 'No message' export const NO_STATUS_CODE = -1 - - - - - // this are property keys used in the configuration options // and re-use elsewhere export const INIT_CLIENT_PROP_KEY = 'nodeClient' @@ -131,6 +126,8 @@ export const SUCCESS_STATUS = 200 export const UNAUTHORIZED_STATUS = 401 export const FORBIDDEN_STATUS = 403 export const NOT_FOUND_STATUS = 404 +export const NOT_ACCEPTABLE_STATUS = 406 +export const SERVER_INTERNAL_STATUS = 500 // just whatever export const DEFAULT_PORT_NUM = 6557 // headers diff --git a/packages/constants/browser.js b/packages/constants/browser.js index 06b8fb5c36dbb9425d755a8954c9677e33cb1151..c1c21552d88e2b4c253de0b9cdcff10a441e240a 100644 --- a/packages/constants/browser.js +++ b/packages/constants/browser.js @@ -92,6 +92,8 @@ var jsonqlConstants = { "UNAUTHORIZED_STATUS": 401, "FORBIDDEN_STATUS": 403, "NOT_FOUND_STATUS": 404, + "NOT_ACCEPTABLE_STATUS": 406, + "SERVER_INTERNAL_STATUS": 500, "DEFAULT_PORT_NUM": 6557, "CSRF_HEADER_KEY": "X-CSRF-Token", "ORIGIN_HEADER_KEYS": [ diff --git a/packages/constants/build.js b/packages/constants/build.js index 48bce60f81d020266e749a9e89592ce199cf966e..2536d1b838c332c6e09b2fe6b667a318f2ac3ab9 100644 --- a/packages/constants/build.js +++ b/packages/constants/build.js @@ -9,6 +9,11 @@ const files = [ 'validation.js' ] const importFn = require('./import') +// just concat the file together as on for index.js +// keep getting prop not export by file error by rollup +const indexOutput = files.map(file => ( + `/* ${file} */\n\n` + fsx.readFileSync(join(__dirname, file), { encoding: 'utf8'}) +)).reduce((a, b) => a + '\r' + b, '') let readme = '\n' @@ -31,6 +36,8 @@ const strJson = `${JSON.stringify(allProps, null, 4)}` const cjs = `module.exports = ${strJson}` const browser = `var jsonqlConstants = ${strJson}` +// output to index +fsx.outputFileSync(join(__dirname, 'index.js'), indexOutput) // output to README const tpl = fsx.readFileSync(join(__dirname, 'README_TEMPLATE.md')) const content = tpl.toString().replace('[REPLACE]', readme) diff --git a/packages/constants/constants.json b/packages/constants/constants.json index afe94d1324ad39b7830da5b0c123d0c4f9a777b8..eeca1477306c8b04ba9ddf84bf12234d00769da4 100644 --- a/packages/constants/constants.json +++ b/packages/constants/constants.json @@ -92,6 +92,8 @@ "UNAUTHORIZED_STATUS": 401, "FORBIDDEN_STATUS": 403, "NOT_FOUND_STATUS": 404, + "NOT_ACCEPTABLE_STATUS": 406, + "SERVER_INTERNAL_STATUS": 500, "DEFAULT_PORT_NUM": 6557, "CSRF_HEADER_KEY": "X-CSRF-Token", "ORIGIN_HEADER_KEYS": [ diff --git a/packages/constants/index.js b/packages/constants/index.js index 54bbeb8dcfc0273361493e66fd9cb171d4590974..c7de3c37e0877a8785e8f5da2424e01350415e69 100644 --- a/packages/constants/index.js +++ b/packages/constants/index.js @@ -1,18 +1,380 @@ -// this was the main files before -// now this is an import interface to combine all the sectioned files -import * as BASE from './base' -import * as PROP from './prop' -import * as SOCKET from './socket' -import * as VALIDATION from './validation' - -// need to do a dump way to put them together without using a merge method -const ALL_VARS = [ BASE, PROP, SOCKET, VALIDATION ].map(p => { - let obj = {} // turn it into a plain object - for (let n in p) { - obj[n] = p[n] - } - return obj -}) -.reduce((a, b) => Object.assign(a, b), {}) - -export default ALL_VARS + /* base.js */ + +export const EXT = 'js' // we might do a ts in the future +export const TS_EXT = 'ts' + +export const HELLO = 'Hello world!' +export const HELLO_FN = 'helloWorld' +// the core stuff to id if it's calling with jsonql +export const DATA_KEY = 'data' +export const ERROR_KEY = 'error' + +export const JSONQL_PATH = 'jsonql' +// according to the json query spec +export const CONTENT_TYPE = 'application/vnd.api+json' +export const CHARSET = 'charset=utf-8' +export const DEFAULT_HEADER = { + 'Accept': CONTENT_TYPE, + 'Content-Type': [ CONTENT_TYPE, CHARSET ].join('') +} + +// export const INDEX = 'index' use INDEX_KEY instead +export const DEFAULT_TYPE = 'any' +// contract file names +// export const DEFAULT_FILE_NAME = 'contract.json' // @TODO remove once all changed +// 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 @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' + +// @TODO remove this is not in use +// export const CLIENT_CONFIG_FILE = '.clients.json' +// export const CONTRACT_CONFIG_FILE = 'jsonql-contract-config.js' +// type of resolvers +export const QUERY_NAME = 'query' +export const MUTATION_NAME = 'mutation' +export const SOCKET_NAME = 'socket' +export const CONTRACT_NAME = 'contract' +export const RESOLVER_TYPES = [ + QUERY_NAME, + MUTATION_NAME, + SOCKET_NAME +] +// for calling the mutation +export const PAYLOAD_PARAM_NAME = 'payload' // @TODO shortern them +export const CONDITION_PARAM_NAME = 'condition' +export const RESOLVER_PARAM_NAME = 'resolverName' +export const QUERY_ARG_NAME = 'args' +export const TIMESTAMP_PARAM_NAME = 'TS' +export const MUTATION_ARGS = [ + RESOLVER_PARAM_NAME, + PAYLOAD_PARAM_NAME, + CONDITION_PARAM_NAME +] +// new jsonp +export const JSONP_CALLBACK_NAME = 'jsonqlJsonpCallback' + +// methods allow +export const API_REQUEST_METHODS = ['POST', 'PUT'] +export const CONTRACT_REQUEST_METHODS = ['GET', 'HEAD'] +// for contract-cli +export const KEY_WORD = 'continue' +export const PUBLIC_KEY = 'public' +export const PRIVATE_KEY = 'private' + + +// author +export const AUTH_TYPE = 'auth' +export const AUTH_NAME = AUTH_TYPE // alias +export const LOGIN_FN_NAME = 'login' +// export const ISSUER_NAME = LOGIN_NAME // legacy issue need to replace them later +export const LOGOUT_FN_NAME = 'logout' +export const VALIDATOR_FN_NAME = 'validator' +export const DISCONNECT_FN_NAME = 'disconnect' +export const SWITCH_USER_FN_NAME = 'switch-user' + +export const AUTH_HEADER = 'Authorization' +export const AUTH_CHECK_HEADER = 'authorization' // this is for checking so it must be lowercase +export const BEARER = 'Bearer' + +// for client use @TODO need to clean this up some of them are not in use +export const CREDENTIAL_STORAGE_KEY = 'jsonqlcredential' +export const CLIENT_STORAGE_KEY = 'jsonqlstore' +export const CLIENT_AUTH_KEY = 'jsonqlauthkey' +// for id the multiple storage engine +export const INDEX_KEY = 'index' +// contract key +export const CONTRACT_KEY_NAME = 'X-JSONQL-CV-KEY' +export const SHOW_CONTRACT_DESC_PARAM = {desc: 'y'} +// directories +export const DEFAULT_RESOLVER_DIR = 'resolvers' +export const DEFAULT_CONTRACT_DIR = 'contracts' +export const DEFAULT_KEYS_DIR = 'keys' +// add in V1.3.4 start supporting socket + +// for validation +export const CJS_TYPE = 'cjs' +export const ES_TYPE = 'es' +export const TS_TYPE = 'ts' +export const ACCEPTED_JS_TYPES = [ + CJS_TYPE, + ES_TYPE +] // not accept this TS_TYPE at the moment + +// for contract cli +export const RETURN_AS_FILE = 'file' +export const RETURN_AS_JSON = 'json' +export const RETURN_AS_ENUM = [ + RETURN_AS_FILE, + RETURN_AS_JSON +] + +export const NO_ERROR_MSG = 'No message' +export const NO_STATUS_CODE = -1 + +// this are property keys used in the configuration options +// and re-use elsewhere +export const INIT_CLIENT_PROP_KEY = 'nodeClient' +export const INIT_CONTRACT_PROP_KEY = 'initContract' + + +// status +export const SUCCESS_STATUS = 200 +export const UNAUTHORIZED_STATUS = 401 +export const FORBIDDEN_STATUS = 403 +export const NOT_FOUND_STATUS = 404 +export const NOT_ACCEPTABLE_STATUS = 406 +export const SERVER_INTERNAL_STATUS = 500 +// just whatever +export const DEFAULT_PORT_NUM = 6557 +// headers +export const CSRF_HEADER_KEY = 'X-CSRF-Token' +export const ORIGIN_HEADER_KEYS = ['Origin'] +export const WILD_CARD_CHAR = '*' + /* prop.js */ + +// this is all the key name for the config check map +// all subfix with prop_key + +export const TYPE_KEY = 'type' +export const OPTIONAL_KEY = 'optional' +export const ENUM_KEY = 'enumv' // need to change this because enum is a reserved word +export const ARGS_KEY = 'args' +export const CHECKER_KEY = 'checker' +export const ALIAS_KEY = 'alias' +// @TODO remove this later +export const CHECKED_KEY = '__checked__' + +// first part port from the ws-server-core +export const APP_DIR_PROP_KEY = 'appDir' + +export const AUTH_TO_PROP_KEY = 'authTimeout' +export const ENABLE_AUTH_PROP_KEY = 'enableAuth' +export const USE_JWT_PROP_KEY = 'useJwt' +export const RESOLVER_DIR_PROP_KEY = 'resolverDir' +export const CONTRACT_DIR_PROP_KEY = 'contractDir' + +export const INIT_CONNECTION_FN_NAME_PROP_KEY = 'initConnectionHandlerName' +export const LOGIN_FN_NAME_PROP_KEY = 'loginHandlerName' +export const LOGOUT_FN_NAME_PROP_KEY = 'logoutHandlerName' +export const DISCONNECT_FN_NAME_PROP_KEY = 'disconnectHandlerName' +export const SWITCH_USER_FN_NAME_PROP_KEY = 'switchUserHandlerName' +// this has changed and now make more sense +export const PUBLIC_FN_DIR_PROP_KEY = 'publicResolverDir' +export const PRIVATE_FN_DIR_DROP_KEY = 'privateResolverDir' + +// socket specific +export const ALGORITHM_PROP_KEY = 'algorithm' +export const KEYS_DIR_PROP_KEY = 'keysDir' +export const SOCKET_IO_AUTH_TYPE_PROP_KEY = 'socketIoAuthType' +export const SERVER_INIT_OPT_PROP_KEY = 'serverInitOption' +// type name and Alias +export const SOCKET_TYPE_PROP_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 CSRF_PROP_KEY = 'csrf' +export const ALLOW_ORIGIN_PROP_KEY = 'allowOrigin' + +export const STANDALONE_PROP_KEY = 'standalone' +export const DEBUG_ON_PROP_KEY = 'debugOn' + +export const HOSTNAME_PROP_KEY = 'hostname' +export const NAMESAPCE_PROP_KEY = 'namespace' + +export const WS_OPT_PROP_KEY = 'wsOptions' + +export const CONTRACT_PROP_KEY = 'contract' +export const TOKEN_PROP_KEY = 'token' + +export const INIT_CONTRACT_PROP_KEY = 'initContract' +export const CONTENT_TYPE_PROP_KEY = 'contentType' +export const RETURN_AS_PROP_KEY = 'returnAs' +export const NAME_PROP_KEY = 'appName' + +export const EXPIRED_PROP_KEY = 'expired' +export const APP_ROOT_DIR_PROP_KEY = 'appRootDir' + +export const JWT_TOKEN_OPT_PROP_KEY = 'jwtTokenOption' + +export const ENABLE_JSONP_PROP_KEY = 'enableJsonp' + +export const CONTRACT_WITH_DESC_PROP_KEY = 'contractWithDesc' +export const WITH_PUBLIC_CONTRACT_PROP_KEY = 'withPublicContract' +export const PUBLIC_KEY_NAME_PROP_KEY = 'publicKeyFileName' +export const PRIVATE_KEY_NAME_PROP_KEY = 'privateKeyFileName' + +export const RSA_MODULE_LEN_PROP_KEY = 'rsaModulusLength' + +export const JSONQL_PATH_PROP_KEY = 'jsonqlPath' + +export const CONTRACT_KEY_PROP_KEY = 'contractKey' +export const CONTRACT_KEY_NAME_PROP_KEY = 'contractKeyName' + +export const ENABLE_WEB_CONSOLE_PROP_KEY = 'enableWebConsole' +export const JS_TYPE_PROP_KEY = 'jsType' + +export const EXPOSE_ERR_PROP_KEY = 'exposeError' + +export const CLIENT_CONFIG_PROP_KEY = 'clientConfig' +// this will combine all three options together +// because they are redudant if set this to true +// then whenever start up will build a fresh new contract like now +// if false then the developer has to manually build the contract +// which is what production suppose to be +export const AUTO_CONTRACT_PROP_KEY = 'autoCreateContract' +// still under development +export const VALIDATE_RETURNS_PROP_KEY = 'validateReturns' +export const ENABLE_UPLOAD_PROP_KEY = 'enableFileUpload' +export const FILE_UPLOAD_NAME_PROP_KEY = 'fileUploadName' +export const FILE_UPLOAD_DIST_PROP_KEY = 'fileUploadDist' +export const FILE_HANDLER_FN_NAME_PROP_KEY = 'fileHandlerName' + +export const ENABLE_SPLIT_TASK_PROP_KEY = 'enableSplitTask' + + /* socket.js */ + +// the constants file is gettig too large +// we need to split up and group the related constant in one file +// also it makes the other module easiler to id what they are importing +// use throughout the clients +export const SOCKET_PING_EVENT_NAME = '__ping__' // when init connection do a ping +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 +// perform a standalone login method +export const SA_LOGIN_EVENT_NAME = '__standalone_login__' +// 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 +// 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 +// 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 +// disconnect from the current server, then re-establish connection later +export const CONNECTED_EVENT_NAME = '__connected__' +export const DISCONNECT_EVENT_NAME = '__disconnect__' +// instead of using an event name in place of resolverName in the param +// we use this internal resolverName instead, and in type using the event names +export const INTERCOM_RESOLVER_NAME = '__intercom__' +// 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 = [ + CONNECTED_EVENT_NAME, + SWITCH_USER_EVENT_NAME, + DISCONNECT_EVENT_NAME +] +// for ws servers +export const WS_REPLY_TYPE = '__reply__' +export const WS_EVT_NAME = '__event__' +export const WS_DATA_NAME = '__data__' +export const WS_IS_REPLY_KEYS = [ + WS_REPLY_TYPE, + WS_EVT_NAME, + WS_DATA_NAME +] + +// 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' +export const ON_READY_FN_NAME = 'onReady' +export const ON_LOGIN_FN_NAME = 'onLogin' // new @1.8.6 +// the actual method name client.resolverName.send +export const SEND_MSG_FN_NAME = 'send' + +// this one is for nodeClient inject into the resolver +export const CLIENT_PROP_NAME = 'client' +export const USERDATA_PROP_NAME = 'userdata' + +// this is somewhat vague about what is suppose to do +export const EMIT_REPLY_TYPE = 'emit_reply' +export const ACKNOWLEDGE_REPLY_TYPE = 'acknowledge_reply' + + +export const NSP_GROUP = 'nspGroup' +export const PUBLIC_NAMESPACE = 'publicNamespace' + +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' + + +// this is the default time to wait for reply if exceed this then we +// trigger an error --> 5 seconds +export const DEFAULT_WS_WAIT_TIME = 5000 +export const DEFAULT_RETRY_TIME = 3000 // 1.9.0 +export const TIMEOUT_ERR_MSG = 'timeout' +export const NOT_LOGIN_ERR_MSG = 'NOT LOGIN' +// for crypto operation +export const BASE64_FORMAT = 'base64' +export const HEX_FORMAT = 'hex' +export const UTF8_FORMAT = 'utf8' +export const RSA_FORMATS = [ + BASE64_FORMAT, + HEX_FORMAT +] +export const RSA_ALGO = 'RS256' +export const HSA_ALGO = 'HS256' +export const JWT_SUPPORT_ALGOS = [ + RSA_ALGO, + HSA_ALGO +] +export const RSA_PRIVATE_KEY_HEADER = 'BEGIN RSA PRIVATE KEY' +export const RSA_MIN_MODULE_LEN = 1024 +export const RSA_MAX_MODULE_LEN = 4096 +export const TOKEN_PARAM_NAME = 'token' +export const IO_ROUNDTRIP_LOGIN = 'roundtip' +export const IO_HANDSHAKE_LOGIN = 'handshake' +export const IO_LOGIN_METHODS = [ + IO_ROUNDTRIP_LOGIN, + IO_HANDSHAKE_LOGIN +] + +export const PEM_EXT = 'pem' +export const PUBLIC_KEY_NAME = 'publicKey' +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('.') + /* validation.js */ + +// validation related constants + + +export const OR_SEPERATOR = '|' + +export const FUNCTION_TYPE = 'function' +export const STRING_TYPE = 'string' +export const BOOLEAN_TYPE = 'boolean' +export const ARRAY_TYPE = 'array' +export const OBJECT_TYPE = 'object' +export const ANY_TYPE = 'any' + +export const NUMBER_TYPE = 'number' +export const NUMBER_TYPES = ['int', 'integer', 'float', 'double', 'decimal'] +// supported types +export const SUPPORTED_TYPES = [ + NUMBER_TYPE, + STRING_TYPE, + BOOLEAN_TYPE, + ARRAY_TYPE, + OBJECT_TYPE, + ANY_TYPE +] + +export const ARRAY_TS_TYPE_LFT = 'Array<' +export const ARRAY_TYPE_LFT = 'array.<' +export const ARRAY_TYPE_RGT = '>' \ No newline at end of file diff --git a/packages/constants/main.js b/packages/constants/main.js index 7aa1fbcfb1f216ba5272131844af2d7536c52c09..83266d1b2e198af779b1792a9cce86686d0bd8b1 100644 --- a/packages/constants/main.js +++ b/packages/constants/main.js @@ -92,6 +92,8 @@ module.exports = { "UNAUTHORIZED_STATUS": 401, "FORBIDDEN_STATUS": 403, "NOT_FOUND_STATUS": 404, + "NOT_ACCEPTABLE_STATUS": 406, + "SERVER_INTERNAL_STATUS": 500, "DEFAULT_PORT_NUM": 6557, "CSRF_HEADER_KEY": "X-CSRF-Token", "ORIGIN_HEADER_KEYS": [ diff --git a/packages/constants/package.json b/packages/constants/package.json index 23c1dd1fae33fdab449af16e52c3f6430ca3ecbd..a8be312a6c8a9a9feb8c78bb2655ff85af056750 100755 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-constants", - "version": "2.0.0", + "version": "2.0.1", "description": "All the share constants for jsonql modules", "main": "main.js", "module": "index.js", diff --git a/packages/errors/package.json b/packages/errors/package.json index aa145afc42a9cd17caa896f31cc333ecd4dde5fb..949bac96afcc419cc93b434087bdfe04b3bca14e 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,13 +1,13 @@ { "name": "jsonql-errors", - "version": "1.1.10", + "version": "1.2.0", "description": "Jsonql js error classes use across the projects", "main": "dist/jsonql-errors.cjs.js", "module": "index.js", "browser": "dist/jsonql-errors.umd.js", "scripts": { "prepare": "npm run build", - "test": "ava --verbose", + "test": "ava", "test:server": "ava ./tests/server.test.js", "test:run": "node ./tests/helpers/run.js", "test:fn": "ava ./tests/fn.test.js", @@ -27,26 +27,27 @@ "Error" ], "devDependencies": { - "ava": "^2.4.0", + "acorn": "^7.1.1", + "ava": "^3.5.0", "debug": "^4.1.1", "esm": "^3.2.25", "fs-extra": "^8.1.0", "koa": "^2.11.0", "koa-bodyparser": "^4.2.1", - "rollup": "^1.27.9", + "rollup": "^2.0.6", "rollup-plugin-alias": "^2.2.0", "rollup-plugin-async": "^1.2.0", "rollup-plugin-buble": "^0.19.8", "rollup-plugin-bundle-size": "^1.0.3", "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-copy": "^3.1.0", + "rollup-plugin-copy": "^3.3.0", "rollup-plugin-json": "^4.0.0", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-replace": "^2.2.0", "rollup-plugin-serve": "^1.0.1", - "rollup-plugin-terser": "^5.1.2", + "rollup-plugin-terser": "^5.3.0", "superkoa": "^1.0.3" }, "repository": { @@ -55,16 +56,18 @@ }, "ava": { "files": [ - "tests/*.test.js", - "!tests/helpers/*.*", - "!tests/fixtures/*.*" + "tests/*.test.js" + ], + "ignoredByWatcher": [ + "tests/helpers/*.*", + "tests/fixtures/*.*" ], "cache": true, "concurrency": 5, "failFast": true, "failWithoutAssertions": false, "tap": false, - "compileEnhancements": false, + "verbose": true, "require": [ "esm" ] @@ -76,6 +79,6 @@ "author": "Joel Chu ", "license": "ISC", "dependencies": { - "jsonql-constants": "^1.8.13" + "jsonql-constants": "^2.0.0" } } diff --git a/packages/errors/src/406-error.js b/packages/errors/src/406-error.js index baf3700194ebe95da1e719c08d9bd6568b5fe7e9..35423ef2c1d97132afa24824ca486edaa8c6b5d2 100644 --- a/packages/errors/src/406-error.js +++ b/packages/errors/src/406-error.js @@ -12,7 +12,7 @@ export default class Jsonql406Error extends Error { this.detail = args[1] // We can't access the static name from an instance // but we can do it like this - this.className = Jsonql406Error.name; + this.className = Jsonql406Error.name if (Error.captureStackTrace) { Error.captureStackTrace(this, Jsonql406Error) diff --git a/packages/errors/src/500-error.js b/packages/errors/src/500-error.js index 58cf79515334e7dbcf088fb531d881ec0eedcb91..8be9da56908395b59d41792482395441eed69fc5 100644 --- a/packages/errors/src/500-error.js +++ b/packages/errors/src/500-error.js @@ -11,7 +11,7 @@ export default class Jsonql500Error extends Error { this.message = args[0] this.detail = args[1] - this.className = Jsonql500Error.name; + this.className = Jsonql500Error.name if (Error.captureStackTrace) { Error.captureStackTrace(this, Jsonql500Error) @@ -19,11 +19,11 @@ export default class Jsonql500Error extends Error { } static get statusCode() { - return 500; + return 500 } static get name() { - return 'Jsonql500Error'; + return 'Jsonql500Error' } } diff --git a/packages/errors/src/authorisation-error.js b/packages/errors/src/authorisation-error.js index 2ffc9adf5e50dba6f26639f9b43ad8d09d479ce8..08e6aa01427e2ede73ac33cc085bfd20bbd50e46 100644 --- a/packages/errors/src/authorisation-error.js +++ b/packages/errors/src/authorisation-error.js @@ -19,7 +19,7 @@ export default class JsonqlAuthorisationError extends Error { } static get statusCode() { - return 401; + return 401 } static get name() { diff --git a/packages/errors/src/checker-error.js b/packages/errors/src/checker-error.js index f4e45f9f88899a7e1259ce30ed160de0ff2930a9..9e6093438e2f6568fea403bb06bfab20e4dce92e 100644 --- a/packages/errors/src/checker-error.js +++ b/packages/errors/src/checker-error.js @@ -14,6 +14,6 @@ export default class JsonqlCheckerError extends Error { } static get name() { - return 'JsonqlCheckerError'; + return 'JsonqlCheckerError' } } diff --git a/packages/errors/src/client-errors-handler.js b/packages/errors/src/client-errors-handler.js index 8e542ec714701a4957314752f86590fdbd35c2d7..7a69a55791e9e56f33039a3a24adc9a97703a59d 100644 --- a/packages/errors/src/client-errors-handler.js +++ b/packages/errors/src/client-errors-handler.js @@ -1,8 +1,8 @@ // this will add directly to the then call in each http call import * as errors from './index' -import getErrorByStatus from './get-error-by-status' -import { NO_ERROR_MSG } from 'jsonql-constants' +// import getErrorByStatus from './get-error-by-status' +import { NO_ERROR_MSG } from 'jsonql-constants/base' const { JsonqlError } = errors /** @@ -13,7 +13,7 @@ const { JsonqlError } = errors */ const isObjectHasKey = (obj, key) => { const keys = Object.keys(obj) - return !!keys.filter(k => key === k).length; + return !!keys.filter(k => key === k).length } /** @@ -23,17 +23,17 @@ const isObjectHasKey = (obj, key) => { */ export default function clientErrorsHandler(result) { if (isObjectHasKey(result, 'error')) { - const { error } = result; - const { className, name } = error; - const errorName = className || name; + const { error } = result + const { className, name } = error + const errorName = className || name // just throw the whole thing back - const msg = error.message || NO_ERROR_MSG; - const detail = error.detail || error; + const msg = error.message || NO_ERROR_MSG + const detail = error.detail || error if (errorName && errors[errorName]) { throw new errors[className](msg, detail) } throw new JsonqlError(msg, detail) } // pass through to the next - return result; + return result } diff --git a/packages/errors/src/contants.js b/packages/errors/src/contants.js new file mode 100644 index 0000000000000000000000000000000000000000..79e0a70c8074ffe15a8cc3c26db5b73a0f477222 --- /dev/null +++ b/packages/errors/src/contants.js @@ -0,0 +1 @@ +// group all the constants one place diff --git a/packages/errors/src/contract-auth-error.js b/packages/errors/src/contract-auth-error.js index ad60b4b58dcc10abafafdab775ca294175ecb40d..95c8acdfacf0de83ad5065d9f6cf5a36a78e0fdc 100644 --- a/packages/errors/src/contract-auth-error.js +++ b/packages/errors/src/contract-auth-error.js @@ -1,3 +1,4 @@ +import { UNAUTHORIZED_STATUS } from 'jsonql-constants/base' /** * This is a custom error when not supply the credential and try to get contract @@ -11,18 +12,18 @@ export default class JsonqlContractAuthError extends Error { this.message = args[0] this.detail = args[1] - this.className = JsonqlContractAuthError.name; + this.className = JsonqlContractAuthError.name if (Error.captureStackTrace) { - Error.captureStackTrace(this, JsonqlContractAuthError); + Error.captureStackTrace(this, JsonqlContractAuthError) } } static get statusCode() { - return 401; + return UNAUTHORIZED_STATUS } static get name() { - return 'JsonqlContractAuthError'; + return 'JsonqlContractAuthError' } } diff --git a/packages/errors/src/enum-error.js b/packages/errors/src/enum-error.js index 607e6f25331eacb77d4eb3a63dbb0ffe2ac0e767..37b74d2202ba7bccd8f5714303f8aa189a8a14c2 100644 --- a/packages/errors/src/enum-error.js +++ b/packages/errors/src/enum-error.js @@ -9,11 +9,11 @@ export default class JsonqlEnumError extends Error { this.className = JsonqlEnumError.name; if (Error.captureStackTrace) { - Error.captureStackTrace(this, JsonqlEnumError); + Error.captureStackTrace(this, JsonqlEnumError) } } static get name() { - return 'JsonqlEnumError'; + return 'JsonqlEnumError' } } diff --git a/packages/errors/src/error.js b/packages/errors/src/error.js index 11d6c12c13059c3c838835e980d8059b0cb9045b..d07354541d889ed74802385c4488a244b73d5922 100644 --- a/packages/errors/src/error.js +++ b/packages/errors/src/error.js @@ -1,4 +1,4 @@ -import { NO_STATUS_CODE } from 'jsonql-constants' +import { NO_STATUS_CODE } from 'jsonql-constants/base' /** * This is a custom error to throw whenever a error happen inside the jsonql @@ -13,7 +13,7 @@ export default class JsonqlError extends Error { this.message = args[0] this.detail = args[1] - this.className = JsonqlError.name; + this.className = JsonqlError.name if (Error.captureStackTrace) { Error.captureStackTrace(this, JsonqlError) @@ -22,10 +22,10 @@ export default class JsonqlError extends Error { } static get name() { - return 'JsonqlError'; + return 'JsonqlError' } static get statusCode() { - return NO_STATUS_CODE; + return NO_STATUS_CODE } } diff --git a/packages/errors/src/final-catch.js b/packages/errors/src/final-catch.js index 82ba8e404f61c0dbf166f68813508b1b0faee8b8..aa3f985e4fc7af56d30ed887acf6870306625def 100644 --- a/packages/errors/src/final-catch.js +++ b/packages/errors/src/final-catch.js @@ -15,7 +15,7 @@ import JsonqlError from './error'; import JsonqlServerError from './server-error' -import { NO_ERROR_MSG } from 'jsonql-constants' +import { NO_ERROR_MSG } from 'jsonql-constants/base' /** * If using the instance of could not find the actual error then @@ -27,7 +27,7 @@ import { NO_ERROR_MSG } from 'jsonql-constants' * @return {boolean} if this is false then not found */ function getErrorByObject(e, msg, detail) { - + // @TODO } @@ -47,7 +47,7 @@ export default function finalCatch(e) { // to wrap this function to provide the name prop throw new JsonqlValidationError('', e) } - const msg = e.message || NO_ERROR_MSG; + const msg = e.message || NO_ERROR_MSG const detail = e.detail || e; // @BUG the instance of not always work for some reason! // need to figure out a better way to find out the type of the error diff --git a/packages/errors/src/forbidden-error.js b/packages/errors/src/forbidden-error.js index fbbf94f44c92fc9f62457d7b79a3e1c895e9a615..fc6f4c8e7ae09a53e428ce2f5abb0c14d2e3600d 100644 --- a/packages/errors/src/forbidden-error.js +++ b/packages/errors/src/forbidden-error.js @@ -1,4 +1,4 @@ - +import { FORBIDDEN_STATUS } from 'jsonql-constants/base' /** * this is the 403 Forbidden error * that means this user is not login @@ -15,12 +15,12 @@ export default class JsonqlForbiddenError extends Error { this.className = JsonqlForbiddenError.name; if (Error.captureStackTrace) { - Error.captureStackTrace(this, JsonqlForbiddenError); + Error.captureStackTrace(this, JsonqlForbiddenError) } } static get statusCode() { - return 403; + return FORBIDDEN_STATUS } static get name() { diff --git a/packages/errors/src/general.js b/packages/errors/src/general.js index c24cefecd73cd9240bb9d8493e47da3725803d25..25554afd5b4c19dfe64261ef63e4d0f71145644f 100644 --- a/packages/errors/src/general.js +++ b/packages/errors/src/general.js @@ -9,7 +9,7 @@ export default class GeneralError extends Error { this.message = args[0] this.detail = args[1] - this.className = GeneralError.name; + this.className = GeneralError.name if (Error.captureStackTrace) { Error.captureStackTrace(this, GeneralError) @@ -17,7 +17,7 @@ export default class GeneralError extends Error { } static get name() { - return 'GeneralError'; + return 'GeneralError' } } diff --git a/packages/errors/src/get-error-by-status.js b/packages/errors/src/get-error-by-status.js index 7daad76f5e796fe2a4459b121e02591ce6c929eb..a236085b8eee0ed89a77c90d2956e5a31f9435f1 100644 --- a/packages/errors/src/get-error-by-status.js +++ b/packages/errors/src/get-error-by-status.js @@ -1,4 +1,13 @@ // just a simple util method to return the error based on the status code +import { + UNAUTHORIZED_STATUS, + FORBIDDEN_STATUS, + NOT_FOUND_STATUS +} from 'jsonql-constants' +// not in the constants will add back later +const ERROR_406 = 406 +const ERROR_500 = 500 + /** * @param {number} statusCode to check * @param {boolean} contract if this is a contract call or not @@ -6,17 +15,17 @@ */ export default function getErrorByStatus(statusCode, contract = false) { switch (statusCode) { - case 401: - return contract ? 'JsonqlContractAuthError' : 'JsonqlAuthorisationError'; - case 403: - return 'JsonqlForbiddenError'; - case 404: - return 'JsonqlResolverNotFoundError'; - case 406: - return 'Jsonql406Error'; - case 500: - return 'Jsonql500Error'; + case UNAUTHORIZED_STATUS: + return contract ? 'JsonqlContractAuthError' : 'JsonqlAuthorisationError' + case FORBIDDEN_STATUS: + return 'JsonqlForbiddenError' + case NOT_FOUND_STATUS: + return 'JsonqlResolverNotFoundError' + case ERROR_406: + return 'Jsonql406Error' + case ERROR_500: + return 'Jsonql500Error' default: - return 'JsonqlError'; + return 'JsonqlError' } } diff --git a/packages/errors/src/get-error-name-by-instance.js b/packages/errors/src/get-error-name-by-instance.js index 6e6907d792c20ba16864012026dc92a6ec5ffbdb..d48ab283bd414aab03c1c77bbdbfc581d0762d72 100644 --- a/packages/errors/src/get-error-name-by-instance.js +++ b/packages/errors/src/get-error-name-by-instance.js @@ -29,7 +29,7 @@ function getErrorNameByInstance(errs, e) { */ function getErrorNameByInstanceWithDefault(errs, e) { let name = getErrorNameByInstance(errs, e) - return name === UNKNOWN_ERROR ? 'JsonqlError' : name; + return name === UNKNOWN_ERROR ? 'JsonqlError' : name } diff --git a/packages/errors/src/resolver-app-error.js b/packages/errors/src/resolver-app-error.js index 78eec15157b576411e542391d0c79ea673eb5d0d..e11166ff24c99b92e45f7862ab8800ec5808153f 100644 --- a/packages/errors/src/resolver-app-error.js +++ b/packages/errors/src/resolver-app-error.js @@ -12,18 +12,18 @@ export default class JsonqlResolverAppError extends Error { this.message = args[0] this.detail = args[1] - this.className = JsonqlResolverAppError.name; + this.className = JsonqlResolverAppError.name if (Error.captureStackTrace) { - Error.captureStackTrace(this, JsonqlResolverAppError); + Error.captureStackTrace(this, JsonqlResolverAppError) } } static get statusCode() { - return 500; + return 500 } static get name() { - return 'JsonqlResolverAppError'; + return 'JsonqlResolverAppError' } } diff --git a/packages/errors/src/resolver-not-found-error.js b/packages/errors/src/resolver-not-found-error.js index 9acbc9cc955a57d8f4c27028eb36aebd39421d34..ec5262911059b6f3ca8034c41551dfeb988b2b27 100644 --- a/packages/errors/src/resolver-not-found-error.js +++ b/packages/errors/src/resolver-not-found-error.js @@ -1,3 +1,4 @@ +import { NOT_FOUND_STATUS } from 'jsonql-constants/base' /** * This is a custom error to throw when could not find the resolver * This help us to capture the right error, due to the call happens in sequence @@ -19,7 +20,7 @@ export default class JsonqlResolverNotFoundError extends Error { } static get statusCode() { - return 404; + return NOT_FOUND_STATUS } static get name() { diff --git a/packages/errors/src/server-error.js b/packages/errors/src/server-error.js index b30566ad8f5cbfc0f14111cfa6ce05c11d6b79ce..3a4f54e1a6969a0b06a4891360edf8b65dfa3048 100644 --- a/packages/errors/src/server-error.js +++ b/packages/errors/src/server-error.js @@ -7,10 +7,14 @@ export default class JsonqlServerError extends Error { constructor(statusCode, message) { super(message) this.statusCode = statusCode; - this.className = JsonqlServerError.name; + this.className = JsonqlServerError.name + } + + static get statusCode() { + return 500 } static get name() { - return 'JsonqlServerError'; + return 'JsonqlServerError' } } diff --git a/packages/errors/src/type-error.js b/packages/errors/src/type-error.js index 82b1b86ced8bf87e128d197da901a12752ee66ef..876328e7a6c6dca0b17476a4a9c7ffe024a79bcf 100644 --- a/packages/errors/src/type-error.js +++ b/packages/errors/src/type-error.js @@ -6,14 +6,14 @@ export default class JsonqlTypeError extends Error { this.message = args[0] this.detail = args[1] - this.className = JsonqlTypeError.name; + this.className = JsonqlTypeError.name if (Error.captureStackTrace) { - Error.captureStackTrace(this, JsonqlTypeError); + Error.captureStackTrace(this, JsonqlTypeError) } } static get name() { - return 'JsonqlTypeError'; + return 'JsonqlTypeError' } } diff --git a/packages/errors/src/validation-error.js b/packages/errors/src/validation-error.js index 2f2aab6fce6470b8eb82c9506468fe240c37a960..e63ae1915b5d0844d606b45609a77a52760aa677 100644 --- a/packages/errors/src/validation-error.js +++ b/packages/errors/src/validation-error.js @@ -15,6 +15,6 @@ export default class JsonqlValidationError extends Error { } static get name() { - return 'JsonqlValidationError'; + return 'JsonqlValidationError' } } diff --git a/packages/jwt/package.json b/packages/jwt/package.json index 4fc155138f0aec7ea918699076a5aa4174193a25..5c3eb936184c353d13930dc1a5fb24f7b48a143d 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -39,26 +39,26 @@ "dependencies": { "colors": "^1.4.0", "fs-extra": "^8.1.0", - "jsonql-constants": "^1.8.14", + "jsonql-constants": "^2.0.0", "jsonql-errors": "^1.1.10", - "jsonql-params-validator": "^1.5.2", - "jsonql-utils": "^1.0.0", + "jsonql-params-validator": "^1.6.0", + "jsonql-utils": "^1.1.3", "jsonwebtoken": "^8.5.1", "jwt-decode": "^2.2.0", "socketio-jwt": "^4.5.0", - "yargs": "^15.1.0" + "yargs": "^15.3.0" }, "bin": { "jsonql-jwt": "./cmd.js" }, "devDependencies": { "socket.io-client": "^2.3.0", - "ws": "^7.2.1", + "ws": "^7.2.3", "ava": "^3.5.0", "debug": "^4.1.1", "esm": "^3.2.25", "koa": "^2.11.0", - "rollup": "^1.32.0", + "rollup": "^2.0.6", "rollup-plugin-alias": "^2.2.0", "rollup-plugin-async": "^1.2.0", "rollup-plugin-buble": "^0.19.8", @@ -71,8 +71,8 @@ "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-replace": "^2.2.0", "rollup-plugin-serve": "^1.0.1", - "rollup-plugin-terser": "^5.2.0", - "server-io-core": "^1.3.1", + "rollup-plugin-terser": "^5.3.0", + "server-io-core": "^1.3.3", "socket.io": "^2.3.0" }, "ava": { diff --git a/packages/utils/package.json b/packages/utils/package.json index 71e7ce432fdee15bc1d6f82e61adaf2691c6f88e..131e496522a33efbd5380b16425afba8a039a934 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -67,7 +67,7 @@ "verbose": true }, "dependencies": { - "jsonql-constants": "^1.9.9", + "jsonql-constants": "^2.0.0", "jsonql-errors": "^1.1.10", "lodash-es": "^4.17.15" }, @@ -78,8 +78,8 @@ "debug": "^4.1.1", "esm": "^3.2.25", "fs-extra": "^8.1.0", - "jsonql-params-validator": "^1.5.3", - "rollup": "^2.0.4", + "jsonql-params-validator": "^1.6.0", + "rollup": "^2.0.6", "rollup-plugin-alias": "^2.2.0", "rollup-plugin-analyzer": "^3.2.2", "rollup-plugin-async": "^1.2.0",