diff --git a/packages/@jsonql/koa/package.json b/packages/@jsonql/koa/package.json index 545b09bb5ac952d7e7679f20d04745e102f5de87..b235f8936201ab025b4ca840333ccffe05761bf3 100644 --- a/packages/@jsonql/koa/package.json +++ b/packages/@jsonql/koa/package.json @@ -50,7 +50,7 @@ "debug": "^4.1.1", "fs-extra": "^8.1.0", "jsonql-constants": "^1.8.9", - "jsonql-koa": "^1.3.11", + "jsonql-koa": "^1.4.3", "jsonql-params-validator": "^1.4.11", "koa": "^2.11.0", "koa-bodyparser": "^4.2.1", @@ -58,7 +58,7 @@ "yargs": "^14.2.0" }, "optionalDependencies": { - "jsonql-ws-server": "^1.3.5" + "jsonql-ws-server": "^1.3.6" }, "bin": { "jsonql-koa-cli": "./cli.js" diff --git a/packages/constants/README.md b/packages/constants/README.md index 4949f51da2e8564adb0ab1fbd7b8d2d1a28a50ad..90ba71ca4a4b3f1b3b1b56bc375ac91fa8d05e00 100755 --- a/packages/constants/README.md +++ b/packages/constants/README.md @@ -49,6 +49,7 @@ non-javascript to develop your tool. You can also use the included `constants.js - ARGS_KEY - CHECKER_KEY - ALIAS_KEY +- CHECKED_KEY - AUTH_TYPE - LOGIN_NAME - ISSUER_NAME diff --git a/packages/constants/constants.json b/packages/constants/constants.json index bb6d6e9a949d150c0ab3752b19172d32afa29b39..5d7d8319dcfe0d38bd12c721130b6cf9d907578b 100644 --- a/packages/constants/constants.json +++ b/packages/constants/constants.json @@ -55,6 +55,7 @@ "ARGS_KEY": "args", "CHECKER_KEY": "checker", "ALIAS_KEY": "alias", + "CHECKED_KEY": "__checked__", "AUTH_TYPE": "auth", "LOGIN_NAME": "login", "ISSUER_NAME": "login", diff --git a/packages/constants/main.js b/packages/constants/main.js index 9d9576e22e93d1a72f0e297f8c3e178cc1fc3dda..6d1b79d65a2d93077db343a4fff7b9312900297a 100644 --- a/packages/constants/main.js +++ b/packages/constants/main.js @@ -55,6 +55,7 @@ module.exports = { "ARGS_KEY": "args", "CHECKER_KEY": "checker", "ALIAS_KEY": "alias", + "CHECKED_KEY": "__checked__", "AUTH_TYPE": "auth", "LOGIN_NAME": "login", "ISSUER_NAME": "login", diff --git a/packages/constants/module.js b/packages/constants/module.js index a7737f8cb36147c1fc04d73f3926e399fa725270..29f56d0d27b7d70ec7aea75b990061358f6b43ed 100644 --- a/packages/constants/module.js +++ b/packages/constants/module.js @@ -61,6 +61,7 @@ export const ENUM_KEY = 'enumv'; // need to change this because enum is a reser export const ARGS_KEY = 'args'; export const CHECKER_KEY = 'checker'; export const ALIAS_KEY = 'alias'; +export const CHECKED_KEY = '__checked__'; // author export const AUTH_TYPE = 'auth'; export const LOGIN_NAME = 'login'; @@ -190,5 +191,5 @@ export const DEFAULT_PRIVATE_KEY_FILE = [PRIVATE_KEY_NAME, PEM_EXT].join('.') export const SUCCESS_STATUS = 200; export const FORBIDDEN_STATUS = 403; export const NOT_FOUND_STATUS = 404; -// just whatever +// just whatever export const DEFAULT_PORT_NUM = 6557; diff --git a/packages/constants/package.json b/packages/constants/package.json index c5e3c1900d020f979298929a476da7e816fa84b1..c6376990d86343d92574a78af68cdae75a638744 100755 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-constants", - "version": "1.8.9", + "version": "1.8.10", "description": "All the share constants for json:ql tools", "main": "main.js", "module": "module.js", diff --git a/packages/koa/index.js b/packages/koa/index.js index 06aba1d7de5153a9da1a6aa951e3795595f10edf..494992ecb96c89c69a417e758ab851ded6a845bf 100644 --- a/packages/koa/index.js +++ b/packages/koa/index.js @@ -45,3 +45,13 @@ export function jsonqlKoa(config = {}) { // finally return compose(middlewares) } + +/** + * We export an extra interface to the config check because when we hook up the + * ws server, there is a problem with waiting for the contract + * @param {object} config configuration + * @return {object} checked configuration + */ +export function preConfigCheck(config) { + return configCheck(config) +} diff --git a/packages/koa/package.json b/packages/koa/package.json index 9410cd05db05aa770b50d93e996b27c2ed337004..eccddc6e66d46f494bbb4d038611fe389768f437 100644 --- a/packages/koa/package.json +++ b/packages/koa/package.json @@ -1,6 +1,6 @@ { "name": "jsonql-koa", - "version": "1.4.3", + "version": "1.4.4", "description": "jsonql Koa middleware", "main": "main.js", "module": "index.js", @@ -25,7 +25,7 @@ "test:contract": "DEBUG=jsonql-koa*,jsonql-contract* ava ./tests/contractWithAuth.test.js", "test:auth": "DEBUG=jsonql* ava --verbose ./tests/auth.test.js", "test:error": "DEBUG=jsonql-koa* ava ./tests/resolverNotFound.test.js", - "test:config": "DEBUG=jsonql-* ava ./tests/config.test.js", + "test:config": "DEBUG=jsonql-koa* ava ./tests/config.test.js", "test:throw": "DEBUG=jsonql-* ava ./tests/throw.test.js", "test:gen": "DEBUG=jsonql* ava ./tests/contract.test.js", "test:jsonp": "DEBUG=jsonql* ava --verbose ./tests/jsonp.test.js", diff --git a/packages/koa/src/options/index.js b/packages/koa/src/options/index.js index d0d55fcc0820563496f16df10d04c9974daba34d..ceb13d249552da6f8328ccd1fb2b7fcb70c96e6b 100644 --- a/packages/koa/src/options/index.js +++ b/packages/koa/src/options/index.js @@ -6,10 +6,10 @@ import { checkConfig, isString } from 'jsonql-params-validator' import { rsaPemKeys } from 'jsonql-jwt' import { appProps, constProps, jwtProcessKey } from './options' -import { isContract, chainFns, getDebug, inArray } from '../utils' +import { isContract, chainFns, getDebug, inArray, injectToFn } from '../utils' import { getContract } from '../contracts' const debug = getDebug('config-check') - +const CHECKED = '__checked__' /** * break out from the applyAuthOptions because it's not suppose to be there * @NOTE v1.3.8 change it to a fully functional interface @@ -73,7 +73,14 @@ const applyAuthOptions = function(config) { * @return {object} configuration been checked * @api public */ -export function configCheck(config) { +export function configCheck(config = {}) { + let now = Date.now() + if (config[CHECKED]) { // @TODO we could check the time if we want ... + debug(`config already checked, pass it through`) + return config; + } const fn = chainFns(checkConfig, applyGetContract, applyAuthOptions) - return fn(config, appProps, constProps) + const opts = fn(config, appProps, constProps) + // return opts; + return injectToFn(opts, CHECKED, now) } diff --git a/packages/koa/src/options/options.js b/packages/koa/src/options/options.js index 11d5fc07be5ce2d5ed3e6412048f695fbe477596..b904ad4e50eb1b004b62ffe0160014f267be6d7d 100644 --- a/packages/koa/src/options/options.js +++ b/packages/koa/src/options/options.js @@ -40,7 +40,7 @@ import { const dirname = process.cwd() // @TODO we need to create the same fn to clear out the options like I did in server-io-core const constProps = { - __checked__: true, + // __checked__: true, we don't do this here, see index.js contentType: CONTENT_TYPE, contract: false, initContract: false, diff --git a/packages/koa/src/utils/index.js b/packages/koa/src/utils/index.js index de5754550458abb8cfd05034b060fe4f3871d439..fae38776efca522830a097336dc4fb4477a0e9bc 100644 --- a/packages/koa/src/utils/index.js +++ b/packages/koa/src/utils/index.js @@ -31,7 +31,9 @@ import { extractParamsFromContract, getQueryFromPayload, - getMutationFromPayload + getMutationFromPayload, + + injectToFn } from 'jsonql-utils' // export @@ -69,5 +71,6 @@ export { extractParamsFromContract, getQueryFromPayload, - getMutationFromPayload + getMutationFromPayload, + injectToFn } diff --git a/packages/koa/tests/config.test.js b/packages/koa/tests/config.test.js index d4ad7913294543b48dbd2a1cbeeb258b1827c6ae..446c387ddfc5c4ccd9b2e5a7d7d36a015282707b 100644 --- a/packages/koa/tests/config.test.js +++ b/packages/koa/tests/config.test.js @@ -50,5 +50,10 @@ test('It should have privateKey and publicKey when set useJwt = true', async t = opts = await processJwtKeys(ctx, opts) t.truthy(opts.privateKey && opts.publicKey) +}) +test(`It should now have an extra property __checked__`, t => { + const opts = configCheck() + debug(opts.__checked__) + t.truthy(opts.__checked__) })