From 6a5689168e3990275cddfccf367cb6f38b09d68e Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Tue, 27 Mar 2018 16:13:38 -0400 Subject: [PATCH 01/35] 1st pass at docker files/script to create environment for development --- docker/rhythm-rtc/Dockerfile | 9 ++++ docker/rhythm-server/Dockerfile | 31 +++++++++++++ docker/rhythm-server/env_config | 19 ++++++++ docker/rs-shell.sh | 22 +++++++++ docker/testenv.sh | 79 +++++++++++++++++++++++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 docker/rhythm-rtc/Dockerfile create mode 100644 docker/rhythm-server/Dockerfile create mode 100644 docker/rhythm-server/env_config create mode 100755 docker/rs-shell.sh create mode 100755 docker/testenv.sh diff --git a/docker/rhythm-rtc/Dockerfile b/docker/rhythm-rtc/Dockerfile new file mode 100644 index 0000000..e89e4a4 --- /dev/null +++ b/docker/rhythm-rtc/Dockerfile @@ -0,0 +1,9 @@ +FROM node:5.6 +LABEL Description="This image is used to for developing the rhythm-server" + +EXPOSE 3000 +ENV NODE_ENV=docker +WORKDIR /app +# ENTRYPOINT ["node", "brixapp.js"] +ENTRYPOINT ["/bin/bash"] + diff --git a/docker/rhythm-server/Dockerfile b/docker/rhythm-server/Dockerfile new file mode 100644 index 0000000..b46575d --- /dev/null +++ b/docker/rhythm-server/Dockerfile @@ -0,0 +1,31 @@ +FROM node:5.4.0 +LABEL Description="This image is used to for developing the rhythm-server" + +ENV AUTH_ID_FIELD="id" +ENV AUTH_ON="true" +ENV AUTH_TOKEN_EXPIRESIN="1000d" +ENV AUTH_TOKEN_SECRET="my-secret" +ENV CRYPTO_KEY="'your-key-here'" +ENV DEFAULT_USER_EMAIL="default-user-email" +ENV DEFAULT_USER_PASSWORD="default-user-password" +ENV MONGODB_URI="mongodb://rhythm-mongo-server/rhythm-test" +ENV MONGO_CERT="some-fake-cert" +ENV NODE_ENV="default" +ENV PORT="3000" +ENV REPORT_EMAIL_FROM="'MM Reports' " +ENV REPORT_EMAIL_HOST="smtp server here" +ENV REPORT_EMAIL_LOGIN="email@address.com" +ENV REPORT_EMAIL_PASSWORD="emailpassword" +ENV REPORT_EMAIL_SUBJECT="Your Group Discussion Report" +ENV REPORT_EMAIL_TEXT="See attached for a visual report of your recent group discussion!" +ENV SEND_REPORT="false" +ENV END_MEETING_AFTER_MINUTES=2 + +EXPOSE 3000 + +# rhythm-server repository working directory must be bound at /app and all dependent packages installed +VOLUME /app +WORKDIR /app +CMD ["npm", "start"] +# ENTRYPOINT ["/bin/bash"] + diff --git a/docker/rhythm-server/env_config b/docker/rhythm-server/env_config new file mode 100644 index 0000000..fd54e32 --- /dev/null +++ b/docker/rhythm-server/env_config @@ -0,0 +1,19 @@ +AUTH_ID_FIELD="id" +AUTH_ON="true" +AUTH_TOKEN_EXPIRESIN="1000d" +AUTH_TOKEN_SECRET="my-secret" +CRYPTO_KEY="'your-key-here'" +DEFAULT_USER_EMAIL="default-user-email" +DEFAULT_USER_PASSWORD="default-user-password" +MONGODB_URI="mongodb://rhythm-mongo-server/rhythm-test" +MONGO_CERT="some-fake-cert" +NODE_ENV="default" +PORT="3000" +REPORT_EMAIL_FROM="'MM Reports' " +REPORT_EMAIL_HOST="smtp server here" +REPORT_EMAIL_LOGIN="email@address.com" +REPORT_EMAIL_PASSWORD="emailpassword" +REPORT_EMAIL_SUBJECT="Your Group Discussion Report" +REPORT_EMAIL_TEXT="See attached for a visual report of your recent group discussion!" +SEND_REPORT="false" +END_MEETING_AFTER_MINUTES=2 diff --git a/docker/rs-shell.sh b/docker/rs-shell.sh new file mode 100755 index 0000000..083a9e6 --- /dev/null +++ b/docker/rs-shell.sh @@ -0,0 +1,22 @@ +#! /bin/bash + +#NODE_VERSION=5.6 +NODE_VERSION=5.4.0 + +# Default path to the rhythm server directory +RHYTHM_SERVER_PATH=~/Projects/riff/rhythm-server/ +RHYTHM_MONGO_DATA_PATH=~/Projects/riff/rhythm-server/data/ +DOCKER_ENGINE_IP=127.0.0.1 + +# include .rhythmdevrc if it exists to redefine the variables w/ values of locations of +# working directories for any components +if [ -f "$HOME/.rhythmdevrc" ] +then + . "$HOME/.riffdevrc" +fi + + +# It attaches to my rhythm-server repo working directory so whatever I have there is what will run +#docker run -d --net rhythm -p ${DOCKER_ENGINE_IP}:27017:27017 -v ${RHYTHM_MONGO_DATA_PATH}:/data/db --name rhythm-mongo-server mongo +docker start rhythm-mongo-server +docker run --rm -it --net rhythm -p ${DOCKER_ENGINE_IP}:3000:3000 -v ${RHYTHM_SERVER_PATH}:/app -w /app --name rs-shell local/rhythm-server bash diff --git a/docker/testenv.sh b/docker/testenv.sh new file mode 100755 index 0000000..c4e9c4e --- /dev/null +++ b/docker/testenv.sh @@ -0,0 +1,79 @@ +#! /bin/bash + +# Default paths to the rhythm working directories +RHYTHM_SERVER_PATH=~/Projects/riff/rhythm-server +RHYTHM_MONGO_DATA_PATH=~/Projects/riff/rhythm-server/data +DOCKER_ENGINE_IP=127.0.0.1 + +# include .rhythmdevrc if it exists to redefine the variables w/ values of locations of +# working directories for any components +if [ -f "$HOME/.rhythmdevrc" ] +then + . "$HOME/.rhythmdevrc" +fi + +function echosyntax() { + echo '' + echo 'testenv.sh provides an interface to create and use the containers needed to run the rhythm system locally.' + echo 'The containers are:' + echo ' rhythm-mongo-server: The mongo instance where the rhythm data is stored' + echo ' rhythm-server: The rhythm server instance' + echo '' + echo "If the file $HOME/.rhythmdevrc exists it will be sourced, allowing local paths to the working directories to be specified." + echo '' + echo 'usage:' + echo 'build the docker rhythm image(s): testenv.sh make-images' + echo 'run the needed docker containers: testenv.sh initial-start' + echo 'start the docker containers: testenv.sh start' + echo 'stop the docker containers: testenv.sh stop' + echo 'remove the docker containers: testenv.sh remove-containers' + echo 'create the docker rhythm bridge network: testenv.sh create-network' + echo 'this help: testenv.sh --help' +} + +if [ $# -ne 1 ] +then + echo 'Wrong number of arguments' + echosyntax + exit 1 +fi + +case $1 in + make-images) + # Create the docker images + docker build -t local/rhythm-server docker/rhythm-server + # docker build -t local/rhythm-rtc docker/rhythm-rtc + ;; + initial-start) + # run the webserver for accessing the testpage at localhost/tests/integration/testpage-divs.html + #docker run -d -p ${DOCKER_ENGINE_IP}:80:80 -v ${BRIXCLIENT_PATH}:/usr/share/nginx/html:ro --name brixclient nginx + + # run the rhythm mongo server + [ -d ${RHYTHM_MONGO_DATA_PATH} ] || mkdir ${RHYTHM_MONGO_DATA_PATH} + docker run -d --net rhythm -p ${DOCKER_ENGINE_IP}:27017:27017 -v ${RHYTHM_MONGO_DATA_PATH}:/data/db --name rhythm-mongo-server mongo + + # run the rhythm-server + docker run -d --net rhythm -p ${DOCKER_ENGINE_IP}:3000:3000 -v ${RHYTHM_SERVER_PATH}:/app -w /app --name rhythm-server local/rhythm-server + ;; + start) + # start the containers once they've been created using initial-start + docker start rhythm-mongo-server rhythm-server + ;; + stop) + # stop the running containers + docker stop rhythm-server rhythm-mongo-server + ;; + remove-containers) + # remove the containers requiring that they be restarted using initial-start + docker rm rhythm-server rhythm-mongo-server + ;; + + create-network) + # create a bridge network for the various rhythm servers + docker network create --driver bridge rhythm + ;; + --help) + # show help + echosyntax + ;; +esac From ec8d0e256b9b06f4de32c21637a19a066ab3bb9e Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Tue, 27 Mar 2018 17:19:07 -0400 Subject: [PATCH 02/35] update Dockerfile to use node version 8 ran tests w/ node version 8 and they all pass --- docker/rhythm-server/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/rhythm-server/Dockerfile b/docker/rhythm-server/Dockerfile index b46575d..decd678 100644 --- a/docker/rhythm-server/Dockerfile +++ b/docker/rhythm-server/Dockerfile @@ -1,4 +1,4 @@ -FROM node:5.4.0 +FROM node:8 LABEL Description="This image is used to for developing the rhythm-server" ENV AUTH_ID_FIELD="id" From 123cb3ee884a694eb85c2138746f05a0b0739d85 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Tue, 27 Mar 2018 17:22:57 -0400 Subject: [PATCH 03/35] cleaned up dependencies in package.json * changed node engine to allow later versions * updated version specifier of dependencies to use ^ so later patches and minor versions will be used. * removed unreferenced package dependencies * removed duplicate packages in devDependencies * mongodb package is only referenced by tests, so moved it to devDependencies --- package-lock.json | 4824 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 56 +- 2 files changed, 4848 insertions(+), 32 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9e76878 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4824 @@ +{ + "name": "rhythm-server", + "version": "0.3.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.0.tgz", + "integrity": "sha512-h3YZbOq2+ZoDFI1z8Zx0Ck/xRWkOESVaLdgLdd/c25mMQ1Y2CAkILu9ny5A15S5f32gGcQdaUIZ2jzYr8D7IFg==" + }, + "@types/socket.io": { + "version": "1.4.32", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-1.4.32.tgz", + "integrity": "sha512-xl2fYn5eZRp1jBpv62DEtJLLGroz0ZTi7jq9ZMIGKVgNgS0SbLP36tG7TrUpZTTi+Y2CWvMgemgErZLPGi+CQA==", + "requires": { + "@types/node": "9.6.0" + } + }, + "Faker": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/Faker/-/Faker-0.7.2.tgz", + "integrity": "sha1-wkdLx3ux14AYtod9MHvX/fCC+xQ=", + "dev": true + }, + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "access-control": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/access-control/-/access-control-1.0.0.tgz", + "integrity": "sha1-rrooLO53MT6FJAFj1p41sp421iY=", + "requires": { + "millisecond": "0.1.2", + "setheader": "0.0.4", + "vary": "1.1.2" + } + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "requires": { + "acorn": "4.0.13" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array.prototype.find": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", + "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0" + } + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "asyncemit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/asyncemit/-/asyncemit-3.0.1.tgz", + "integrity": "sha1-zD4P4No5tTzBXls6qGFupqcr1Zk=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.4", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.4", + "regenerator-runtime": "0.11.1" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "base64url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "benchmark": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", + "integrity": "sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "bluebird": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz", + "integrity": "sha1-AkpVFylTCIV/FPkfEQb8O1VfRGs=" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "bson": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/bson/-/bson-0.4.23.tgz", + "integrity": "sha1-5louPHUH/63kEJvHV1p25Q+NqRU=" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "buildmail": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", + "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", + "requires": { + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "3.0.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0", + "punycode": "1.4.1" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/color/-/color-0.8.0.tgz", + "integrity": "sha1-iQwHw/1OZJU3Y4kRz2keVFi2/KU=", + "requires": { + "color-convert": "0.5.3", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=" + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "requires": { + "color-name": "1.1.3" + } + }, + "colornames": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-0.0.2.tgz", + "integrity": "sha1-2BH9bIT1kClJmorEQ2ICk1uSvjE=" + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + }, + "colorspace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.0.1.tgz", + "integrity": "sha1-yZx5btMRKLmHalLh7l7gOkpxl0k=", + "requires": { + "color": "0.8.0", + "text-hex": "0.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "requires": { + "mime-db": "1.33.0" + } + }, + "compression": { + "version": "1.7.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.13", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "connected": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/connected/-/connected-0.0.2.tgz", + "integrity": "sha1-e1dVshbOMf+rzMOOn04d/Bw7fG0=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "content-type-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", + "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-js": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz", + "integrity": "sha1-8si/GB8qgLkvNgEhQpzmOi8K6uA=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, + "coveralls": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz", + "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==", + "dev": true, + "requires": { + "js-yaml": "3.6.1", + "lcov-parse": "0.0.10", + "log-driver": "1.2.5", + "minimist": "1.2.0", + "request": "2.79.0" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.15.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3", + "uuid": "3.2.1" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + } + } + }, + "create-server": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/create-server/-/create-server-1.0.1.tgz", + "integrity": "sha1-FkNCg08Yi77Hx7xGZ0Y8wrEwTEQ=", + "requires": { + "connected": "0.0.2" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.1" + } + } + } + }, + "cssom": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=" + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "requires": { + "cssom": "0.3.2" + } + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.41" + } + }, + "d3": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", + "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "optional": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "1.0.4" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "deglob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", + "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", + "dev": true, + "requires": { + "find-root": "1.1.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pkg-config": "1.1.1", + "run-parallel": "1.1.8", + "uniq": "1.0.1", + "xtend": "4.0.1" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diagnostics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.0.tgz", + "integrity": "sha1-4QkJALSVI+hSe+IPCBJ1IF8q42o=", + "requires": { + "colorspace": "1.0.1", + "enabled": "1.0.2", + "kuler": "0.0.0" + } + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "dotenv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-2.0.0.tgz", + "integrity": "sha1-vXWcNXqqcDZeAclrewvsCKbg2Uk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", + "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", + "requires": { + "base64url": "2.0.0", + "safe-buffer": "5.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emits": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emits/-/emits-3.0.0.tgz", + "integrity": "sha1-MnUrupXhcHshlWI4Srm7ix/WL3A=" + }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.4" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "engine.io": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz", + "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.5" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "engine.io-client": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz", + "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.5", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "env-variable": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.4.tgz", + "integrity": "sha512-+jpGxSWG4vr6gVxUHOc4p+ilPnql7NzZxOZBxNldsKGjCF+97df3CbuX7XMaDa5oAVkKQj4rKp38rYdC4VcpDg==" + }, + "es-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.41", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", + "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "2.1.0", + "escope": "3.6.0", + "espree": "3.5.4", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.6.1", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + } + }, + "eslint-config-standard": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz", + "integrity": "sha1-06aKr8cZFjnn7kQec0hzkCY1QpI=", + "dev": true + }, + "eslint-config-standard-jsx": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz", + "integrity": "sha1-yrCAGhWjYL9j+suXqyL73YjYpeA=", + "dev": true + }, + "eslint-plugin-promise": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz", + "integrity": "sha512-2WO+ZFh7vxUKRfR0cOIMrWgYKdR6S1AlOezw6pC52B6oYpd5WFghN+QHxvrRdZMtbo8h3dfUZ2o1rWb0UPbKtg==", + "dev": true + }, + "eslint-plugin-react": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", + "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", + "dev": true, + "requires": { + "array.prototype.find": "2.0.4", + "doctrine": "1.5.0", + "has": "1.0.1", + "jsx-ast-utils": "1.4.1", + "object.assign": "4.1.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "eslint-plugin-standard": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.3.1.tgz", + "integrity": "sha1-Z2W9Km2ezce98bFFrkuzDit7hvg=", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" + }, + "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + } + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41" + } + }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extendible": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/extendible/-/extendible-0.1.1.tgz", + "integrity": "sha1-4qN+2HEp+0+VM+io11BiMKU5yQU=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "feathers": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/feathers/-/feathers-2.2.4.tgz", + "integrity": "sha512-9IYKbxRKoDuerLCkYmFkQuKOwyB2SMM1kSUswDzlE0AmdzDrcfocVYb87/BsQx2j6hFkdCVFYkXq3+YPSDMT3w==", + "requires": { + "babel-runtime": "6.26.0", + "debug": "3.1.0", + "events": "1.1.1", + "express": "4.16.3", + "feathers-commons": "0.8.7", + "rubberduck": "1.1.1", + "uberproto": "1.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "feathers-authentication": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/feathers-authentication/-/feathers-authentication-0.7.13.tgz", + "integrity": "sha512-6OoT12wFE9yL0/Lo1027WQ832oB/h05XUA9+2bQ5l19Am9d4GcecL/oshKHcNRiTTo7vVAYFymuVG+fPy7nKrg==", + "requires": { + "bcryptjs": "2.4.3", + "debug": "2.6.9", + "feathers-errors": "2.9.2", + "feathers-hooks": "1.5.8", + "jsonwebtoken": "5.7.0", + "lodash.isplainobject": "4.0.6", + "passport": "0.3.2", + "passport-local": "1.0.0" + } + }, + "feathers-client": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/feathers-client/-/feathers-client-1.9.0.tgz", + "integrity": "sha1-sQhjFLDPaPzgSc3fq9nQ681LAUY=", + "requires": { + "feathers": "2.0.3", + "feathers-authentication": "0.7.12", + "feathers-commons": "0.8.7", + "feathers-hooks": "1.7.1", + "feathers-primus": "2.0.0", + "feathers-rest": "1.6.0", + "feathers-socketio": "1.4.2" + }, + "dependencies": { + "feathers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/feathers/-/feathers-2.0.3.tgz", + "integrity": "sha1-qfxjpxJvS8E3RW4T79JQR/2zCLk=", + "requires": { + "babel-polyfill": "6.26.0", + "debug": "2.6.9", + "events": "1.1.1", + "express": "4.16.3", + "feathers-commons": "0.8.7", + "rubberduck": "1.1.1", + "uberproto": "1.2.0" + } + }, + "feathers-authentication": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/feathers-authentication/-/feathers-authentication-0.7.12.tgz", + "integrity": "sha1-hY6ew7kbhAS+DlXD8ED4SJ8QZqk=", + "requires": { + "bcryptjs": "2.4.3", + "debug": "2.6.9", + "feathers-errors": "2.9.2", + "feathers-hooks": "1.7.1", + "jsonwebtoken": "5.7.0", + "lodash.isplainobject": "4.0.6", + "passport": "0.3.2", + "passport-local": "1.0.0" + } + }, + "feathers-hooks": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/feathers-hooks/-/feathers-hooks-1.7.1.tgz", + "integrity": "sha1-0d8iWmS/PQnxCYikGOcKeQMr9Mk=", + "requires": { + "feathers-commons": "0.8.7", + "feathers-hooks-common": "2.0.3", + "uberproto": "1.2.0" + } + }, + "feathers-rest": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/feathers-rest/-/feathers-rest-1.6.0.tgz", + "integrity": "sha1-L/TrdERYgsT4kBhBtDbP96096XE=", + "requires": { + "debug": "2.6.9", + "feathers-commons": "0.8.7", + "feathers-errors": "2.9.2", + "qs": "6.5.1" + } + }, + "feathers-socketio": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/feathers-socketio/-/feathers-socketio-1.4.2.tgz", + "integrity": "sha1-BVemGAS0VtQNJluG/sbZbwHdk70=", + "requires": { + "debug": "2.6.9", + "feathers-socket-commons": "2.4.0", + "socket.io": "1.7.4", + "uberproto": "1.2.0" + } + } + } + }, + "feathers-commons": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/feathers-commons/-/feathers-commons-0.8.7.tgz", + "integrity": "sha1-EcbyW1N3RamD6NYVUtfbiTLVN4I=" + }, + "feathers-configuration": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/feathers-configuration/-/feathers-configuration-0.2.3.tgz", + "integrity": "sha1-dFhlWCDfrXWp+zB9Bmg15BLR/VY=", + "requires": { + "debug": "2.6.9" + } + }, + "feathers-errors": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/feathers-errors/-/feathers-errors-2.9.2.tgz", + "integrity": "sha512-qwIX97bNW7+1tWVG073+omUA0rCYKJtTtwuzTrrvfrtdr8J8Dk1Fy4iaV9Fa6/YBD5AZu0lsplPE0iu4u/d4GQ==", + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "feathers-hooks": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/feathers-hooks/-/feathers-hooks-1.5.8.tgz", + "integrity": "sha1-puOdTJD/fCsgaopSjRkwczYcaR0=", + "requires": { + "feathers-commons": "0.7.8", + "feathers-errors": "2.9.2" + }, + "dependencies": { + "feathers-commons": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/feathers-commons/-/feathers-commons-0.7.8.tgz", + "integrity": "sha1-EbEZww3R6pxQXCU3sSUErtqj/n0=" + } + } + }, + "feathers-hooks-common": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/feathers-hooks-common/-/feathers-hooks-common-2.0.3.tgz", + "integrity": "sha1-6fEqvr28Fj8o1MtMhQlOKaokY10=", + "requires": { + "debug": "2.6.9", + "feathers-errors": "2.9.2", + "traverse": "0.6.6" + } + }, + "feathers-mongoose": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-3.6.2.tgz", + "integrity": "sha1-o/keQK6Ma8Bie2wJhJuUvpFefy4=", + "requires": { + "feathers-commons": "0.8.7", + "feathers-errors": "2.9.2", + "feathers-query-filters": "2.1.2", + "lodash.omit": "4.5.0", + "uberproto": "1.2.0" + } + }, + "feathers-primus": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/feathers-primus/-/feathers-primus-2.0.0.tgz", + "integrity": "sha1-G2zgGwXnYxYYZ/6WhDTYiQypFW4=", + "requires": { + "debug": "2.6.9", + "feathers-socket-commons": "2.4.0", + "primus": "6.1.0", + "primus-emitter": "3.1.1", + "uberproto": "1.2.0" + } + }, + "feathers-query-filters": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/feathers-query-filters/-/feathers-query-filters-2.1.2.tgz", + "integrity": "sha1-zbGCJNteGcwBQNUoEI4JCNXrBlQ=", + "requires": { + "feathers-commons": "0.8.7" + } + }, + "feathers-rest": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/feathers-rest/-/feathers-rest-1.8.1.tgz", + "integrity": "sha512-FYVcBQLGocSdpjxEf+E/9Cb0QAX0S+biqRgB5KAGpoAF51cou9LV0WW1IwqwHzAT67KRyS4dT7fVCrE4kisM2w==", + "requires": { + "debug": "3.1.0", + "feathers-commons": "0.8.7", + "feathers-errors": "2.9.2", + "qs": "6.5.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "feathers-socket-commons": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/feathers-socket-commons/-/feathers-socket-commons-2.4.0.tgz", + "integrity": "sha1-Bi79V/mocWZEFFuZOl9ycJlp8eE=", + "requires": { + "debug": "2.6.9", + "feathers-commons": "0.8.7", + "feathers-errors": "2.9.2" + } + }, + "feathers-socketio": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/feathers-socketio/-/feathers-socketio-1.6.0.tgz", + "integrity": "sha1-nM+aZSdMbh/KK9j557hHvgSvma0=", + "requires": { + "@types/socket.io": "1.4.32", + "debug": "2.6.9", + "feathers-socket-commons": "2.4.0", + "socket.io": "1.7.4", + "uberproto": "1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "forwarded-for": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/forwarded-for/-/forwarded-for-1.0.1.tgz", + "integrity": "sha1-59pIFAJRaP/AoQ0/954UFfRq9Gk=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "fusing": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fusing/-/fusing-1.0.0.tgz", + "integrity": "sha1-VQwV12r5Jld4qgUezkTUAAoJjUU=", + "requires": { + "emits": "3.0.0", + "predefine": "0.1.2" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "requires": { + "isarray": "0.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "hooks-fixed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-1.1.0.tgz", + "integrity": "sha1-DowVM2cI5mERhf45C0RofdUjDbs=" + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "requires": { + "whatwg-encoding": "1.0.3" + } + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "httpntlm": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "requires": { + "httpreq": "0.4.24", + "underscore": "1.7.0" + }, + "dependencies": { + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + } + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.5", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.11", + "js-yaml": "3.6.1", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.0", + "wordwrap": "1.0.0" + }, + "dependencies": { + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-coveralls": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/istanbul-coveralls/-/istanbul-coveralls-1.0.3.tgz", + "integrity": "sha1-TxwVkr4QTVkfkzy/nA8vUoStzwA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "coveralls": "2.13.3", + "minimist": "1.2.0", + "rimraf": "2.6.2", + "sum-up": "1.0.3" + } + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsdom": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", + "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "requires": { + "abab": "1.0.4", + "acorn": "4.0.13", + "acorn-globals": "3.1.0", + "array-equal": "1.0.0", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "escodegen": "1.9.1", + "html-encoding-sniffer": "1.0.2", + "nwmatcher": "1.4.4", + "parse5": "1.5.1", + "request": "2.85.0", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.4", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "4.8.0", + "xml-name-validator": "2.0.1" + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsonwebtoken": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-5.7.0.tgz", + "integrity": "sha1-HJD5qGzlt0j1+XnBK3BAK0r83bQ=", + "requires": { + "jws": "3.1.4", + "ms": "0.7.3", + "xtend": "4.0.1" + }, + "dependencies": { + "ms": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", + "dev": true + }, + "jwa": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", + "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", + "requires": { + "base64url": "2.0.0", + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.9", + "safe-buffer": "5.1.1" + } + }, + "jws": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", + "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", + "requires": { + "base64url": "2.0.0", + "jwa": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "kareem": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.0.1.tgz", + "integrity": "sha1-eAXSFbtTIU7Dr5aaHQsfF+PnuVw=" + }, + "kerberos": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-0.0.11.tgz", + "integrity": "sha1-yymJHCHCKsGV8xQLl90SIE/qfcI=", + "dev": true, + "optional": true, + "requires": { + "nan": "1.8.4" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "kuler": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-0.0.0.tgz", + "integrity": "sha1-tmu0a5NOVQ9Z2BiEjgq7pPf1VTw=", + "requires": { + "colornames": "0.0.2" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "libbase64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=" + }, + "libmime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", + "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=" + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" + }, + "log-driver": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "mailcomposer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", + "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", + "requires": { + "buildmail": "4.0.1", + "libmime": "3.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "millisecond": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/millisecond/-/millisecond-0.1.2.tgz", + "integrity": "sha1-bMWtOGJByrjniv+WT4cCjuyS2sU=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "dev": true, + "requires": { + "commander": "2.3.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.11", + "growl": "1.9.2", + "jade": "0.26.3", + "mkdirp": "0.5.1", + "supports-color": "1.2.0", + "to-iso-string": "0.0.2" + }, + "dependencies": { + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + } + } + }, + "mocha-mongo": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mocha-mongo/-/mocha-mongo-0.2.0.tgz", + "integrity": "sha1-Wlx2NUek1HUzzigX+02qxJrnOb8=", + "dev": true, + "requires": { + "mongodb": "1.4.40", + "qbox": "0.1.7" + }, + "dependencies": { + "bson": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/bson/-/bson-0.2.22.tgz", + "integrity": "sha1-/NoQPybQwHTVpS1Qkn24D9ArSzk=", + "dev": true, + "requires": { + "nan": "1.8.4" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "mongodb": { + "version": "1.4.40", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.4.40.tgz", + "integrity": "sha1-z9gLdP3w+gU/LM+19JxHyjKjjvs=", + "dev": true, + "requires": { + "bson": "0.2.22", + "kerberos": "0.0.11", + "readable-stream": "2.3.5" + } + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "mongodb": { + "version": "2.2.35", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.35.tgz", + "integrity": "sha512-3HGLucDg/8EeYMin3k+nFWChTA85hcYDCw1lPsWR6yV9A6RgKb24BkLiZ9ySZR+S0nfBjWoIUS7cyV6ceGx5Gg==", + "dev": true, + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.19", + "readable-stream": "2.2.7" + }, + "dependencies": { + "bson": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", + "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==", + "dev": true + }, + "es6-promise": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "mongodb-core": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.19.tgz", + "integrity": "sha512-Jt4AtWUkpuW03kRdYGxga4O65O1UHlFfvvInslEfLlGi+zDMxbBe3J2NVmN9qPJ957Mn6Iz0UpMtV80cmxCVxw==", + "dev": true, + "requires": { + "bson": "1.0.6", + "require_optional": "1.0.1" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "mongodb-core": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-1.3.13.tgz", + "integrity": "sha1-Co6HGUYe2Y827Zga4A+mXYuXeB0=", + "requires": { + "bson": "0.4.23", + "require_optional": "1.0.1" + } + }, + "mongoose": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.4.11.tgz", + "integrity": "sha1-6mfhz4GdGA+W29TiBWdVltVbnWg=", + "requires": { + "async": "1.5.2", + "bson": "0.4.23", + "hooks-fixed": "1.1.0", + "kareem": "1.0.1", + "mongodb": "2.1.14", + "mpath": "0.2.1", + "mpromise": "0.5.5", + "mquery": "1.10.0", + "ms": "0.7.1", + "muri": "1.1.0", + "regexp-clone": "0.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "mongodb": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.1.14.tgz", + "integrity": "sha1-146dcOCWbtVquoer0VofGrlHjIU=", + "requires": { + "es6-promise": "3.0.2", + "mongodb-core": "1.3.13", + "readable-stream": "1.0.31" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "mpath": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.2.1.tgz", + "integrity": "sha1-Ok6Ck1mAHeljCcJ6ay4QLon56W4=" + }, + "mpromise": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz", + "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" + }, + "mquery": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-1.10.0.tgz", + "integrity": "sha1-hgPwKwtSTResBTmoWZYSTuF7fLM=", + "requires": { + "bluebird": "2.10.2", + "debug": "2.2.0", + "regexp-clone": "0.0.1", + "sliced": "0.0.5" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "sliced": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", + "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multiline": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", + "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", + "dev": true, + "requires": { + "strip-indent": "1.0.1" + } + }, + "muri": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/muri/-/muri-1.1.0.tgz", + "integrity": "sha1-o6bXTmiogPQzokmnSWnLtmXMCt0=" + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz", + "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nodemailer": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", + "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", + "requires": { + "libmime": "3.0.0", + "mailcomposer": "4.0.1", + "nodemailer-direct-transport": "3.3.2", + "nodemailer-shared": "1.1.0", + "nodemailer-smtp-pool": "2.8.2", + "nodemailer-smtp-transport": "2.7.2", + "socks": "1.1.9" + } + }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=" + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-pool": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", + "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", + "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwmatcher": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "passport": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", + "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=", + "requires": { + "passport-strategy": "1.0.0", + "pause": "0.0.1" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.0.0" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", + "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", + "dev": true, + "requires": { + "debug-log": "1.0.1", + "find-root": "1.1.0", + "xtend": "4.0.1" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "predefine": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/predefine/-/predefine-0.1.2.tgz", + "integrity": "sha1-KqkrRJa8H4VU5DpF92v75Q0z038=", + "requires": { + "extendible": "0.1.1" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "primus": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/primus/-/primus-6.1.0.tgz", + "integrity": "sha1-s79Mk46weHS4crwrDOnA2oVdbBI=", + "requires": { + "access-control": "1.0.0", + "asyncemit": "3.0.1", + "create-server": "1.0.1", + "diagnostics": "1.1.0", + "eventemitter3": "2.0.3", + "forwarded-for": "1.0.1", + "fusing": "1.0.0", + "setheader": "0.0.4", + "ultron": "1.1.1", + "yeast": "0.1.2" + } + }, + "primus-emitter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/primus-emitter/-/primus-emitter-3.1.1.tgz", + "integrity": "sha1-qFo2NT/oqWl1vl7f69fuZshNzhs=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "2.0.6" + } + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/qbox/-/qbox-0.1.7.tgz", + "integrity": "sha1-6A8NxdCfhp2IghaMP2asjdKEDwI=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz", + "integrity": "sha1-jyUC4LyeOw2huUUgqrtOJgPsr64=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.6.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regexp-clone": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", + "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "2.0.0", + "semver": "5.5.0" + } + }, + "resolve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", + "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "rubberduck": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/rubberduck/-/rubberduck-1.1.1.tgz", + "integrity": "sha1-zSzaS4ZxeBNer8mVpxOE9fdD2wI=" + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "run-parallel": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.8.tgz", + "integrity": "sha512-e5t1NVhr5VWmD9V9U4KjjSGkf5w6CcTPgw11A3CfIvkkQxlAKzX3usPUp1NUQTmpOOjU+f9QRICU3tMbKwn9ZQ==", + "dev": true + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "setheader": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/setheader/-/setheader-0.0.4.tgz", + "integrity": "sha1-km7SjPdiFJYgkx566j8blYFuxpQ=", + "requires": { + "debug": "0.7.4" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + } + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" + }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.2.1" + } + }, + "socket.io": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", + "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.5", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.4", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + }, + "socket.io-client": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", + "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.5", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + } + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + } + } + }, + "socket.io-client": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.4.8.tgz", + "integrity": "sha1-SBskHnPfFA6hpPsDSGqFrQl/VVg=", + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.0", + "debug": "2.2.0", + "engine.io-client": "1.6.11", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.4", + "socket.io-parser": "2.2.6", + "to-array": "0.1.4" + }, + "dependencies": { + "after": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", + "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=" + }, + "base64-arraybuffer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", + "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=" + }, + "component-emitter": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.0.tgz", + "integrity": "sha1-zNETqGOI0GSC0D3j/H35hSa6jv4=" + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "engine.io-client": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.6.11.tgz", + "integrity": "sha1-fSUNj6HCGBGezeUTkEWKV9UXE3Y=", + "requires": { + "component-emitter": "1.1.2", + "component-inherit": "0.0.3", + "debug": "2.2.0", + "engine.io-parser": "1.2.4", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.1", + "parseqs": "0.0.2", + "parseuri": "0.0.4", + "ws": "1.0.1", + "xmlhttprequest-ssl": "1.5.1", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + } + } + }, + "engine.io-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.4.tgz", + "integrity": "sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=", + "requires": { + "after": "0.8.1", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.2", + "blob": "0.0.4", + "has-binary": "0.1.6", + "utf8": "2.1.0" + }, + "dependencies": { + "has-binary": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", + "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "parsejson": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", + "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", + "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", + "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", + "requires": { + "better-assert": "1.0.2" + } + }, + "socket.io-parser": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.6.tgz", + "integrity": "sha1-ON/WHfUNz4qx2eIJEyK/kCuii5k=", + "requires": { + "benchmark": "1.0.0", + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz", + "integrity": "sha1-fQsqLljN3YGQOcKcneZQReGzEOk=", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz", + "integrity": "sha1-O3dB/qSoZnWXbpCNKW1ERZYfqmc=" + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "socks": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", + "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "standard": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", + "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", + "dev": true, + "requires": { + "eslint": "2.10.2", + "eslint-config-standard": "5.3.1", + "eslint-config-standard-jsx": "1.2.1", + "eslint-plugin-promise": "1.3.2", + "eslint-plugin-react": "5.2.2", + "eslint-plugin-standard": "1.3.3", + "standard-engine": "4.1.3" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "eslint": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", + "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "1.5.0", + "es6-map": "0.1.5", + "escope": "3.6.0", + "espree": "3.1.4", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "1.3.1", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.6.1", + "json-stable-stringify": "1.0.1", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "optionator": "0.8.2", + "path-is-absolute": "1.0.1", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.6.1", + "strip-json-comments": "1.0.4", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + } + }, + "eslint-config-standard": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", + "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=", + "dev": true + }, + "eslint-config-standard-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", + "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=", + "dev": true + }, + "eslint-plugin-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", + "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=", + "dev": true + }, + "eslint-plugin-react": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", + "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", + "dev": true, + "requires": { + "doctrine": "1.5.0", + "jsx-ast-utils": "1.4.1" + } + }, + "eslint-plugin-standard": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", + "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=", + "dev": true + }, + "espree": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", + "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", + "dev": true, + "requires": { + "acorn": "3.3.0", + "acorn-jsx": "3.0.1" + } + }, + "file-entry-cache": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", + "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "shelljs": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", + "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + } + } + }, + "standard-engine": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", + "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", + "dev": true, + "requires": { + "defaults": "1.0.3", + "deglob": "1.1.2", + "find-root": "1.1.0", + "get-stdin": "5.0.1", + "minimist": "1.2.0", + "multiline": "1.0.2", + "pkg-config": "1.1.1", + "xtend": "4.0.1" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + } + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "sum-up": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.5", + "slice-ansi": "0.0.4", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "text-hex": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz", + "integrity": "sha1-V4+8haapJjbkLdF7QdAhjM6esrM=" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-iso-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", + "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "1.4.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uberproto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-1.2.0.tgz", + "integrity": "sha1-YdTqsCT5CcTm6lK+hnxIlKS+63Y=" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "utf8": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.0.tgz", + "integrity": "sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "requires": { + "iconv-lite": "0.4.19" + } + }, + "whatwg-url": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", + "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", + "requires": { + "tr46": "0.0.3", + "webidl-conversions": "3.0.1" + }, + "dependencies": { + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + } + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "winston": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz", + "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==", + "requires": { + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + } + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + }, + "dependencies": { + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + } + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" + }, + "xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/package.json b/package.json index 1d07cf8..5bf4519 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "contributors": [], "bugs": {}, "engines": { - "node": "5.4.0" + "node": ">=5.4.0" }, "scripts": { "test": "npm run stylecheck && npm run mocha", @@ -24,50 +24,42 @@ "stylecheck": "find src/ test/ -name *.js | xargs ./node_modules/.bin/standard" }, "dependencies": { - "body-parser": "1.15.0", - "compression": "1.6.1", - "cors": "2.7.1", - "d3": "3.5.17", - "dotenv": "2.0.0", - "feathers": "2.0.1", - "feathers-authentication": "0.7.0", - "feathers-client": "~1.3.2", - "feathers-configuration": "0.2.2", - "feathers-errors": "2.1.0", + "body-parser": "^1.18.2", + "compression": "^1.7.2", + "cors": "^2.8.4", + "d3": "^3.5.17", + "dotenv": "^2.0.0", + "feathers": "^2.2.4", + "feathers-authentication": "^0.7.13", + "feathers-client": "^1.9.0", + "feathers-configuration": "^0.2.3", + "feathers-errors": "^2.9.2", "feathers-hooks": "~1.5.4", - "feathers-mongoose": "3.3.6", - "feathers-rest": "1.2.4", - "feathers-socketio": "1.3.3", + "feathers-mongoose": "^3.6.2", + "feathers-rest": "^1.8.1", + "feathers-socketio": "^1.6.0", "jsdom": "^9.8.3", - "mongodb": "^2.2.33", "mongoose": "4.4.11", "nodemailer": "^2.6.4", - "passport": "0.3.2", - "promise": "7.1.1", - "request": "^2.78.0", - "serve-favicon": "2.3.0", + "promise": "^7.3.1", "socket.io-client": "~1.4.6", - "underscore": "1.8.3", - "winston": "2.2.0" + "underscore": "^1.8.3", + "winston": "^2.4.1" }, "devDependencies": { - "Faker": "0.7.2", - "coveralls": "2.11.9", + "Faker": "^0.7.2", + "coveralls": "^2.13.3", "eslint": "^3.8.1", "eslint-config-standard": "^6.2.0", "eslint-config-standard-jsx": "^3.2.0", "eslint-plugin-promise": "^3.3.0", "eslint-plugin-react": "^6.4.1", "eslint-plugin-standard": "^2.0.1", - "feathers-client": "1.1.0", - "feathers-hooks": "1.5.3", - "istanbul": "0.4.3", - "istanbul-coveralls": "1.0.3", - "mocha": "2.4.5", - "mocha-mongo": "0.2.0", - "promise": "7.1.1", - "request": "2.69.0", - "socket.io-client": "1.4.5", + "istanbul": "^0.4.5", + "istanbul-coveralls": "^1.0.3", + "mocha": "^2.5.3", + "mocha-mongo": "^0.2.0", + "mongodb": "^2.2.35", "standard": "^7.1.2" } } From 9d4cf4f8bc0e56c02539d375dceb9fc3abeeadcc Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Wed, 28 Mar 2018 11:19:10 -0400 Subject: [PATCH 04/35] Install using yarn succeeded w/ new package.json --- yarn.lock | 3468 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3468 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..3acafaf --- /dev/null +++ b/yarn.lock @@ -0,0 +1,3468 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/node@*": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7" + +"@types/socket.io@~1.4.27": + version "1.4.32" + resolved "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-1.4.32.tgz#bf7bc4ea6991327f31672c05e237a8a28d7bfc30" + dependencies: + "@types/node" "*" + +Faker@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/Faker/-/Faker-0.7.2.tgz#c2474bc77bb1d78018b6877d307bd7fdf082fb14" + +abab@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +accepts@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +accepts@~1.3.4, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +access-control@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/access-control/-/access-control-1.0.0.tgz#aeba282cee77313e85240163d69e35b29e36d626" + dependencies: + millisecond "0.1.x" + setheader "0.0.x" + vary "1.1.x" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4, acorn@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.5.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + +addressparser@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" + +after@0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + +ajv-keywords@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array.prototype.find@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +arraybuffer.slice@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async@1.5.2, async@1.x, async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + +asyncemit@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/asyncemit/-/asyncemit-3.0.1.tgz#cc3e0fe0da39b53cc15e5b3aa8616ea6a72bd599" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.16.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-polyfill@^6.3.14: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-arraybuffer@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154" + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + +base64url@2.0.0, base64url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +bcryptjs@^2.3.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" + +benchmark@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-1.0.0.tgz#2f1e2fa4c359f11122aa183082218e957e390c73" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + +bluebird@2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.10.2.tgz#024a5517295308857f14f91f1106fc3b555f446b" + +body-parser@1.18.2, body-parser@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +bson@~0.2: + version "0.2.22" + resolved "https://registry.yarnpkg.com/bson/-/bson-0.2.22.tgz#fcda103f26d0c074d5a52d50927db80fd02b4b39" + dependencies: + nan "~1.8" + +bson@~0.4.21: + version "0.4.23" + resolved "https://registry.yarnpkg.com/bson/-/bson-0.4.23.tgz#e65a2e3c7507ffade4109bc7575a76e50f8da915" + +bson@~1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.6.tgz#444db59ddd4c24f0cb063aabdc5c8c7b0ceca912" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + +buffer-from@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buildmail@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" + dependencies: + addressparser "1.0.1" + libbase64 "0.1.0" + libmime "3.0.0" + libqp "1.1.0" + nodemailer-fetch "1.6.0" + nodemailer-shared "1.1.0" + punycode "1.4.1" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" + +color-name@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@0.8.x: + version "0.8.0" + resolved "https://registry.yarnpkg.com/color/-/color-0.8.0.tgz#890c07c3fd4e649537638911cf691e5458b6fca5" + dependencies: + color-convert "^0.5.0" + color-string "^0.3.0" + +colornames@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/colornames/-/colornames-0.0.2.tgz#d811fd6c84f59029499a8ac4436202935b92be31" + +colors@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colorspace@1.0.x: + version "1.0.1" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.0.1.tgz#c99c796ed31128b9876a52e1ee5ee03a4a719749" + dependencies: + color "0.8.x" + text-hex "0.0.x" + +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" + +commander@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" + +commander@^2.9.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" + +component-emitter@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + +compressible@~2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" + dependencies: + mime-db ">= 1.33.0 < 2" + +compression@^1.7.2: + version "1.7.2" + resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + dependencies: + accepts "~1.3.4" + bytes "3.0.0" + compressible "~2.0.13" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.6, concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connected@0.0.x: + version "0.0.2" + resolved "https://registry.yarnpkg.com/connected/-/connected-0.0.2.tgz#7b5755b216ce31ffabccc38e9f4e1dfc1c3b7c6d" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type-parser@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cors@^2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.4.tgz#2bd381f2eb201020105cd50ea59da63090694686" + dependencies: + object-assign "^4" + vary "^1" + +coveralls@^2.11.2, coveralls@^2.13.3: + version "2.13.3" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.3.tgz#9ad7c2ae527417f361e8b626483f48ee92dd2bc7" + dependencies: + js-yaml "3.6.1" + lcov-parse "0.0.10" + log-driver "1.2.5" + minimist "1.2.0" + request "2.79.0" + +create-server@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/create-server/-/create-server-1.0.1.tgz#164342834f188bbec7c7bc4667463cc2b1304c44" + dependencies: + connected "0.0.x" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + +d3@^3.5.17: + version "3.5.17" + resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug-log@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + +debug@0.7.x: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + +debug@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +debug@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" + dependencies: + ms "0.7.2" + +debug@2.6.9, debug@^2.1.1, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +defaults@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +deglob@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/deglob/-/deglob-1.1.2.tgz#76d577c25fe3f7329412a2b59eadea57ac500e3f" + dependencies: + find-root "^1.0.0" + glob "^7.0.5" + ignore "^3.0.9" + pkg-config "^1.1.0" + run-parallel "^1.1.2" + uniq "^1.0.1" + xtend "^4.0.0" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +diagnostics@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.0.tgz#e1090900b49523e8527be20f081275205f2ae36a" + dependencies: + colorspace "1.0.x" + enabled "1.0.x" + kuler "0.0.x" + +diff@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +doctrine@^1.2.1, doctrine@^1.2.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + +dotenv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ecdsa-sig-formatter@1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" + dependencies: + base64url "^2.0.0" + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +emits@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emits/-/emits-3.0.0.tgz#32752bba95e1707b219562384ab9bb8b1fd62f70" + +enabled@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93" + dependencies: + env-variable "0.0.x" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +engine.io-client@1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.6.11.tgz#7d250d8fa1c218119ecde51390458a57d5171376" + dependencies: + component-emitter "1.1.2" + component-inherit "0.0.3" + debug "2.2.0" + engine.io-parser "1.2.4" + has-cors "1.1.0" + indexof "0.0.1" + parsejson "0.0.1" + parseqs "0.0.2" + parseuri "0.0.4" + ws "1.0.1" + xmlhttprequest-ssl "1.5.1" + yeast "0.1.2" + +engine.io-client@~1.8.4: + version "1.8.5" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.5.tgz#fe7fb60cb0dcf2fa2859489329cb5968dedeb11f" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "2.3.3" + engine.io-parser "1.3.2" + has-cors "1.1.0" + indexof "0.0.1" + parsejson "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~1.1.5" + xmlhttprequest-ssl "1.5.3" + yeast "0.1.2" + +engine.io-parser@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.2.4.tgz#e0897b0bf14e792d4cd2a5950553919c56948c42" + dependencies: + after "0.8.1" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.2" + blob "0.0.4" + has-binary "0.1.6" + utf8 "2.1.0" + +engine.io-parser@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" + dependencies: + after "0.8.2" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary "0.1.7" + wtf-8 "1.0.0" + +engine.io@~1.8.4: + version "1.8.5" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.5.tgz#4ebe5e75c6dc123dee4afdce6e5fdced21eb93f6" + dependencies: + accepts "1.3.3" + base64id "1.0.0" + cookie "0.3.1" + debug "2.3.3" + engine.io-parser "1.3.2" + ws "~1.1.5" + +env-variable@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.4.tgz#0d6280cf507d84242befe35a512b5ae4be77c54e" + +es-abstract@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.42" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.42.tgz#8c07dd33af04d5dcd1310b5cef13bea63a89ba8d" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-promise@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" + +es6-promise@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +escodegen@^1.6.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-standard-jsx@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz#0d19b1705f0ad48363ef2a8bbfa71df012d989b3" + +eslint-config-standard-jsx@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz#cab0801a15a360bf63facb97ab22fbdd88d8a5e0" + +eslint-config-standard@5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz#591c969151744132f561d3b915a812ea413fe490" + +eslint-config-standard@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz#d3a68aafc7191639e7ee441e7348739026354292" + +eslint-plugin-promise@^1.0.8: + version "1.3.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz#fce332d6f5ff523200a537704863ec3c2422ba7c" + +eslint-plugin-promise@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz#f4bde5c2c77cdd69557a8f69a24d1ad3cfc9e67e" + +eslint-plugin-react@^5.0.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz#7db068e1f5487f6871e4deef36a381c303eac161" + dependencies: + doctrine "^1.2.2" + jsx-ast-utils "^1.2.1" + +eslint-plugin-react@^6.4.1: + version "6.10.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" + dependencies: + array.prototype.find "^2.0.1" + doctrine "^1.2.2" + has "^1.0.1" + jsx-ast-utils "^1.3.4" + object.assign "^4.0.4" + +eslint-plugin-standard@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz#a3085451523431e76f409c70cb8f94e32bf0ec7f" + +eslint-plugin-standard@^2.0.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-2.3.1.tgz#6765bd2a6d9ecdc7bdf1b145ae4bb30e2b7b86f8" + +eslint@^3.8.1: + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.5.2" + debug "^2.1.1" + doctrine "^2.0.0" + escope "^3.6.0" + espree "^3.4.0" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +eslint@~2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.10.2.tgz#b2309482fef043d3203365a321285e6cce01c3d7" + dependencies: + chalk "^1.1.3" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^1.2.1" + es6-map "^0.1.3" + escope "^3.6.0" + espree "3.1.4" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^1.1.1" + glob "^7.0.3" + globals "^9.2.0" + ignore "^3.1.2" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + optionator "^0.8.1" + path-is-absolute "^1.0.0" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.6.0" + strip-json-comments "~1.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.1.4.tgz#0726d7ac83af97a7c8498da9b363a3609d2a68a1" + dependencies: + acorn "^3.1.0" + acorn-jsx "^3.0.0" + +espree@^3.4.0: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@~2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" + +events@^1.1.0, events@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +express@^4.12.3, express@^4.16.1: + version "4.16.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extendible@0.1.x: + version "0.1.1" + resolved "https://registry.yarnpkg.com/extendible/-/extendible-0.1.1.tgz#e2a37ed87129fb4f9533e8a8d7506230a539c905" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +feathers-authentication@0.7.12: + version "0.7.12" + resolved "https://registry.yarnpkg.com/feathers-authentication/-/feathers-authentication-0.7.12.tgz#858e9ec3b91b8404be0e55c3f040f8489f1066a9" + dependencies: + bcryptjs "^2.3.0" + debug "^2.2.0" + feathers-errors "^2.0.1" + feathers-hooks "^1.5.0" + jsonwebtoken "^5.4.0" + lodash.isplainobject "^4.0.4" + passport "^0.3.0" + passport-local "^1.0.0" + +feathers-authentication@^0.7.13: + version "0.7.13" + resolved "https://registry.yarnpkg.com/feathers-authentication/-/feathers-authentication-0.7.13.tgz#df2dcab5ae285b75194cef442b85c39ebfb8e00e" + dependencies: + bcryptjs "^2.3.0" + debug "^2.2.0" + feathers-errors "^2.0.1" + feathers-hooks "^1.5.0" + jsonwebtoken "^5.4.0" + lodash.isplainobject "^4.0.4" + passport "^0.3.0" + passport-local "^1.0.0" + +feathers-client@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/feathers-client/-/feathers-client-1.9.0.tgz#b1086314b0cf68fce049cddfabd9d0ebcd4b0146" + dependencies: + feathers "2.0.3" + feathers-authentication "0.7.12" + feathers-commons "^0.8.7" + feathers-hooks "1.7.1" + feathers-primus "2.0.0" + feathers-rest "1.6.0" + feathers-socketio "1.4.2" + +feathers-commons@^0.7.0: + version "0.7.8" + resolved "https://registry.yarnpkg.com/feathers-commons/-/feathers-commons-0.7.8.tgz#11b119c30dd1ea9c505c2537b12504aedaa3fe7d" + +feathers-commons@^0.8.0, feathers-commons@^0.8.4, feathers-commons@^0.8.6, feathers-commons@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/feathers-commons/-/feathers-commons-0.8.7.tgz#11c6f25b537745a983e8d61552d7db8932d53782" + +feathers-configuration@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/feathers-configuration/-/feathers-configuration-0.2.3.tgz#7458655820dfad75a9fb307d066835e412d1fd56" + dependencies: + debug "^2.2.0" + +feathers-errors@^2.0.1, feathers-errors@^2.2.0, feathers-errors@^2.4.0, feathers-errors@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/feathers-errors/-/feathers-errors-2.9.2.tgz#96ca0e5fe50cc56f0eccc90ce3fa5e1f8840828d" + dependencies: + debug "^3.0.0" + +feathers-hooks-common@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/feathers-hooks-common/-/feathers-hooks-common-2.0.3.tgz#e9f12abebdbc163f28d4cb4c85094e29aa24635d" + dependencies: + debug "^2.2.0" + feathers-errors "^2.4.0" + traverse "0.6.6" + +feathers-hooks@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/feathers-hooks/-/feathers-hooks-1.7.1.tgz#d1df225a64bf3d09f10988a418e70a79032bf4c9" + dependencies: + feathers-commons "^0.8.6" + feathers-hooks-common "^2.0.3" + uberproto "^1.2.0" + +feathers-hooks@^1.5.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/feathers-hooks/-/feathers-hooks-1.8.1.tgz#cba0c46f309cd6e368faeb4957a2dec9d7f2898f" + dependencies: + feathers-commons "^0.8.6" + feathers-hooks-common "^2.0.3" + uberproto "^1.2.0" + +feathers-hooks@~1.5.4: + version "1.5.8" + resolved "https://registry.yarnpkg.com/feathers-hooks/-/feathers-hooks-1.5.8.tgz#a6e39d4c90ff7c2b206a8a528d193073361c691d" + dependencies: + feathers-commons "^0.7.0" + feathers-errors "^2.0.1" + +feathers-mongoose@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/feathers-mongoose/-/feathers-mongoose-3.6.2.tgz#a3f91e40ae8c6bc0627b6c09849b94be915e7f2e" + dependencies: + feathers-commons "^0.8.4" + feathers-errors "^2.0.1" + feathers-query-filters "^2.0.0" + lodash.omit "^4.3.0" + uberproto "^1.2.0" + +feathers-primus@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/feathers-primus/-/feathers-primus-2.0.0.tgz#1b6ce01b05e763161867fe968434d8890ca9156e" + dependencies: + debug "^2.2.0" + feathers-socket-commons "^2.0.0" + primus "^6.0.5" + primus-emitter "^3.1.1" + uberproto "^1.2.0" + +feathers-query-filters@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/feathers-query-filters/-/feathers-query-filters-2.1.2.tgz#cdb18224db5e19cc0140d528108e0908d5eb0654" + dependencies: + feathers-commons "^0.8.0" + +feathers-rest@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/feathers-rest/-/feathers-rest-1.6.0.tgz#2ff4eb74445882c4f8901841b436cff7ad3de971" + dependencies: + debug "^2.2.0" + feathers-commons "^0.8.0" + feathers-errors "^2.0.1" + qs "^6.0.1" + +feathers-rest@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/feathers-rest/-/feathers-rest-1.8.1.tgz#3251a80ec4419763bc214dd8bb1f0a59d4ff9f35" + dependencies: + debug "^3.0.0" + feathers-commons "^0.8.0" + feathers-errors "^2.0.1" + qs "^6.4.0" + +feathers-socket-commons@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/feathers-socket-commons/-/feathers-socket-commons-2.4.0.tgz#062efd57f9a8716644145b993a5f72709969f1e1" + dependencies: + debug "^2.2.0" + feathers-commons "^0.8.0" + feathers-errors "^2.2.0" + +feathers-socketio@1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/feathers-socketio/-/feathers-socketio-1.4.2.tgz#0557a61804b456d40d265b86fec6d96f01dd93bd" + dependencies: + debug "^2.2.0" + feathers-socket-commons "^2.0.0" + socket.io "^1.5.1" + uberproto "^1.2.0" + +feathers-socketio@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/feathers-socketio/-/feathers-socketio-1.6.0.tgz#9ccf9a65274c6e1fca2bd8f9e7b847be04af99ad" + dependencies: + "@types/socket.io" "~1.4.27" + debug "^2.2.0" + feathers-socket-commons "^2.0.0" + socket.io "^1.7.1" + uberproto "^1.2.0" + +feathers@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/feathers/-/feathers-2.0.3.tgz#a9fc63a7126f4bc137456e13efd25047fdb308b9" + dependencies: + babel-polyfill "^6.3.14" + debug "^2.1.1" + events "^1.1.0" + express "^4.12.3" + feathers-commons "^0.8.7" + rubberduck "^1.0.0" + uberproto "^1.2.0" + +feathers@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/feathers/-/feathers-2.2.4.tgz#5ed23e27a8889a4409a408f80fc2f2a5f7dd9175" + dependencies: + babel-runtime "^6.26.0" + debug "^3.1.0" + events "^1.1.1" + express "^4.16.1" + feathers-commons "^0.8.7" + rubberduck "^1.1.1" + uberproto "^1.2.0" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^1.1.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +find-root@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +forwarded-for@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/forwarded-for/-/forwarded-for-1.0.1.tgz#e7da4814025168ffc0a10d3ff79e1415f46af469" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +fusing@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fusing/-/fusing-1.0.0.tgz#550c15d76af9265778aa051ece44d4000a098d45" + dependencies: + emits "3.0.x" + predefine "0.1.x" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob@3.2.11: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.14.0, globals@^9.2.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +handlebars@^4.0.1: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-binary@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10" + dependencies: + isarray "0.0.1" + +has-binary@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" + dependencies: + isarray "0.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + +hooks-fixed@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-1.1.0.tgz#0e8c15336708e6611185fe390b44687dd5230dbb" + +html-encoding-sniffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +httpntlm@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" + dependencies: + httpreq ">=0.4.22" + underscore "~1.7.0" + +httpreq@>=0.4.22: + version "0.4.24" + resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" + +iconv-lite@0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +ignore@^3.0.9, ignore@^3.1.2, ignore@^3.2.0: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + +ip@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: + version "2.17.2" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isstream@0.1.x, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-coveralls@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/istanbul-coveralls/-/istanbul-coveralls-1.0.3.tgz#4f1c1592be104d591f933cbf9c0f2f5284adcf00" + dependencies: + chalk "^1.0.0" + coveralls "^2.11.2" + minimist "^1.1.1" + rimraf "^2.3.4" + sum-up "^1.0.1" + +istanbul@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jade@0.26.3: + version "0.26.3" + resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" + dependencies: + commander "0.6.1" + mkdirp "0.3.0" + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +js-yaml@3.x, js-yaml@^3.5.1: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.8.3: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsonwebtoken@^5.4.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-5.7.0.tgz#1c90f9a86ce5b748f5f979c12b70402b4afcddb4" + dependencies: + jws "^3.0.0" + ms "^0.7.1" + xtend "^4.0.1" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^1.2.1, jsx-ast-utils@^1.3.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + +jwa@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" + dependencies: + base64url "2.0.0" + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.9" + safe-buffer "^5.0.1" + +jws@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" + dependencies: + base64url "^2.0.0" + jwa "^1.1.4" + safe-buffer "^5.0.1" + +kareem@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.0.1.tgz#7805d215bb53214ec3af969a1d0b1f17e3e7b95c" + +kerberos@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/kerberos/-/kerberos-0.0.11.tgz#cb29891c21c22ac195f3140b97dd12204fea7dc2" + dependencies: + nan "~1.8" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kuler@0.0.x: + version "0.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-0.0.0.tgz#b66bb46b934e550f59d818848e0abba4f7f5553c" + dependencies: + colornames "0.0.2" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcov-parse@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +libbase64@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" + +libmime@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" + dependencies: + iconv-lite "0.4.15" + libbase64 "0.1.0" + libqp "1.1.0" + +libqp@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" + +lodash.isplainobject@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.omit@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" + +lodash@^4.0.0, lodash@^4.3.0: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +log-driver@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +mailcomposer@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" + dependencies: + buildmail "4.0.1" + libmime "3.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +millisecond@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/millisecond/-/millisecond-0.1.2.tgz#6cc5ad386241cab8e78aff964f87028eec92dac5" + +"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +minimatch@0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +"minimatch@2 || 3", minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha-mongo@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/mocha-mongo/-/mocha-mongo-0.2.0.tgz#5a5c763547a4d47533ce2817fb4daac49ae739bf" + dependencies: + mongodb "1.4.x" + qbox "0.1.x" + +mocha@^2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" + dependencies: + commander "2.3.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.2" + glob "3.2.11" + growl "1.9.2" + jade "0.26.3" + mkdirp "0.5.1" + supports-color "1.2.0" + to-iso-string "0.0.2" + +mongodb-core@1.3.13: + version "1.3.13" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-1.3.13.tgz#0a8e8719461ed98f36ed981ae00fa65d8b97781d" + dependencies: + bson "~0.4.21" + require_optional "~1.0.0" + +mongodb-core@2.1.19: + version "2.1.19" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.19.tgz#00fbd5e5a3573763b9171cfd844e60a8f2a3a18b" + dependencies: + bson "~1.0.4" + require_optional "~1.0.0" + +mongodb@1.4.x: + version "1.4.40" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-1.4.40.tgz#cfd80b74fdf0fa053f2ccfb5f49c47ca32a38efb" + dependencies: + bson "~0.2" + optionalDependencies: + kerberos "0.0.11" + readable-stream latest + +mongodb@2.1.14: + version "2.1.14" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.1.14.tgz#d78e9d70e0966ed56aba87abd15a1f1ab9478c85" + dependencies: + es6-promise "3.0.2" + mongodb-core "1.3.13" + readable-stream "1.0.31" + +mongodb@^2.2.35: + version "2.2.35" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.35.tgz#cd1b5af8a9463e3f9a787fa5b3d05565579730f9" + dependencies: + es6-promise "3.2.1" + mongodb-core "2.1.19" + readable-stream "2.2.7" + +mongoose@4.4.11: + version "4.4.11" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.4.11.tgz#ea67e1cf819d180f96dbd4e205675596d55b9d68" + dependencies: + async "1.5.2" + bson "~0.4.21" + hooks-fixed "1.1.0" + kareem "1.0.1" + mongodb "2.1.14" + mpath "0.2.1" + mpromise "0.5.5" + mquery "1.10.0" + ms "0.7.1" + muri "1.1.0" + regexp-clone "0.0.1" + sliced "1.0.1" + +mpath@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.2.1.tgz#3a4e829359801de96309c27a6b2e102e89f9e96e" + +mpromise@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" + +mquery@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-1.10.0.tgz#8603f02b0b524d17ac0539a85996124ee17b7cb3" + dependencies: + bluebird "2.10.2" + debug "2.2.0" + regexp-clone "0.0.1" + sliced "0.0.5" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +ms@^0.7.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" + +multiline@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/multiline/-/multiline-1.0.2.tgz#69b1f25ff074d2828904f244ddd06b7d96ef6c93" + dependencies: + strip-indent "^1.0.0" + +muri@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/muri/-/muri-1.1.0.tgz#a3a6d74e68a880f433a249a74969cbb665cc0add" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +nan@~1.8: + version "1.8.4" + resolved "https://registry.yarnpkg.com/nan/-/nan-1.8.4.tgz#3c76b5382eab33e44b758d2813ca9d92e9342f34" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + +nodemailer-direct-transport@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" + dependencies: + nodemailer-shared "1.1.0" + smtp-connection "2.12.0" + +nodemailer-fetch@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" + +nodemailer-shared@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" + dependencies: + nodemailer-fetch "1.6.0" + +nodemailer-smtp-pool@2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" + dependencies: + nodemailer-shared "1.1.0" + nodemailer-wellknown "0.1.10" + smtp-connection "2.12.0" + +nodemailer-smtp-transport@2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" + dependencies: + nodemailer-shared "1.1.0" + nodemailer-wellknown "0.1.10" + smtp-connection "2.12.0" + +nodemailer-wellknown@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" + +nodemailer@^2.6.4: + version "2.7.2" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" + dependencies: + libmime "3.0.0" + mailcomposer "4.0.1" + nodemailer-direct-transport "3.3.2" + nodemailer-shared "1.1.0" + nodemailer-smtp-pool "2.8.2" + nodemailer-smtp-transport "2.7.2" + socks "1.1.9" + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.4.4" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + +object-keys@^1.0.11, object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.assign@^4.0.4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@1.x, once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +parsejson@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.1.tgz#9b10c6c0d825ab589e685153826de0a3ba278bcc" + dependencies: + better-assert "~1.0.0" + +parsejson@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" + dependencies: + better-assert "~1.0.0" + +parseqs@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.2.tgz#9dfe70b2cddac388bde4f35b1f240fa58adbe6c7" + dependencies: + better-assert "~1.0.0" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.4.tgz#806582a39887e1ea18dd5e2fe0e01902268e9350" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +passport-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + dependencies: + passport-strategy "1.x.x" + +passport-strategy@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + +passport@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.3.2.tgz#9dd009f915e8fe095b0124a01b8f82da07510102" + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-config@^1.0.1, pkg-config@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" + dependencies: + debug-log "^1.0.0" + find-root "^1.0.0" + xtend "^4.0.1" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +predefine@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/predefine/-/predefine-0.1.2.tgz#2aa92b4496bc1f8554e43a45f76bfbe50d33d37f" + dependencies: + extendible "0.1.x" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +primus-emitter@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/primus-emitter/-/primus-emitter-3.1.1.tgz#a85a36353fe8a96975be5edfebd7ee66c84dce1b" + +primus@^6.0.5: + version "6.1.0" + resolved "https://registry.yarnpkg.com/primus/-/primus-6.1.0.tgz#b3bf4c938eb07874b872bc2b0ce9c0da855d6c12" + dependencies: + access-control "~1.0.0" + asyncemit "~3.0.1" + create-server "~1.0.1" + diagnostics "~1.1.0" + eventemitter3 "~2.0.2" + forwarded-for "~1.0.1" + fusing "~1.0.0" + setheader "~0.0.4" + ultron "~1.1.0" + yeast "~0.1.2" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +promise@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +proxy-addr@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.6.0" + +punycode@1.4.1, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qbox@0.1.x: + version "0.1.7" + resolved "https://registry.yarnpkg.com/qbox/-/qbox-0.1.7.tgz#e80f0dc5d09f869d8882168c3f66ac8dd2840f02" + +qs@6.5.1, qs@^6.0.1, qs@^6.4.0, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +readable-stream@1.0.31: + version "1.0.31" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.31.tgz#8f2502e0bc9e3b0da1b94520aabb4e2603ecafae" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +readable-stream@^2.2.2, readable-stream@latest: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regexp-clone@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +request@2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + +request@^2.79.0: + version "2.85.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +require_optional@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6: + version "1.6.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.2.8, rimraf@^2.3.4: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rubberduck@^1.0.0, rubberduck@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rubberduck/-/rubberduck-1.1.1.tgz#cd2cda4b867178135eafc995a71384f5f743db02" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +run-parallel@^1.1.2: + version "1.1.8" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.8.tgz#70e4e788f13a1ad9603254f6a2277f3843a5845c" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sax@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +semver@^5.1.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +setheader@0.0.x, setheader@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/setheader/-/setheader-0.0.4.tgz#926ed28cf762149620931e7aea3f1b95816ec694" + dependencies: + debug "0.7.x" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +shelljs@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" + +shelljs@^0.7.5: + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +sliced@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" + +sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + +smart-buffer@^1.0.4: + version "1.1.15" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" + +smtp-connection@2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" + dependencies: + httpntlm "1.6.1" + nodemailer-shared "1.1.0" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +socket.io-adapter@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" + dependencies: + debug "2.3.3" + socket.io-parser "2.3.1" + +socket.io-client@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz#ec9f820356ed99ef6d357f0756d648717bdd4281" + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "2.3.3" + engine.io-client "~1.8.4" + has-binary "0.1.7" + indexof "0.0.1" + object-component "0.0.3" + parseuri "0.0.5" + socket.io-parser "2.3.1" + to-array "0.1.4" + +socket.io-client@~1.4.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.4.8.tgz#481b241e73df140ea1a4fb03486a85ad097f5558" + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "1.2.0" + debug "2.2.0" + engine.io-client "1.6.11" + has-binary "0.1.7" + indexof "0.0.1" + object-component "0.0.3" + parseuri "0.0.4" + socket.io-parser "2.2.6" + to-array "0.1.4" + +socket.io-parser@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.6.tgz#38dfd61df50dcf8ab1d9e2091322bf902ba28b99" + dependencies: + benchmark "1.0.0" + component-emitter "1.1.2" + debug "2.2.0" + isarray "0.0.1" + json3 "3.3.2" + +socket.io-parser@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" + dependencies: + component-emitter "1.1.2" + debug "2.2.0" + isarray "0.0.1" + json3 "3.3.2" + +socket.io@^1.5.1, socket.io@^1.7.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz#2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00" + dependencies: + debug "2.3.3" + engine.io "~1.8.4" + has-binary "0.1.7" + object-assign "4.1.0" + socket.io-adapter "0.5.0" + socket.io-client "1.7.4" + socket.io-parser "2.3.1" + +socks@1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" + dependencies: + ip "^1.1.2" + smart-buffer "^1.0.4" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + +standard-engine@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-4.1.3.tgz#7a31aad54f03d9f39355f43389ce0694f4094155" + dependencies: + defaults "^1.0.2" + deglob "^1.0.0" + find-root "^1.0.0" + get-stdin "^5.0.1" + minimist "^1.1.0" + multiline "^1.0.2" + pkg-config "^1.0.1" + xtend "^4.0.0" + +standard@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/standard/-/standard-7.1.2.tgz#40166eeec2405065d1a4f0e3f15babc6e274607e" + dependencies: + eslint "~2.10.2" + eslint-config-standard "5.3.1" + eslint-config-standard-jsx "1.2.1" + eslint-plugin-promise "^1.0.8" + eslint-plugin-react "^5.0.1" + eslint-plugin-standard "^1.3.1" + standard-engine "^4.0.0" + +"statuses@>= 1.3.1 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +sum-up@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e" + dependencies: + chalk "^1.0.0" + +supports-color@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +text-hex@0.0.x: + version "0.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-0.0.0.tgz#578fbc85a6a92636e42dd17b41d0218cce9eb2b3" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + +to-iso-string@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +traverse@0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uberproto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/uberproto/-/uberproto-1.2.0.tgz#61d4eab024f909c4e6ea52be867c4894a4beeb76" + +uglify-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + +underscore@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +underscore@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +utf8@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.0.tgz#0cfec5c8052d44a23e3aaa908104e8075f95dfd5" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +vary@1.1.x, vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +whatwg-encoding@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +winston@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.1.tgz#a3a9265105564263c6785b4583b8c8aca26fded6" + dependencies: + async "~1.0.0" + colors "1.0.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + stack-trace "0.0.x" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +ws@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@~1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +wtf-8@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" + +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +xmlhttprequest-ssl@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67" + +xmlhttprequest-ssl@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yeast@0.1.2, yeast@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From eaf7b66bc4d789380c81341eac01c64f784331ac Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Thu, 29 Mar 2018 15:48:05 -0400 Subject: [PATCH 05/35] 1st pass at adding a docker container for rhythm-rtc --- docker/rhythm-rtc/Dockerfile | 27 +++++++++++++++++++++------ docker/rrtc-shell.sh | 17 +++++++++++++++++ docker/rs-shell.sh | 7 ++----- docker/testenv.sh | 6 +++++- 4 files changed, 45 insertions(+), 12 deletions(-) create mode 100755 docker/rrtc-shell.sh diff --git a/docker/rhythm-rtc/Dockerfile b/docker/rhythm-rtc/Dockerfile index e89e4a4..be240c8 100644 --- a/docker/rhythm-rtc/Dockerfile +++ b/docker/rhythm-rtc/Dockerfile @@ -1,9 +1,24 @@ -FROM node:5.6 -LABEL Description="This image is used to for developing the rhythm-server" +FROM node:8 +LABEL Description="This image is used to for developing the rhythm-rtc" -EXPOSE 3000 -ENV NODE_ENV=docker +ENV REACT_APP_SERVER_TOKEN=my-secret +ENV REACT_APP_SERVER_URL=localhost:3000 +ENV REACT_APP_SERVER_EMAIL=default-user-email +ENV REACT_APP_SERVER_PASSWORD=default-user-password +ENV REACT_APP_TRACK_FACE=false +ENV REACT_APP_SIGNALMASTER_URL=sigalmaster.url +ENV PORT=3001 +ENV CONSUMER_KEY=key +ENV CONSUMER_SECRET=secret +ENV SESSION_SECRET=secret +ENV REACT_APP_DEBUG=true +ENV CI=false + +EXPOSE 3001 + +# rhythm-rtc repository working directory must be bound at /app and all dependent packages installed +VOLUME /app WORKDIR /app -# ENTRYPOINT ["node", "brixapp.js"] -ENTRYPOINT ["/bin/bash"] +CMD ["npm", "start"] +# ENTRYPOINT ["/bin/bash"] diff --git a/docker/rrtc-shell.sh b/docker/rrtc-shell.sh new file mode 100755 index 0000000..7fa5e8f --- /dev/null +++ b/docker/rrtc-shell.sh @@ -0,0 +1,17 @@ +#! /bin/bash + +# Default path to the rhythm server directory +RHYTHM_RTC_PATH=~/Projects/riff/rhythm-rtc +RHYTHM_MONGO_DATA_PATH=~/Projects/riff/rhythm-server/data +DOCKER_ENGINE_IP=127.0.0.1 + +# include .rhythmdevrc if it exists to redefine the variables w/ values of locations of +# working directories for any components +if [ -f "$HOME/.rhythmdevrc" ] +then + . "$HOME/.rhythmdevrc" +fi + + +# It attaches to my rhythm-rtc repo working directory so whatever I have there is what will run +docker run --rm -it --net rhythm -p ${DOCKER_ENGINE_IP}:3001:3001 -v ${RHYTHM_RTC_PATH}:/app --name rrtc-shell local/rhythm-rtc bash diff --git a/docker/rs-shell.sh b/docker/rs-shell.sh index 083a9e6..17fa4e2 100755 --- a/docker/rs-shell.sh +++ b/docker/rs-shell.sh @@ -1,8 +1,5 @@ #! /bin/bash -#NODE_VERSION=5.6 -NODE_VERSION=5.4.0 - # Default path to the rhythm server directory RHYTHM_SERVER_PATH=~/Projects/riff/rhythm-server/ RHYTHM_MONGO_DATA_PATH=~/Projects/riff/rhythm-server/data/ @@ -12,11 +9,11 @@ DOCKER_ENGINE_IP=127.0.0.1 # working directories for any components if [ -f "$HOME/.rhythmdevrc" ] then - . "$HOME/.riffdevrc" + . "$HOME/.rhythmdevrc" fi # It attaches to my rhythm-server repo working directory so whatever I have there is what will run #docker run -d --net rhythm -p ${DOCKER_ENGINE_IP}:27017:27017 -v ${RHYTHM_MONGO_DATA_PATH}:/data/db --name rhythm-mongo-server mongo docker start rhythm-mongo-server -docker run --rm -it --net rhythm -p ${DOCKER_ENGINE_IP}:3000:3000 -v ${RHYTHM_SERVER_PATH}:/app -w /app --name rs-shell local/rhythm-server bash +docker run --rm -it --net rhythm -p ${DOCKER_ENGINE_IP}:3000:3000 -v ${RHYTHM_SERVER_PATH}:/app --name rs-shell local/rhythm-server bash diff --git a/docker/testenv.sh b/docker/testenv.sh index c4e9c4e..7c10342 100755 --- a/docker/testenv.sh +++ b/docker/testenv.sh @@ -1,6 +1,7 @@ #! /bin/bash # Default paths to the rhythm working directories +RHYTHM_RTC_PATH=~/Projects/riff/rhythm-rtc RHYTHM_SERVER_PATH=~/Projects/riff/rhythm-server RHYTHM_MONGO_DATA_PATH=~/Projects/riff/rhythm-server/data DOCKER_ENGINE_IP=127.0.0.1 @@ -42,7 +43,7 @@ case $1 in make-images) # Create the docker images docker build -t local/rhythm-server docker/rhythm-server - # docker build -t local/rhythm-rtc docker/rhythm-rtc + docker build -t local/rhythm-rtc docker/rhythm-rtc ;; initial-start) # run the webserver for accessing the testpage at localhost/tests/integration/testpage-divs.html @@ -54,6 +55,9 @@ case $1 in # run the rhythm-server docker run -d --net rhythm -p ${DOCKER_ENGINE_IP}:3000:3000 -v ${RHYTHM_SERVER_PATH}:/app -w /app --name rhythm-server local/rhythm-server + + # run the rhythm-rtc + docker run -d --net rhythm -p ${DOCKER_ENGINE_IP}:3001:3001 -v ${RHYTHM_RTC_PATH}:/app -w /app --name rhythm-rtc local/rhythm-rtc ;; start) # start the containers once they've been created using initial-start From 45b5324abe4eb753f4c7a330cc6d6728f8782aaf Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sat, 31 Mar 2018 16:21:40 -0400 Subject: [PATCH 06/35] work on docker-compose to replace custom docker scripts (testenv.sh, etc) remove ENV settings from rhythm-server Dockerfile because the .env file is loaded via the dotenv package required by the relevant package json scripts. It is also loaded by heroku when this application is deployed there. --- docker-compose.yml | 22 ++++++++++++++++++++++ docker/rhythm-server/Dockerfile | 22 +--------------------- docker/rhythm-server/env_config | 19 ------------------- 3 files changed, 23 insertions(+), 40 deletions(-) create mode 100644 docker-compose.yml delete mode 100644 docker/rhythm-server/env_config diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b913864 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + rhythm-server: + build: docker/rhythm-server + ports: + - '3000:3000' + volumes: + - ${RHYTHM_SERVER_PATH-.}:/app + depends_on: + - mongo-server + rhythm-rtc: + build: docker/rhythm-rtc + ports: + - '3001:3001' + volumes: + - ${RHYTHM_RTC_PATH-../rhythm-rtc}:/app + depends_on: + - rhythm-server + mongo-server: + image: mongo:latest + volumes: + - ${RHYTHM_DB_PATH-./data}:/data/db diff --git a/docker/rhythm-server/Dockerfile b/docker/rhythm-server/Dockerfile index decd678..9d661f8 100644 --- a/docker/rhythm-server/Dockerfile +++ b/docker/rhythm-server/Dockerfile @@ -1,25 +1,5 @@ FROM node:8 -LABEL Description="This image is used to for developing the rhythm-server" - -ENV AUTH_ID_FIELD="id" -ENV AUTH_ON="true" -ENV AUTH_TOKEN_EXPIRESIN="1000d" -ENV AUTH_TOKEN_SECRET="my-secret" -ENV CRYPTO_KEY="'your-key-here'" -ENV DEFAULT_USER_EMAIL="default-user-email" -ENV DEFAULT_USER_PASSWORD="default-user-password" -ENV MONGODB_URI="mongodb://rhythm-mongo-server/rhythm-test" -ENV MONGO_CERT="some-fake-cert" -ENV NODE_ENV="default" -ENV PORT="3000" -ENV REPORT_EMAIL_FROM="'MM Reports' " -ENV REPORT_EMAIL_HOST="smtp server here" -ENV REPORT_EMAIL_LOGIN="email@address.com" -ENV REPORT_EMAIL_PASSWORD="emailpassword" -ENV REPORT_EMAIL_SUBJECT="Your Group Discussion Report" -ENV REPORT_EMAIL_TEXT="See attached for a visual report of your recent group discussion!" -ENV SEND_REPORT="false" -ENV END_MEETING_AFTER_MINUTES=2 +LABEL Description="This image runs the rhythm-server which collects utterance info made by participants in meetings" EXPOSE 3000 diff --git a/docker/rhythm-server/env_config b/docker/rhythm-server/env_config deleted file mode 100644 index fd54e32..0000000 --- a/docker/rhythm-server/env_config +++ /dev/null @@ -1,19 +0,0 @@ -AUTH_ID_FIELD="id" -AUTH_ON="true" -AUTH_TOKEN_EXPIRESIN="1000d" -AUTH_TOKEN_SECRET="my-secret" -CRYPTO_KEY="'your-key-here'" -DEFAULT_USER_EMAIL="default-user-email" -DEFAULT_USER_PASSWORD="default-user-password" -MONGODB_URI="mongodb://rhythm-mongo-server/rhythm-test" -MONGO_CERT="some-fake-cert" -NODE_ENV="default" -PORT="3000" -REPORT_EMAIL_FROM="'MM Reports' " -REPORT_EMAIL_HOST="smtp server here" -REPORT_EMAIL_LOGIN="email@address.com" -REPORT_EMAIL_PASSWORD="emailpassword" -REPORT_EMAIL_SUBJECT="Your Group Discussion Report" -REPORT_EMAIL_TEXT="See attached for a visual report of your recent group discussion!" -SEND_REPORT="false" -END_MEETING_AFTER_MINUTES=2 From 453542480629884b81f466ed7d233fc67956e0ac Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Thu, 5 Apr 2018 13:50:30 -0400 Subject: [PATCH 07/35] add some bash aliases (e.g. ll) in both rhythm-server & rhythm-rtc docker containers --- docker/rhythm-rtc/Dockerfile | 16 +++------------- docker/rhythm-rtc/bashrc | 20 ++++++++++++++++++++ docker/rhythm-server/Dockerfile | 3 +++ docker/rhythm-server/bashrc | 20 ++++++++++++++++++++ 4 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 docker/rhythm-rtc/bashrc create mode 100644 docker/rhythm-server/bashrc diff --git a/docker/rhythm-rtc/Dockerfile b/docker/rhythm-rtc/Dockerfile index be240c8..c1ba687 100644 --- a/docker/rhythm-rtc/Dockerfile +++ b/docker/rhythm-rtc/Dockerfile @@ -1,18 +1,8 @@ FROM node:8 -LABEL Description="This image is used to for developing the rhythm-rtc" +LABEL Description="This image runs rhythm-rtc which serves the pages to enable video chat w/ the Media Manager" -ENV REACT_APP_SERVER_TOKEN=my-secret -ENV REACT_APP_SERVER_URL=localhost:3000 -ENV REACT_APP_SERVER_EMAIL=default-user-email -ENV REACT_APP_SERVER_PASSWORD=default-user-password -ENV REACT_APP_TRACK_FACE=false -ENV REACT_APP_SIGNALMASTER_URL=sigalmaster.url -ENV PORT=3001 -ENV CONSUMER_KEY=key -ENV CONSUMER_SECRET=secret -ENV SESSION_SECRET=secret -ENV REACT_APP_DEBUG=true -ENV CI=false +# Modified bashrc which defines some aliases +COPY bashrc /root/.bashrc EXPOSE 3001 diff --git a/docker/rhythm-rtc/bashrc b/docker/rhythm-rtc/bashrc new file mode 100644 index 0000000..4aa241d --- /dev/null +++ b/docker/rhythm-rtc/bashrc @@ -0,0 +1,20 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. + +# Note: PS1 and umask are already set in /etc/profile. You should not +# need this unless you want different defaults for root. +# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' +# umask 022 + +# You may uncomment the following lines if you want `ls' to be colorized: +export LS_OPTIONS='--color=auto' +eval "`dircolors --sh`" +alias ls='ls $LS_OPTIONS' +alias ll='ls $LS_OPTIONS -l' +alias lla='ls $LS_OPTIONS -lA' +alias l='ls $LS_OPTIONS -CF' + +# +# Some more alias to avoid making mistakes: +# alias rm='rm -i' +# alias cp='cp -i' +# alias mv='mv -i' diff --git a/docker/rhythm-server/Dockerfile b/docker/rhythm-server/Dockerfile index 9d661f8..7ff7570 100644 --- a/docker/rhythm-server/Dockerfile +++ b/docker/rhythm-server/Dockerfile @@ -1,6 +1,9 @@ FROM node:8 LABEL Description="This image runs the rhythm-server which collects utterance info made by participants in meetings" +# Modified bashrc which defines some aliases +COPY bashrc /root/.bashrc + EXPOSE 3000 # rhythm-server repository working directory must be bound at /app and all dependent packages installed diff --git a/docker/rhythm-server/bashrc b/docker/rhythm-server/bashrc new file mode 100644 index 0000000..4aa241d --- /dev/null +++ b/docker/rhythm-server/bashrc @@ -0,0 +1,20 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. + +# Note: PS1 and umask are already set in /etc/profile. You should not +# need this unless you want different defaults for root. +# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' +# umask 022 + +# You may uncomment the following lines if you want `ls' to be colorized: +export LS_OPTIONS='--color=auto' +eval "`dircolors --sh`" +alias ls='ls $LS_OPTIONS' +alias ll='ls $LS_OPTIONS -l' +alias lla='ls $LS_OPTIONS -lA' +alias l='ls $LS_OPTIONS -CF' + +# +# Some more alias to avoid making mistakes: +# alias rm='rm -i' +# alias cp='cp -i' +# alias mv='mv -i' From c22cdc6ac2c75e2f52ec5c98ee1609c288140b50 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Thu, 26 Apr 2018 12:59:39 -0400 Subject: [PATCH 08/35] use node user in rhythm server & rtc containers, set the interactive prompt - rather than using root in those containers, use the "node" user - set colored interactive prompt that should help recognizing when running a shell in the container add a Makefile for ease of executing some commands, not to replace the npm scripts, (they should be kept in sync when duplicated) but to supplement it, such as for starting up the interactive docker container development environment. --- Makefile | 64 +++++++++++++++++++++++++++++++++ docker/rhythm-rtc/Dockerfile | 6 +++- docker/rhythm-rtc/bashrc | 17 +++++---- docker/rhythm-server/Dockerfile | 6 +++- docker/rhythm-server/bashrc | 17 +++++---- 5 files changed, 94 insertions(+), 16 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..18290ab --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +# +# Makefile to build and test the rhythm-server +# duplicates (and should be kept in sync with) some of the scripts in package.json +# + +GIT_TAG_VERSION = $(shell git describe) + +COMPILER = ./node_modules/.bin/tsc +LINT = ./node_modules/.bin/eslint +MOCHA = ./node_modules/.bin/mocha + +LINT_LOG = logs/lint.log +TEST_LOG = logs/test.log + + +.DELETE_ON_ERROR : +.PHONY : help all build doc lint test load-test wtftest clean clean-build start-dev + +help : + @echo "" ; \ + echo "Useful targets in this rhythm-server Makefile:" ; \ + echo "- all : run lint, build, test" ; \ + echo "- build :" ; \ + echo "- lint : run lint over the sources" ; \ + echo "- test : run the mocha (unit) tests" ; \ + echo "- wtftest : run the mocha (unit) tests w/ wtfnode to help debug the test run hanging at the end" ; \ + echo "- start-dev : start a dev container for the rhythm-server" ; \ + echo "" + +all : lint build test + +build : + @echo build would run the compiler: $(COMPILER) + +doc : + @echo doc would run the compiler: $(COMPILER) + +lint : + @echo lint should run the linter which would include checking the coding style: $(LINT) + @echo but for now is just running the style check \"standard\" + find src/ test/ -name *.js | xargs ./node_modules/.bin/standard + +test : + $(MOCHA) --reporter spec -r dotenv/config --recursive --sort --invert --grep 'Load tests' test | tee $(TEST_LOG) + +load-test : + $(MOCHA) --reporter spec -r dotenv/config test/load.test.js + +wtftest : ./node_modules/.bin/wtfnode +# This is helpful for determining why the tests seem to be hanging after they've "finished" +# it requires the wtfnode package to be installed. + ./node_modules/.bin/wtfnode ./node_modules/.bin/_mocha --reporter spec -r dotenv/config --recursive --sort --invert --grep 'Load tests' test + +clean : clean-build + +clean-build : + -rm -f dist/* + +start-dev : + docker-compose run rhythm-server bash + docker-compose rm --force + +./node_modules/.bin/wtfnode : + npm install wtfnode --no-save diff --git a/docker/rhythm-rtc/Dockerfile b/docker/rhythm-rtc/Dockerfile index c1ba687..1687f2b 100644 --- a/docker/rhythm-rtc/Dockerfile +++ b/docker/rhythm-rtc/Dockerfile @@ -1,9 +1,13 @@ FROM node:8 LABEL Description="This image runs rhythm-rtc which serves the pages to enable video chat w/ the Media Manager" -# Modified bashrc which defines some aliases +# Modified bashrc which defines some aliases and an interactive prompt (for both root & node users) COPY bashrc /root/.bashrc +# node images have a node user w/ UID 1000 (works well for me for now, but more thought may be needed later) -mjl +USER node +COPY bashrc /home/node/.bashrc + EXPOSE 3001 # rhythm-rtc repository working directory must be bound at /app and all dependent packages installed diff --git a/docker/rhythm-rtc/bashrc b/docker/rhythm-rtc/bashrc index 4aa241d..35d8746 100644 --- a/docker/rhythm-rtc/bashrc +++ b/docker/rhythm-rtc/bashrc @@ -5,16 +5,19 @@ # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' # umask 022 -# You may uncomment the following lines if you want `ls' to be colorized: +# If not running interactively, don't do anything +[ -z "$PS1" ] && return + +servicename=rhythm-rtc +PS1='\[\033[00;33m\]('${servicename}') \[\033[01;33m\]\u\[\033[00;37m\] \w \[\033[01;36m\]\$\[\033[00m\] ' +unset servicename + +# colorize `ls' export LS_OPTIONS='--color=auto' eval "`dircolors --sh`" + +# common ls aliases alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias lla='ls $LS_OPTIONS -lA' alias l='ls $LS_OPTIONS -CF' - -# -# Some more alias to avoid making mistakes: -# alias rm='rm -i' -# alias cp='cp -i' -# alias mv='mv -i' diff --git a/docker/rhythm-server/Dockerfile b/docker/rhythm-server/Dockerfile index 7ff7570..b3b2489 100644 --- a/docker/rhythm-server/Dockerfile +++ b/docker/rhythm-server/Dockerfile @@ -1,9 +1,13 @@ FROM node:8 LABEL Description="This image runs the rhythm-server which collects utterance info made by participants in meetings" -# Modified bashrc which defines some aliases +# Modified bashrc which defines some aliases and an interactive prompt (for both root & node users) COPY bashrc /root/.bashrc +# node images have a node user w/ UID 1000 (works well for me for now, but more thought may be needed later) -mjl +USER node +COPY bashrc /home/node/.bashrc + EXPOSE 3000 # rhythm-server repository working directory must be bound at /app and all dependent packages installed diff --git a/docker/rhythm-server/bashrc b/docker/rhythm-server/bashrc index 4aa241d..67caff4 100644 --- a/docker/rhythm-server/bashrc +++ b/docker/rhythm-server/bashrc @@ -5,16 +5,19 @@ # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' # umask 022 -# You may uncomment the following lines if you want `ls' to be colorized: +# If not running interactively, don't do anything +[ -z "$PS1" ] && return + +servicename=rhythm-svr +PS1='\[\033[00;33m\]('${servicename}') \[\033[01;33m\]\u\[\033[00;37m\] \w \[\033[01;36m\]\$\[\033[00m\] ' +unset servicename + +# colorize `ls' export LS_OPTIONS='--color=auto' eval "`dircolors --sh`" + +# common ls aliases alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias lla='ls $LS_OPTIONS -lA' alias l='ls $LS_OPTIONS -CF' - -# -# Some more alias to avoid making mistakes: -# alias rm='rm -i' -# alias cp='cp -i' -# alias mv='mv -i' From 3af7a3612fa1cb99af3e00737533229637c3668a Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Thu, 5 Apr 2018 13:55:05 -0400 Subject: [PATCH 09/35] changes made by feathers cli upgrade as specified on https://docs.feathersjs.com/migrating.html --- package-lock.json | 1301 +++++++---------- package.json | 15 +- src/app.js | 17 +- src/middleware/index.js | 2 +- src/middleware/not-found-handler.js | 2 +- src/scripts/create-default-user.js | 2 +- src/services/authentication/index.js | 2 +- src/services/face/hooks/index.js | 2 +- src/services/meeting/hooks/index.js | 2 +- src/services/meetingEvent/hooks/index.js | 2 +- src/services/participant/hooks/index.js | 2 +- src/services/participantEvent/hooks/index.js | 2 +- src/services/turn/hooks/index.js | 2 +- src/services/user/hooks/index.js | 3 +- src/services/utterance/hooks/index.js | 2 +- .../utteranceDistribution/hooks/index.js | 2 +- test/load.test.js | 2 +- test/shared/global-before.js | 10 +- 18 files changed, 567 insertions(+), 805 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9e76878..eab8537 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,17 +4,401 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/node": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.0.tgz", - "integrity": "sha512-h3YZbOq2+ZoDFI1z8Zx0Ck/xRWkOESVaLdgLdd/c25mMQ1Y2CAkILu9ny5A15S5f32gGcQdaUIZ2jzYr8D7IFg==" + "@feathersjs/authentication": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication/-/authentication-2.1.3.tgz", + "integrity": "sha512-2qhfdjM6fZkEWSw3M5/gAdqvGUEc6TkjCKRGQ4b5Ket50XMgyAdJGPwb31jVzLTJCcezgyGPPen87qIMbwkL1Q==", + "requires": { + "@feathersjs/commons": "1.4.0", + "@feathersjs/errors": "3.3.0", + "@feathersjs/socket-commons": "3.1.5", + "debug": "3.1.0", + "jsonwebtoken": "8.2.1", + "lodash.clone": "4.5.0", + "lodash.merge": "4.6.1", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "long-timeout": "0.1.1", + "ms": "2.0.0", + "passport": "0.4.0", + "uuid": "3.2.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "jsonwebtoken": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz", + "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==", + "requires": { + "jws": "3.1.4", + "lodash.includes": "4.3.0", + "lodash.isboolean": "3.0.3", + "lodash.isinteger": "4.0.4", + "lodash.isnumber": "3.0.3", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", + "lodash.once": "4.1.1", + "ms": "2.1.1", + "xtend": "4.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "passport": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", + "requires": { + "passport-strategy": "1.0.0", + "pause": "0.0.1" + } + } + } + }, + "@feathersjs/authentication-client": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication-client/-/authentication-client-1.0.2.tgz", + "integrity": "sha512-uZfWWMLqNkXcGi5bCuvQwLjBWvUhHtGjK4yZJh3KIHFAESBlQ4/TlqI/JRz2RuswfGfbyNtj9ARPam71YCGOpw==", + "requires": { + "@feathersjs/errors": "3.3.0", + "debug": "3.1.0", + "jwt-decode": "2.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@feathersjs/client": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@feathersjs/client/-/client-3.4.4.tgz", + "integrity": "sha512-yYXgyaPTHcCxMZxJ24fYfIpQDBOaenI5pqogCM8sndx1A6ezVkT2t4AUotKVUj46MuHOpOvKiEapTICJNhcHGw==", + "requires": { + "@feathersjs/authentication-client": "1.0.2", + "@feathersjs/errors": "3.3.0", + "@feathersjs/feathers": "3.1.4", + "@feathersjs/primus-client": "1.1.0", + "@feathersjs/rest-client": "1.3.4", + "@feathersjs/socketio-client": "1.1.0" + } + }, + "@feathersjs/commons": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-1.4.0.tgz", + "integrity": "sha512-21/E+KpFJO32fK8snn9kVCWi7R3C2CEPUsuxgYg61mKqydXBvo0lDzMfhp//o4pu9rdZrvNSGyb32Gvi3eK3OA==" + }, + "@feathersjs/configuration": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@feathersjs/configuration/-/configuration-1.0.2.tgz", + "integrity": "sha512-y0XXfkQF0nFYFwzx/nh2sTfVRetVNBFZd5WQCRCz+tCA2DA17oN9cnFCmuZi9/KVsdLZjx7WG9RmnSkRON9E2Q==", + "requires": { + "config": "1.30.0", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@feathersjs/errors": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-3.3.0.tgz", + "integrity": "sha512-9oYAhAj4CKIix5KITRDEzvyNJNIaqNde5lGqmrQLw4pTuyWMvx9tgBhtXPA0l8lS1KnMKw4Qf1gHo6aKrM+OyQ==", + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } }, - "@types/socket.io": { - "version": "1.4.32", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-1.4.32.tgz", - "integrity": "sha512-xl2fYn5eZRp1jBpv62DEtJLLGroz0ZTi7jq9ZMIGKVgNgS0SbLP36tG7TrUpZTTi+Y2CWvMgemgErZLPGi+CQA==", + "@feathersjs/express": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-1.2.1.tgz", + "integrity": "sha512-u7t8FgrcRybjjD3qVOIfvlJJfw772/em9TJ8we/zADtATI1g68bmtC/103VtiUpC+H3n2yJGKpV0lcdHlqt9Kg==", "requires": { - "@types/node": "9.6.0" + "@feathersjs/commons": "1.4.0", + "@feathersjs/errors": "3.3.0", + "debug": "3.1.0", + "express": "4.16.3", + "uberproto": "1.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@feathersjs/feathers": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-3.1.4.tgz", + "integrity": "sha512-zFT8a28SoORxxWMHLC2IUSXa3UwKBMlBl1mSLCVALk5GsmnvJpf+P/SU8TMcuzh39Uew7Dj4tZSatu71mnY9cQ==", + "requires": { + "@feathersjs/commons": "1.4.0", + "debug": "3.1.0", + "events": "2.0.0", + "uberproto": "1.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "events": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", + "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==" + } + } + }, + "@feathersjs/primus-client": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@feathersjs/primus-client/-/primus-client-1.1.0.tgz", + "integrity": "sha512-a6zczmbHF7Rmm/KHNMIlD6CNEjdhbFkCHxdBaM+CaKMb9tkW8sNdR4Pc1VA/t8CRUqOSECPE9mk141MwoKwQRA==", + "requires": { + "@feathersjs/transport-commons": "4.0.0" + } + }, + "@feathersjs/rest-client": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@feathersjs/rest-client/-/rest-client-1.3.4.tgz", + "integrity": "sha512-GIe4u6uLk/69A8qOee2Zz9XQBkO1C6jNWFjWYoKiiuOj3Gz294AHv5tMF7DzmnWOQyVosSrZOzgfH98yf2VNuw==", + "requires": { + "@feathersjs/commons": "1.4.0", + "@feathersjs/errors": "3.3.0", + "qs": "6.5.1" + } + }, + "@feathersjs/socket-commons": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@feathersjs/socket-commons/-/socket-commons-3.1.5.tgz", + "integrity": "sha512-cnMqVNGR0fOM00UqRmslmPiUZ2UKToTxesoGwZvhvq4unF032KzS4gz8bZ7qYsin9HmAP/E2gs2v0119CR7LKQ==", + "requires": { + "@feathersjs/errors": "3.3.0", + "debug": "3.1.0", + "lodash": "4.17.5", + "url-pattern": "1.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@feathersjs/socketio": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@feathersjs/socketio/-/socketio-3.2.1.tgz", + "integrity": "sha512-QGIptIgsbyyKzmCE0Hzd5HBAq80CnM/Qaq4e3aqs3gpe+GUUeVubpmZszLhapzwwto8WshxWVWUQLQZ+uRYH9g==", + "requires": { + "@feathersjs/transport-commons": "4.0.0", + "debug": "3.1.0", + "socket.io": "2.1.0" + }, + "dependencies": { + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "engine.io": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "ws": "3.3.3" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "socket.io": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.0.tgz", + "integrity": "sha512-KS+3CNWWNtLbVN5j0/B+1hjxRzey+oTK6ejpAOoxMZis6aXeB8cUtfuvjHl97tuZx+t/qD/VyqFMjuzu2Js6uQ==", + "requires": { + "debug": "3.1.0", + "engine.io": "3.2.0", + "has-binary2": "1.0.2", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.1.0", + "socket.io-parser": "3.2.0" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.0.tgz", + "integrity": "sha512-TvKPpL0cBON5LduQfR8Rxrr+ktj70bLXGvqHCL3er5avBXruB3gpnbaud5ikFYVfANH1gCABAvo0qN8Axpg2ew==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "isarray": "2.0.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + } + } + }, + "@feathersjs/socketio-client": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@feathersjs/socketio-client/-/socketio-client-1.1.0.tgz", + "integrity": "sha512-2ry9vX8qIF1Nax3G3r121Utsnj5NQbGgBG7K0M3RTJc+93Gg46BrnLVMFKue5fz2YTIOpHfHDRu1qqbddTJLXQ==", + "requires": { + "@feathersjs/transport-commons": "4.0.0" + } + }, + "@feathersjs/transport-commons": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@feathersjs/transport-commons/-/transport-commons-4.0.0.tgz", + "integrity": "sha512-O+kuJWpdao0Lw5Pg/65eOuMIlxu+aP9bnK9jNlxfwVdqCxw4eX3Jh8WS0WmQpfZYILk5oyhP/IUdHgSqcjaXgw==", + "requires": { + "@feathersjs/commons": "1.4.0", + "@feathersjs/errors": "3.3.0", + "debug": "3.1.0", + "lodash": "4.17.5", + "radix-router": "3.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } } }, "Faker": { @@ -43,16 +427,6 @@ "negotiator": "0.6.1" } }, - "access-control": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/access-control/-/access-control-1.0.0.tgz", - "integrity": "sha1-rrooLO53MT6FJAFj1p41sp421iY=", - "requires": { - "millisecond": "0.1.2", - "setheader": "0.0.4", - "vary": "1.1.2" - } - }, "acorn": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", @@ -220,10 +594,10 @@ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, - "asyncemit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/asyncemit/-/asyncemit-3.0.1.tgz", - "integrity": "sha1-zD4P4No5tTzBXls6qGFupqcr1Zk=" + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "asynckit": { "version": "0.4.0", @@ -251,32 +625,6 @@ "js-tokens": "3.0.2" } }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.4", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "2.5.4", - "regenerator-runtime": "0.11.1" - } - }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -312,11 +660,6 @@ "tweetnacl": "0.14.5" } }, - "bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" - }, "benchmark": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", @@ -531,52 +874,11 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "color": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/color/-/color-0.8.0.tgz", - "integrity": "sha1-iQwHw/1OZJU3Y4kRz2keVFi2/KU=", - "requires": { - "color-convert": "0.5.3", - "color-string": "0.3.0" - } - }, - "color-convert": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=" - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "requires": { - "color-name": "1.1.3" - } - }, - "colornames": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-0.0.2.tgz", - "integrity": "sha1-2BH9bIT1kClJmorEQ2ICk1uSvjE=" - }, "colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, - "colorspace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.0.1.tgz", - "integrity": "sha1-yZx5btMRKLmHalLh7l7gOkpxl0k=", - "requires": { - "color": "0.8.0", - "text-hex": "0.0.0" - } - }, "combined-stream": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", @@ -596,11 +898,6 @@ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" }, - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" - }, "component-inherit": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", @@ -678,10 +975,14 @@ } } }, - "connected": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/connected/-/connected-0.0.2.tgz", - "integrity": "sha1-e1dVshbOMf+rzMOOn04d/Bw7fG0=" + "config": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/config/-/config-1.30.0.tgz", + "integrity": "sha1-HWCp81NIoTwXV5jThOgaWhbDum4=", + "requires": { + "json5": "0.4.0", + "os-homedir": "1.0.2" + } }, "content-disposition": { "version": "0.5.2", @@ -708,11 +1009,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "core-js": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz", - "integrity": "sha1-8si/GB8qgLkvNgEhQpzmOi8K6uA=" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -879,14 +1175,6 @@ } } }, - "create-server": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/create-server/-/create-server-1.0.1.tgz", - "integrity": "sha1-FkNCg08Yi77Hx7xGZ0Y8wrEwTEQ=", - "requires": { - "connected": "0.0.2" - } - }, "cryptiles": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", @@ -1035,16 +1323,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "diagnostics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.0.tgz", - "integrity": "sha1-4QkJALSVI+hSe+IPCBJ1IF8q42o=", - "requires": { - "colorspace": "1.0.1", - "enabled": "1.0.2", - "kuler": "0.0.0" - } - }, "diff": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", @@ -1088,118 +1366,11 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "emits": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emits/-/emits-3.0.0.tgz", - "integrity": "sha1-MnUrupXhcHshlWI4Srm7ix/WL3A=" - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.4" - } - }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "engine.io": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz", - "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==", - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.5" - }, - "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - } - } - }, - "engine.io-client": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz", - "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==", - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.5", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - } - } - }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } - }, - "env-variable": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.4.tgz", - "integrity": "sha512-+jpGxSWG4vr6gVxUHOc4p+ilPnql7NzZxOZBxNldsKGjCF+97df3CbuX7XMaDa5oAVkKQj4rKp38rYdC4VcpDg==" - }, "es-abstract": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", @@ -1499,16 +1670,6 @@ "es5-ext": "0.10.41" } }, - "eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", @@ -1544,185 +1705,56 @@ "range-parser": "1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extendible": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/extendible/-/extendible-0.1.1.tgz", - "integrity": "sha1-4qN+2HEp+0+VM+io11BiMKU5yQU=" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "feathers": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/feathers/-/feathers-2.2.4.tgz", - "integrity": "sha512-9IYKbxRKoDuerLCkYmFkQuKOwyB2SMM1kSUswDzlE0AmdzDrcfocVYb87/BsQx2j6hFkdCVFYkXq3+YPSDMT3w==", - "requires": { - "babel-runtime": "6.26.0", - "debug": "3.1.0", - "events": "1.1.1", - "express": "4.16.3", - "feathers-commons": "0.8.7", - "rubberduck": "1.1.1", - "uberproto": "1.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "feathers-authentication": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/feathers-authentication/-/feathers-authentication-0.7.13.tgz", - "integrity": "sha512-6OoT12wFE9yL0/Lo1027WQ832oB/h05XUA9+2bQ5l19Am9d4GcecL/oshKHcNRiTTo7vVAYFymuVG+fPy7nKrg==", - "requires": { - "bcryptjs": "2.4.3", - "debug": "2.6.9", - "feathers-errors": "2.9.2", - "feathers-hooks": "1.5.8", - "jsonwebtoken": "5.7.0", - "lodash.isplainobject": "4.0.6", - "passport": "0.3.2", - "passport-local": "1.0.0" - } - }, - "feathers-client": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/feathers-client/-/feathers-client-1.9.0.tgz", - "integrity": "sha1-sQhjFLDPaPzgSc3fq9nQ681LAUY=", - "requires": { - "feathers": "2.0.3", - "feathers-authentication": "0.7.12", - "feathers-commons": "0.8.7", - "feathers-hooks": "1.7.1", - "feathers-primus": "2.0.0", - "feathers-rest": "1.6.0", - "feathers-socketio": "1.4.2" - }, - "dependencies": { - "feathers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/feathers/-/feathers-2.0.3.tgz", - "integrity": "sha1-qfxjpxJvS8E3RW4T79JQR/2zCLk=", - "requires": { - "babel-polyfill": "6.26.0", - "debug": "2.6.9", - "events": "1.1.1", - "express": "4.16.3", - "feathers-commons": "0.8.7", - "rubberduck": "1.1.1", - "uberproto": "1.2.0" - } - }, - "feathers-authentication": { - "version": "0.7.12", - "resolved": "https://registry.npmjs.org/feathers-authentication/-/feathers-authentication-0.7.12.tgz", - "integrity": "sha1-hY6ew7kbhAS+DlXD8ED4SJ8QZqk=", - "requires": { - "bcryptjs": "2.4.3", - "debug": "2.6.9", - "feathers-errors": "2.9.2", - "feathers-hooks": "1.7.1", - "jsonwebtoken": "5.7.0", - "lodash.isplainobject": "4.0.6", - "passport": "0.3.2", - "passport-local": "1.0.0" - } - }, - "feathers-hooks": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/feathers-hooks/-/feathers-hooks-1.7.1.tgz", - "integrity": "sha1-0d8iWmS/PQnxCYikGOcKeQMr9Mk=", - "requires": { - "feathers-commons": "0.8.7", - "feathers-hooks-common": "2.0.3", - "uberproto": "1.2.0" - } - }, - "feathers-rest": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/feathers-rest/-/feathers-rest-1.6.0.tgz", - "integrity": "sha1-L/TrdERYgsT4kBhBtDbP96096XE=", - "requires": { - "debug": "2.6.9", - "feathers-commons": "0.8.7", - "feathers-errors": "2.9.2", - "qs": "6.5.1" - } - }, - "feathers-socketio": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/feathers-socketio/-/feathers-socketio-1.4.2.tgz", - "integrity": "sha1-BVemGAS0VtQNJluG/sbZbwHdk70=", - "requires": { - "debug": "2.6.9", - "feathers-socket-commons": "2.4.0", - "socket.io": "1.7.4", - "uberproto": "1.2.0" - } + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" } } }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, "feathers-commons": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/feathers-commons/-/feathers-commons-0.8.7.tgz", "integrity": "sha1-EcbyW1N3RamD6NYVUtfbiTLVN4I=" }, - "feathers-configuration": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/feathers-configuration/-/feathers-configuration-0.2.3.tgz", - "integrity": "sha1-dFhlWCDfrXWp+zB9Bmg15BLR/VY=", - "requires": { - "debug": "2.6.9" - } - }, "feathers-errors": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/feathers-errors/-/feathers-errors-2.9.2.tgz", @@ -1741,32 +1773,6 @@ } } }, - "feathers-hooks": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/feathers-hooks/-/feathers-hooks-1.5.8.tgz", - "integrity": "sha1-puOdTJD/fCsgaopSjRkwczYcaR0=", - "requires": { - "feathers-commons": "0.7.8", - "feathers-errors": "2.9.2" - }, - "dependencies": { - "feathers-commons": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/feathers-commons/-/feathers-commons-0.7.8.tgz", - "integrity": "sha1-EbEZww3R6pxQXCU3sSUErtqj/n0=" - } - } - }, - "feathers-hooks-common": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/feathers-hooks-common/-/feathers-hooks-common-2.0.3.tgz", - "integrity": "sha1-6fEqvr28Fj8o1MtMhQlOKaokY10=", - "requires": { - "debug": "2.6.9", - "feathers-errors": "2.9.2", - "traverse": "0.6.6" - } - }, "feathers-mongoose": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-3.6.2.tgz", @@ -1779,18 +1785,6 @@ "uberproto": "1.2.0" } }, - "feathers-primus": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/feathers-primus/-/feathers-primus-2.0.0.tgz", - "integrity": "sha1-G2zgGwXnYxYYZ/6WhDTYiQypFW4=", - "requires": { - "debug": "2.6.9", - "feathers-socket-commons": "2.4.0", - "primus": "6.1.0", - "primus-emitter": "3.1.1", - "uberproto": "1.2.0" - } - }, "feathers-query-filters": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/feathers-query-filters/-/feathers-query-filters-2.1.2.tgz", @@ -1799,49 +1793,6 @@ "feathers-commons": "0.8.7" } }, - "feathers-rest": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/feathers-rest/-/feathers-rest-1.8.1.tgz", - "integrity": "sha512-FYVcBQLGocSdpjxEf+E/9Cb0QAX0S+biqRgB5KAGpoAF51cou9LV0WW1IwqwHzAT67KRyS4dT7fVCrE4kisM2w==", - "requires": { - "debug": "3.1.0", - "feathers-commons": "0.8.7", - "feathers-errors": "2.9.2", - "qs": "6.5.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "feathers-socket-commons": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/feathers-socket-commons/-/feathers-socket-commons-2.4.0.tgz", - "integrity": "sha1-Bi79V/mocWZEFFuZOl9ycJlp8eE=", - "requires": { - "debug": "2.6.9", - "feathers-commons": "0.8.7", - "feathers-errors": "2.9.2" - } - }, - "feathers-socketio": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/feathers-socketio/-/feathers-socketio-1.6.0.tgz", - "integrity": "sha1-nM+aZSdMbh/KK9j557hHvgSvma0=", - "requires": { - "@types/socket.io": "1.4.32", - "debug": "2.6.9", - "feathers-socket-commons": "2.4.0", - "socket.io": "1.7.4", - "uberproto": "1.2.0" - } - }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -1920,11 +1871,6 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "forwarded-for": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/forwarded-for/-/forwarded-for-1.0.1.tgz", - "integrity": "sha1-59pIFAJRaP/AoQ0/954UFfRq9Gk=" - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -1942,15 +1888,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "fusing": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fusing/-/fusing-1.0.0.tgz", - "integrity": "sha1-VQwV12r5Jld4qgUezkTUAAoJjUU=", - "requires": { - "emits": "3.0.0", - "predefine": "0.1.2" - } - }, "generate-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", @@ -2089,6 +2026,21 @@ "isarray": "0.0.1" } }, + "has-binary2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, "has-cors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", @@ -2585,6 +2537,11 @@ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -2597,23 +2554,6 @@ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", "dev": true }, - "jsonwebtoken": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-5.7.0.tgz", - "integrity": "sha1-HJD5qGzlt0j1+XnBK3BAK0r83bQ=", - "requires": { - "jws": "3.1.4", - "ms": "0.7.3", - "xtend": "4.0.1" - }, - "dependencies": { - "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" - } - } - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -2652,6 +2592,11 @@ "safe-buffer": "5.1.1" } }, + "jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" + }, "kareem": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.0.1.tgz", @@ -2676,14 +2621,6 @@ "is-buffer": "1.1.6" } }, - "kuler": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-0.0.0.tgz", - "integrity": "sha1-tmu0a5NOVQ9Z2BiEjgq7pPf1VTw=", - "requires": { - "colornames": "0.0.2" - } - }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -2736,25 +2673,74 @@ "lodash": { "version": "4.17.5", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + }, "lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=" }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, "log-driver": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", "dev": true }, + "long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ=" + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -2791,11 +2777,6 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "millisecond": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/millisecond/-/millisecond-0.1.2.tgz", - "integrity": "sha1-bMWtOGJByrjniv+WT4cCjuyS2sU=" - }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", @@ -3376,22 +3357,13 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "parse5": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "requires": { - "better-assert": "1.0.2" - } - }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -3413,23 +3385,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, - "passport": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", - "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=", - "requires": { - "passport-strategy": "1.0.0", - "pause": "0.0.1" - } - }, - "passport-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", - "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", - "requires": { - "passport-strategy": "1.0.0" - } - }, "passport-strategy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", @@ -3506,41 +3461,11 @@ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", "dev": true }, - "predefine": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/predefine/-/predefine-0.1.2.tgz", - "integrity": "sha1-KqkrRJa8H4VU5DpF92v75Q0z038=", - "requires": { - "extendible": "0.1.1" - } - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, - "primus": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/primus/-/primus-6.1.0.tgz", - "integrity": "sha1-s79Mk46weHS4crwrDOnA2oVdbBI=", - "requires": { - "access-control": "1.0.0", - "asyncemit": "3.0.1", - "create-server": "1.0.1", - "diagnostics": "1.1.0", - "eventemitter3": "2.0.3", - "forwarded-for": "1.0.1", - "fusing": "1.0.0", - "setheader": "0.0.4", - "ultron": "1.1.1", - "yeast": "0.1.2" - } - }, - "primus-emitter": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/primus-emitter/-/primus-emitter-3.1.1.tgz", - "integrity": "sha1-qFo2NT/oqWl1vl7f69fuZshNzhs=" - }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -3586,6 +3511,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, + "radix-router": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/radix-router/-/radix-router-3.0.1.tgz", + "integrity": "sha512-jpHXHgP+ZmVzEfmZ7WVRSvc/EqMoAqYuMtBsHd9s47Hs9Iy8FDJhkweMrDH0wmdxanLzVIWhq0UpomLXNpW8tg==" + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -3633,11 +3563,6 @@ "resolve": "1.6.0" } }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, "regexp-clone": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", @@ -3748,11 +3673,6 @@ "glob": "7.1.2" } }, - "rubberduck": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/rubberduck/-/rubberduck-1.1.1.tgz", - "integrity": "sha1-zSzaS4ZxeBNer8mVpxOE9fdD2wI=" - }, "run-async": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", @@ -3820,21 +3740,6 @@ "send": "0.16.2" } }, - "setheader": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/setheader/-/setheader-0.0.4.tgz", - "integrity": "sha1-km7SjPdiFJYgkx566j8blYFuxpQ=", - "requires": { - "debug": "0.7.4" - }, - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" - } - } - }, "setprototypeof": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", @@ -3890,87 +3795,6 @@ "hoek": "4.2.1" } }, - "socket.io": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", - "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.5", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.4", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" - }, - "socket.io-client": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", - "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.5", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - } - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - } - } - }, "socket.io-client": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.4.8.tgz", @@ -4130,32 +3954,6 @@ } } }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, "socks": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", @@ -4499,11 +4297,6 @@ } } }, - "text-hex": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz", - "integrity": "sha1-V4+8haapJjbkLdF7QdAhjM6esrM=" - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4540,11 +4333,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -4636,6 +4424,11 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "url-pattern": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/url-pattern/-/url-pattern-1.0.3.tgz", + "integrity": "sha1-BAkpJHGyTyPFDWWkeTF5PStaz8E=" + }, "user-home": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", @@ -4766,37 +4559,11 @@ "mkdirp": "0.5.1" } }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - }, - "dependencies": { - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - } - } - }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=" - }, "xml-name-validator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=" - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index 5bf4519..66cb770 100644 --- a/package.json +++ b/package.json @@ -24,20 +24,19 @@ "stylecheck": "find src/ test/ -name *.js | xargs ./node_modules/.bin/standard" }, "dependencies": { + "@feathersjs/authentication": "^2.1.3", + "@feathersjs/client": "^3.4.4", + "@feathersjs/configuration": "^1.0.2", + "@feathersjs/errors": "^3.3.0", + "@feathersjs/express": "^1.2.1", + "@feathersjs/feathers": "^3.1.4", + "@feathersjs/socketio": "^3.2.1", "body-parser": "^1.18.2", "compression": "^1.7.2", "cors": "^2.8.4", "d3": "^3.5.17", "dotenv": "^2.0.0", - "feathers": "^2.2.4", - "feathers-authentication": "^0.7.13", - "feathers-client": "^1.9.0", - "feathers-configuration": "^0.2.3", - "feathers-errors": "^2.9.2", - "feathers-hooks": "~1.5.4", "feathers-mongoose": "^3.6.2", - "feathers-rest": "^1.8.1", - "feathers-socketio": "^1.6.0", "jsdom": "^9.8.3", "mongoose": "4.4.11", "nodemailer": "^2.6.4", diff --git a/src/app.js b/src/app.js index 652f1a8..c85487d 100644 --- a/src/app.js +++ b/src/app.js @@ -1,31 +1,30 @@ 'use strict' const path = require('path') -const serveStatic = require('feathers').static +const serveStatic = require('@feathersjs/feathers').static +const express = require('@feathersjs/express'); const compress = require('compression') const cors = require('cors') -const feathers = require('feathers') -const configuration = require('feathers-configuration') -const hooks = require('feathers-hooks') -const rest = require('feathers-rest') +const feathers = require('@feathersjs/feathers') +const configuration = require('@feathersjs/configuration') +const rest = require('@feathersjs/express/rest') const bodyParser = require('body-parser') -const socketio = require('feathers-socketio') +const socketio = require('@feathersjs/socketio') const middleware = require('./middleware') const services = require('./services') const events = require('./events') const jobs = require('./jobs') const scripts = require('./scripts') -const app = module.exports = feathers() +const app = module.exports = express(feathers()) app.configure(configuration(path.join(__dirname, '..'))) app.use(compress()) .options('*', cors()) .use(cors()) - .use('/', serveStatic(app.get('www'))) + .use('/', express(serveStatic(app.get('www')))) .use(bodyParser.json()) .use(bodyParser.urlencoded({ extended: true })) - .configure(hooks()) .configure(rest()) .configure(socketio((io) => { io.set('transports', [ diff --git a/src/middleware/index.js b/src/middleware/index.js index 1183720..72ef066 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -1,6 +1,6 @@ 'use strict' -const handler = require('feathers-errors/handler') +const handler = require('@feathersjs/express/errors') const notFound = require('./not-found-handler') const logger = require('./logger') diff --git a/src/middleware/not-found-handler.js b/src/middleware/not-found-handler.js index b4d798d..2862efe 100644 --- a/src/middleware/not-found-handler.js +++ b/src/middleware/not-found-handler.js @@ -1,6 +1,6 @@ 'use strict' -const errors = require('feathers-errors') +const errors = require('@feathersjs/errors') module.exports = function () { return function (req, res, next) { diff --git a/src/scripts/create-default-user.js b/src/scripts/create-default-user.js index ec0e2a3..c378e33 100644 --- a/src/scripts/create-default-user.js +++ b/src/scripts/create-default-user.js @@ -1,6 +1,6 @@ const path = require('path') const fs = require('fs') -const feathers = require('feathers-client') +const feathers = require('@feathersjs/client') const io = require('socket.io-client') var socket = io.connect('http://localhost:3000', { diff --git a/src/services/authentication/index.js b/src/services/authentication/index.js index a40d982..10c36d5 100644 --- a/src/services/authentication/index.js +++ b/src/services/authentication/index.js @@ -1,7 +1,7 @@ 'use strict' const winston = require('winston') -const authentication = require('feathers-authentication') +const authentication = require('@feathersjs/authentication') module.exports = function () { const app = this diff --git a/src/services/face/hooks/index.js b/src/services/face/hooks/index.js index 531add2..1eb2627 100644 --- a/src/services/face/hooks/index.js +++ b/src/services/face/hooks/index.js @@ -1,6 +1,6 @@ 'use strict' -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks const roomHook = require('../../../hooks/roomHook').hook exports.before = { diff --git a/src/services/meeting/hooks/index.js b/src/services/meeting/hooks/index.js index bb95c85..fb18b99 100644 --- a/src/services/meeting/hooks/index.js +++ b/src/services/meeting/hooks/index.js @@ -8,7 +8,7 @@ const removeParticipantsHook = require('./remove-participants-hook') const addParticipantHook = require('./add-participant-hook') const extractUnstructuredQueryHook = require('./extract_unstructured_query-hook') const applyUnstructuredQueryHook = require('./apply_unstructured_query-hook') -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks function addStartTime (hook) { hook.data.start_time = new Date() diff --git a/src/services/meetingEvent/hooks/index.js b/src/services/meetingEvent/hooks/index.js index a1b357c..45b3cf7 100644 --- a/src/services/meetingEvent/hooks/index.js +++ b/src/services/meetingEvent/hooks/index.js @@ -1,6 +1,6 @@ 'use strict' -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks exports.before = { all: [authHooks.verifyToken()], diff --git a/src/services/participant/hooks/index.js b/src/services/participant/hooks/index.js index a1b357c..45b3cf7 100644 --- a/src/services/participant/hooks/index.js +++ b/src/services/participant/hooks/index.js @@ -1,6 +1,6 @@ 'use strict' -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks exports.before = { all: [authHooks.verifyToken()], diff --git a/src/services/participantEvent/hooks/index.js b/src/services/participantEvent/hooks/index.js index a1b357c..45b3cf7 100644 --- a/src/services/participantEvent/hooks/index.js +++ b/src/services/participantEvent/hooks/index.js @@ -1,6 +1,6 @@ 'use strict' -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks exports.before = { all: [authHooks.verifyToken()], diff --git a/src/services/turn/hooks/index.js b/src/services/turn/hooks/index.js index a1b357c..45b3cf7 100644 --- a/src/services/turn/hooks/index.js +++ b/src/services/turn/hooks/index.js @@ -1,6 +1,6 @@ 'use strict' -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks exports.before = { all: [authHooks.verifyToken()], diff --git a/src/services/user/hooks/index.js b/src/services/user/hooks/index.js index 4f865e2..314ae6f 100644 --- a/src/services/user/hooks/index.js +++ b/src/services/user/hooks/index.js @@ -1,7 +1,6 @@ 'use strict' -const hooks = require('feathers-hooks') -const auth = require('feathers-authentication').hooks +const auth = require('@feathersjs/authentication').hooks exports.before = { all: [], diff --git a/src/services/utterance/hooks/index.js b/src/services/utterance/hooks/index.js index 319c43d..a3fd87d 100644 --- a/src/services/utterance/hooks/index.js +++ b/src/services/utterance/hooks/index.js @@ -4,7 +4,7 @@ const repeatHook = require('./repeatHook').hook const mergeHook = require('./mergeHook').hook const roomHook = require('../../../hooks/roomHook').hook const participantConsentedHook = require('./participant-consented-hook') -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks exports.before = { all: [authHooks.verifyToken()], diff --git a/src/services/utteranceDistribution/hooks/index.js b/src/services/utteranceDistribution/hooks/index.js index a1b357c..45b3cf7 100644 --- a/src/services/utteranceDistribution/hooks/index.js +++ b/src/services/utteranceDistribution/hooks/index.js @@ -1,6 +1,6 @@ 'use strict' -const authHooks = require('feathers-authentication').hooks +const authHooks = require('@feathersjs/authentication').hooks exports.before = { all: [authHooks.verifyToken()], diff --git a/test/load.test.js b/test/load.test.js index 0899813..42e578c 100644 --- a/test/load.test.js +++ b/test/load.test.js @@ -4,7 +4,7 @@ const assert = require('assert') const io = require('socket.io-client') const Faker = require('Faker') -const feathers = require('feathers-client') +const feathers = require('@feathersjs/client') const _ = require('underscore') const testUsers = 50 diff --git a/test/shared/global-before.js b/test/shared/global-before.js index f979baf..ab93146 100644 --- a/test/shared/global-before.js +++ b/test/shared/global-before.js @@ -1,16 +1,14 @@ /* eslint-env mocha */ 'use strict' -const feathersServer = require('feathers') +const feathersServer = require('@feathersjs/feathers') const MongoClient = require('mongodb').MongoClient const winston = require('winston') const Promise = require('promise') const mongoose = require('mongoose') -const feathers = require('feathers-client') +const feathers = require('@feathersjs/client') const io = require('socket.io-client') -// for server -const hooks = require('feathers-hooks') const user = require('../../src/services/user') global.socket = io.connect('http://localhost:' + process.env.PORT, { @@ -43,7 +41,7 @@ function createUser (db) { mongoose.connect(mongoUrl) mongoose.Promise = global.Promise }) - var serverNoAuth = feathersServer().configure(hooks()).configure(user) + var serverNoAuth = feathersServer().configure(user) // serverNoAuth.listen(3000) return serverNoAuth.service('users').create({ email: 'hello', @@ -55,7 +53,7 @@ function createUser (db) { winston.log('info', 'error creating user:', err) reject(err) }) - }) + }); } function authenticate () { From e9efcecc5685b2833e775ea43be71230b0980e74 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Thu, 5 Apr 2018 15:54:56 -0400 Subject: [PATCH 10/35] the feathers cli upgrade added a couple of semicolons _standard_ didn't like --- src/app.js | 2 +- test/shared/global-before.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.js b/src/app.js index c85487d..f62cf80 100644 --- a/src/app.js +++ b/src/app.js @@ -2,7 +2,7 @@ const path = require('path') const serveStatic = require('@feathersjs/feathers').static -const express = require('@feathersjs/express'); +const express = require('@feathersjs/express') const compress = require('compression') const cors = require('cors') const feathers = require('@feathersjs/feathers') diff --git a/test/shared/global-before.js b/test/shared/global-before.js index ab93146..5cbb720 100644 --- a/test/shared/global-before.js +++ b/test/shared/global-before.js @@ -53,7 +53,7 @@ function createUser (db) { winston.log('info', 'error creating user:', err) reject(err) }) - }); + }) } function authenticate () { From 3d5035cc56f2a33489237effcfd63251de5c29e1 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Thu, 5 Apr 2018 15:59:23 -0400 Subject: [PATCH 11/35] use the discard method from feathers-hooks-common to replace the hooks.remove method the feathers-hooks package has been integrated into feathers 3. It seems the remove method it used to provide was in feathers-hooks-common, but deprecated and removed from there, replaced by discard. --- package.json | 1 + src/services/user/hooks/index.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 66cb770..43e708d 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "cors": "^2.8.4", "d3": "^3.5.17", "dotenv": "^2.0.0", + "feathers-hooks-common": "^4.10.0", "feathers-mongoose": "^3.6.2", "jsdom": "^9.8.3", "mongoose": "4.4.11", diff --git a/src/services/user/hooks/index.js b/src/services/user/hooks/index.js index 314ae6f..6547edf 100644 --- a/src/services/user/hooks/index.js +++ b/src/services/user/hooks/index.js @@ -1,5 +1,6 @@ 'use strict' +const { discard } = require('feathers-hooks-common') const auth = require('@feathersjs/authentication').hooks exports.before = { @@ -40,7 +41,7 @@ exports.before = { } exports.after = { - all: [hooks.remove('password')], + all: [discard('password')], // remove password field once authentication is done find: [], get: [], create: [], From 5e66220a162b9f70738d918dae5323a41ba68b93 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sat, 7 Apr 2018 18:40:30 -0400 Subject: [PATCH 12/35] migrate feathers authentication from v2 to v3 https://github.com/feathersjs/authentication/blob/master/docs/migrating.md `verifyToken` was removed, replaced by `auth.hooks.authenticate('jwt')` although the docs seem to say doing that everywhere isn't necessary anymore. But it's not yet clear to me how and why that would be true. --- env_template | 1 - package-lock.json | 187 ++++++++++++++++++ package.json | 3 + src/services/authentication/index.js | 25 ++- src/services/face/hooks/index.js | 4 +- src/services/meeting/hooks/index.js | 4 +- src/services/meetingEvent/hooks/index.js | 4 +- src/services/participant/hooks/index.js | 4 +- src/services/participantEvent/hooks/index.js | 4 +- src/services/turn/hooks/index.js | 4 +- src/services/user/hooks/index.js | 43 ++-- src/services/utterance/hooks/index.js | 4 +- .../utteranceDistribution/hooks/index.js | 4 +- 13 files changed, 245 insertions(+), 46 deletions(-) diff --git a/env_template b/env_template index 2c7198e..f06715c 100644 --- a/env_template +++ b/env_template @@ -1,4 +1,3 @@ -AUTH_ID_FIELD="id" AUTH_ON="true" AUTH_TOKEN_EXPIRESIN="1000d" AUTH_TOKEN_SECRET="my-secret" diff --git a/package-lock.json b/package-lock.json index eab8537..82af411 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@feathers-plus/batch-loader": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@feathers-plus/batch-loader/-/batch-loader-0.3.0.tgz", + "integrity": "sha512-buElwyOZKVI34kD7jHt+czIDv1brjXLBPJ+7is+RC98JK+TyqWIUuBJ4E0ZMjPxwwkAJIN6IATyPgvhSXhkaxw==" + }, "@feathersjs/authentication": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@feathersjs/authentication/-/authentication-2.1.3.tgz", @@ -660,6 +665,11 @@ "tweetnacl": "0.14.5" } }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, "benchmark": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", @@ -1750,6 +1760,66 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "feathers-authentication-hooks": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/feathers-authentication-hooks/-/feathers-authentication-hooks-0.1.7.tgz", + "integrity": "sha512-RI4PHZRqpxfy+BFrE2HZQMEVIWnwYyDblxgr5t7WQXs5iG77Hhev/d4nGLitQo/Ukwe9qlvkYihFZ42ylfctjA==", + "requires": { + "debug": "3.1.0", + "feathers-errors": "2.9.2", + "lodash.get": "4.4.2", + "lodash.isplainobject": "4.0.6", + "lodash.set": "4.3.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "feathers-authentication-jwt": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/feathers-authentication-jwt/-/feathers-authentication-jwt-0.3.2.tgz", + "integrity": "sha512-KR4vy+yQJvbllUhdB5iFTD6jIvM5UzfiZaUm1sXLhKPonczx1vH2Io3RZnZjsWMxfKrmRrKtIKuYAHFhZffn4g==", + "requires": { + "debug": "2.6.9", + "feathers-errors": "2.9.2", + "lodash.merge": "4.6.1", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "passport-jwt": "2.2.1" + } + }, + "feathers-authentication-local": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/feathers-authentication-local/-/feathers-authentication-local-0.4.4.tgz", + "integrity": "sha512-NU+y0ne8HOubzHSEJmyt6YLTpM8imIFavUQmw5cWX10ynPWZBNFeKb7j5nBbh283c/47+qcQ3YwajK49ZyDbyw==", + "requires": { + "bcryptjs": "2.4.3", + "debug": "3.1.0", + "feathers-errors": "2.9.2", + "lodash.get": "4.4.2", + "lodash.merge": "4.6.1", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "passport-local": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "feathers-commons": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/feathers-commons/-/feathers-commons-0.8.7.tgz", @@ -1773,6 +1843,31 @@ } } }, + "feathers-hooks-common": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/feathers-hooks-common/-/feathers-hooks-common-4.10.0.tgz", + "integrity": "sha512-O/6+0zs0udmayLhmmecb2sLXC7eY5/NR1FPX/bKuoS3qCuZVrSa//9JZu8L/NlTTamM7Sps2x7J51/EaYQHlGg==", + "requires": { + "@feathers-plus/batch-loader": "0.3.0", + "@feathersjs/commons": "1.4.0", + "@feathersjs/errors": "3.3.0", + "@feathersjs/feathers": "3.1.4", + "ajv": "5.5.2", + "debug": "3.1.0", + "process": "0.11.10", + "traverse": "0.6.6" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "feathers-mongoose": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-3.6.2.tgz", @@ -2317,6 +2412,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, + "isemail": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2452,6 +2552,24 @@ } } }, + "joi": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "requires": { + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.22.0", + "topo": "1.1.0" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } + } + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -2554,6 +2672,18 @@ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", "dev": true }, + "jsonwebtoken": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", + "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", + "requires": { + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "2.0.0", + "xtend": "4.0.1" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -2680,6 +2810,11 @@ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -2730,6 +2865,11 @@ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + }, "log-driver": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", @@ -2965,6 +3105,11 @@ } } }, + "moment": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.0.tgz", + "integrity": "sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg==" + }, "mongodb": { "version": "2.2.35", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.35.tgz", @@ -3385,6 +3530,23 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, + "passport-jwt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-2.2.1.tgz", + "integrity": "sha1-DgBMlAcTGdZz2dm8/RV0qGgBFSc=", + "requires": { + "jsonwebtoken": "7.4.3", + "passport-strategy": "1.0.0" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.0.0" + } + }, "passport-strategy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", @@ -3466,6 +3628,11 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -4320,6 +4487,21 @@ "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", "dev": true }, + "topo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "requires": { + "hoek": "2.16.3" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } + } + }, "tough-cookie": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", @@ -4333,6 +4515,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", diff --git a/package.json b/package.json index 43e708d..5ed62ad 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,9 @@ "cors": "^2.8.4", "d3": "^3.5.17", "dotenv": "^2.0.0", + "feathers-authentication-hooks": "^0.1.7", + "feathers-authentication-jwt": "^0.3.2", + "feathers-authentication-local": "^0.4.4", "feathers-hooks-common": "^4.10.0", "feathers-mongoose": "^3.6.2", "jsdom": "^9.8.3", diff --git a/src/services/authentication/index.js b/src/services/authentication/index.js index 10c36d5..911f9c4 100644 --- a/src/services/authentication/index.js +++ b/src/services/authentication/index.js @@ -1,22 +1,35 @@ 'use strict' const winston = require('winston') -const authentication = require('@feathersjs/authentication') +const auth = require('@feathersjs/authentication') +const local = require('feathers-authentication-local') +const jwt = require('feathers-authentication-jwt') module.exports = function () { const app = this let config = { - idField: process.env.AUTH_ID_FIELD, - token: { - secret: process.env.AUTH_TOKEN_SECRET - }, + jwt: {}, + secret: process.env.AUTH_TOKEN_SECRET, expiresIn: process.env.AUTH_TOKEN_EXPIRESIN, local: {} } if (process.env.AUTH_ON) { winston.log('info', 'configuring authentication...') - app.configure(authentication(config)) + app.configure(auth(config)) + .configure(jwt()) + .configure(local()) + + // Authenticate the user using the a JWT or + // email/password strategy and if successful + // return a new JWT access token. + app.service('authentication').hooks({ + before: { + create: [ + auth.hooks.authenticate(['jwt', 'local']) + ] + } + }) } } diff --git a/src/services/face/hooks/index.js b/src/services/face/hooks/index.js index 1eb2627..a88b888 100644 --- a/src/services/face/hooks/index.js +++ b/src/services/face/hooks/index.js @@ -1,10 +1,10 @@ 'use strict' -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') const roomHook = require('../../../hooks/roomHook').hook exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], find: [], get: [], create: [roomHook], diff --git a/src/services/meeting/hooks/index.js b/src/services/meeting/hooks/index.js index fb18b99..3fc0eb1 100644 --- a/src/services/meeting/hooks/index.js +++ b/src/services/meeting/hooks/index.js @@ -8,7 +8,7 @@ const removeParticipantsHook = require('./remove-participants-hook') const addParticipantHook = require('./add-participant-hook') const extractUnstructuredQueryHook = require('./extract_unstructured_query-hook') const applyUnstructuredQueryHook = require('./apply_unstructured_query-hook') -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') function addStartTime (hook) { hook.data.start_time = new Date() @@ -21,7 +21,7 @@ function updateTime (hook) { } exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], create: [addStartTime, activateMeetingHook], find: [extractUnstructuredQueryHook], update: [updateTime], diff --git a/src/services/meetingEvent/hooks/index.js b/src/services/meetingEvent/hooks/index.js index 45b3cf7..c37a976 100644 --- a/src/services/meetingEvent/hooks/index.js +++ b/src/services/meetingEvent/hooks/index.js @@ -1,9 +1,9 @@ 'use strict' -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], find: [], get: [], create: [], diff --git a/src/services/participant/hooks/index.js b/src/services/participant/hooks/index.js index 45b3cf7..c37a976 100644 --- a/src/services/participant/hooks/index.js +++ b/src/services/participant/hooks/index.js @@ -1,9 +1,9 @@ 'use strict' -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], find: [], get: [], create: [], diff --git a/src/services/participantEvent/hooks/index.js b/src/services/participantEvent/hooks/index.js index 45b3cf7..c37a976 100644 --- a/src/services/participantEvent/hooks/index.js +++ b/src/services/participantEvent/hooks/index.js @@ -1,9 +1,9 @@ 'use strict' -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], find: [], get: [], create: [], diff --git a/src/services/turn/hooks/index.js b/src/services/turn/hooks/index.js index 45b3cf7..c37a976 100644 --- a/src/services/turn/hooks/index.js +++ b/src/services/turn/hooks/index.js @@ -1,9 +1,9 @@ 'use strict' -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], find: [], get: [], create: [], diff --git a/src/services/user/hooks/index.js b/src/services/user/hooks/index.js index 6547edf..67b2d7c 100644 --- a/src/services/user/hooks/index.js +++ b/src/services/user/hooks/index.js @@ -1,42 +1,39 @@ 'use strict' -const { discard } = require('feathers-hooks-common') -const auth = require('@feathersjs/authentication').hooks +const { discard, populate } = require('feathers-hooks-common') +const auth = require('@feathersjs/authentication') +const local = require('feathers-authentication-local') +const { queryWithCurrentUser, restrictToOwner } = require('feathers-authentication-hooks') exports.before = { all: [], find: [ - auth.verifyToken(), - auth.populateUser(), - auth.restrictToAuthenticated() + auth.hooks.authenticate('jwt'), + populate() ], get: [ - auth.verifyToken(), - auth.populateUser(), - auth.restrictToAuthenticated(), - auth.restrictToOwner({ ownerField: '_id' }) + auth.hooks.authenticate('jwt'), + populate(), + restrictToOwner({ ownerField: '_id' }) ], create: [ - auth.verifyToken(), - auth.hashPassword() + auth.hooks.authenticate('jwt'), + local.hooks.hashPassword() ], update: [ - auth.verifyToken(), - auth.populateUser(), - auth.restrictToAuthenticated(), - auth.restrictToOwner({ ownerField: '_id' }) + auth.hooks.authenticate('jwt'), + populate(), + restrictToOwner({ ownerField: '_id' }) ], patch: [ - auth.verifyToken(), - auth.populateUser(), - auth.restrictToAuthenticated(), - auth.restrictToOwner({ ownerField: '_id' }) + auth.hooks.authenticate('jwt'), + populate(), + restrictToOwner({ ownerField: '_id' }) ], remove: [ - auth.verifyToken(), - auth.populateUser(), - auth.restrictToAuthenticated(), - auth.restrictToOwner({ ownerField: '_id' }) + auth.hooks.authenticate('jwt'), + populate(), + restrictToOwner({ ownerField: '_id' }) ] } diff --git a/src/services/utterance/hooks/index.js b/src/services/utterance/hooks/index.js index a3fd87d..2e05f04 100644 --- a/src/services/utterance/hooks/index.js +++ b/src/services/utterance/hooks/index.js @@ -4,10 +4,10 @@ const repeatHook = require('./repeatHook').hook const mergeHook = require('./mergeHook').hook const roomHook = require('../../../hooks/roomHook').hook const participantConsentedHook = require('./participant-consented-hook') -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], find: [], get: [], create: [participantConsentedHook, roomHook, mergeHook, repeatHook], diff --git a/src/services/utteranceDistribution/hooks/index.js b/src/services/utteranceDistribution/hooks/index.js index 45b3cf7..c37a976 100644 --- a/src/services/utteranceDistribution/hooks/index.js +++ b/src/services/utteranceDistribution/hooks/index.js @@ -1,9 +1,9 @@ 'use strict' -const authHooks = require('@feathersjs/authentication').hooks +const auth = require('@feathersjs/authentication') exports.before = { - all: [authHooks.verifyToken()], + all: [auth.hooks.authenticate('jwt')], find: [], get: [], create: [], From bdcc0a7c55effb478dd7bdcf4e75b9e6982164ad Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 9 Apr 2018 13:23:43 -0400 Subject: [PATCH 13/35] more feathers v2 -> v3 migration - added channels.js as described in the migration guide - use new authentication paradigm - fix attaching service hooks --- package-lock.json | 1269 ++++++++----------- package.json | 14 +- src/app.js | 25 +- src/channels.js | 74 ++ src/scripts/create-default-user.js | 4 +- src/services/authentication/index.js | 4 +- src/services/face/index.js | 9 +- src/services/meeting/index.js | 3 +- src/services/meetingEvent/index.js | 9 +- src/services/participant/index.js | 9 +- src/services/participantEvent/index.js | 9 +- src/services/turn/index.js | 8 +- src/services/user/hooks/index.js | 14 +- src/services/user/index.js | 9 +- src/services/utterance/index.js | 9 +- src/services/utteranceDistribution/index.js | 9 +- test/jobs/turn-job/index.test.js | 2 +- 17 files changed, 638 insertions(+), 842 deletions(-) create mode 100644 src/channels.js diff --git a/package-lock.json b/package-lock.json index 82af411..7e7dc57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,52 +24,9 @@ "lodash.omit": "4.5.0", "lodash.pick": "4.4.0", "long-timeout": "0.1.1", - "ms": "2.0.0", + "ms": "2.1.1", "passport": "0.4.0", "uuid": "3.2.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "jsonwebtoken": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz", - "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==", - "requires": { - "jws": "3.1.4", - "lodash.includes": "4.3.0", - "lodash.isboolean": "3.0.3", - "lodash.isinteger": "4.0.4", - "lodash.isnumber": "3.0.3", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.once": "4.1.1", - "ms": "2.1.1", - "xtend": "4.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "passport": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", - "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", - "requires": { - "passport-strategy": "1.0.0", - "pause": "0.0.1" - } - } } }, "@feathersjs/authentication-client": { @@ -80,16 +37,34 @@ "@feathersjs/errors": "3.3.0", "debug": "3.1.0", "jwt-decode": "2.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } + } + }, + "@feathersjs/authentication-jwt": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication-jwt/-/authentication-jwt-2.0.0.tgz", + "integrity": "sha512-ZNp0Edkehjt8TIyhp7mxRvQRzQ2t6UPJg+niKh8MdnIKkQ6iGEY8+4NbxP3g8JU0QcUBykS+KxsWmPQzws42FA==", + "requires": { + "@feathersjs/errors": "3.3.0", + "debug": "3.1.0", + "lodash.merge": "4.6.1", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "passport-jwt": "3.0.1" + } + }, + "@feathersjs/authentication-local": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication-local/-/authentication-local-1.1.1.tgz", + "integrity": "sha512-gEO5EmZiGiq+QnIKjanFpx8oJQngDZ/UF3Ms5oSfmnP2mUC2gjB/qQCM07bgCVUiivGhn2jexzd/IWEzcDPs9Q==", + "requires": { + "@feathersjs/errors": "3.3.0", + "bcryptjs": "2.4.3", + "debug": "3.1.0", + "lodash.get": "4.4.2", + "lodash.merge": "4.6.1", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "passport-local": "1.0.0" } }, "@feathersjs/client": { @@ -117,16 +92,6 @@ "requires": { "config": "1.30.0", "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } } }, "@feathersjs/errors": { @@ -135,16 +100,6 @@ "integrity": "sha512-9oYAhAj4CKIix5KITRDEzvyNJNIaqNde5lGqmrQLw4pTuyWMvx9tgBhtXPA0l8lS1KnMKw4Qf1gHo6aKrM+OyQ==", "requires": { "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } } }, "@feathersjs/express": { @@ -157,16 +112,6 @@ "debug": "3.1.0", "express": "4.16.3", "uberproto": "1.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } } }, "@feathersjs/feathers": { @@ -178,21 +123,6 @@ "debug": "3.1.0", "events": "2.0.0", "uberproto": "1.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "events": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", - "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==" - } } }, "@feathersjs/primus-client": { @@ -222,16 +152,6 @@ "debug": "3.1.0", "lodash": "4.17.5", "url-pattern": "1.0.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } } }, "@feathersjs/socketio": { @@ -242,138 +162,6 @@ "@feathersjs/transport-commons": "4.0.0", "debug": "3.1.0", "socket.io": "2.1.0" - }, - "dependencies": { - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "engine.io": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", - "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", - "requires": { - "accepts": "1.3.5", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", - "ws": "3.3.3" - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - } - }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "1.0.2" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "socket.io": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.0.tgz", - "integrity": "sha512-KS+3CNWWNtLbVN5j0/B+1hjxRzey+oTK6ejpAOoxMZis6aXeB8cUtfuvjHl97tuZx+t/qD/VyqFMjuzu2Js6uQ==", - "requires": { - "debug": "3.1.0", - "engine.io": "3.2.0", - "has-binary2": "1.0.2", - "socket.io-adapter": "1.1.1", - "socket.io-client": "2.1.0", - "socket.io-parser": "3.2.0" - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" - }, - "socket.io-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.0.tgz", - "integrity": "sha512-TvKPpL0cBON5LduQfR8Rxrr+ktj70bLXGvqHCL3er5avBXruB3gpnbaud5ikFYVfANH1gCABAvo0qN8Axpg2ew==", - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.2.1", - "has-binary2": "1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.2.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "requires": { - "component-emitter": "1.2.1", - "debug": "3.1.0", - "isarray": "2.0.1" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" - } - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" - } } }, "@feathersjs/socketio-client": { @@ -394,24 +182,8 @@ "debug": "3.1.0", "lodash": "4.17.5", "radix-router": "3.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } } }, - "Faker": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/Faker/-/Faker-0.7.2.tgz", - "integrity": "sha1-wkdLx3ux14AYtod9MHvX/fCC+xQ=", - "dev": true - }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -569,9 +341,9 @@ } }, "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, "arrify": { "version": "1.0.1", @@ -595,9 +367,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.5" + } }, "async-limiter": { "version": "1.0.0", @@ -615,9 +390,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "babel-code-frame": { "version": "6.26.0", @@ -670,11 +445,6 @@ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, - "benchmark": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", - "integrity": "sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=" - }, "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", @@ -689,9 +459,9 @@ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" }, "bluebird": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz", - "integrity": "sha1-AkpVFylTCIV/FPkfEQb8O1VfRGs=" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, "body-parser": { "version": "1.18.2", @@ -702,12 +472,27 @@ "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", "type-is": "1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "boom": { @@ -716,6 +501,13 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { "hoek": "4.2.1" + }, + "dependencies": { + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + } } }, "brace-expansion": { @@ -729,9 +521,9 @@ } }, "bson": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/bson/-/bson-0.4.23.tgz", - "integrity": "sha1-5louPHUH/63kEJvHV1p25Q+NqRU=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", + "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==" }, "buffer-equal-constant-time": { "version": "1.0.1", @@ -908,6 +700,11 @@ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, "component-inherit": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", @@ -933,6 +730,21 @@ "on-headers": "1.0.1", "safe-buffer": "5.1.1", "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "concat-map": { @@ -949,40 +761,8 @@ "requires": { "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "typedarray": "0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } } }, "config": { @@ -1117,12 +897,6 @@ "sntp": "1.0.9" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, "http-signature": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", @@ -1147,7 +921,7 @@ "dev": true, "requires": { "aws-sign2": "0.6.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.11.0", "combined-stream": "1.0.6", "extend": "3.0.1", @@ -1200,6 +974,11 @@ "requires": { "hoek": "4.2.1" } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" } } }, @@ -1227,7 +1006,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.41" + "es5-ext": "0.10.42" } }, "d3": { @@ -1244,11 +1023,18 @@ } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "debug-log": { @@ -1349,9 +1135,9 @@ } }, "dotenv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-2.0.0.tgz", - "integrity": "sha1-vXWcNXqqcDZeAclrewvsCKbg2Uk=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" }, "ecc-jsbn": { "version": "0.1.1", @@ -1381,6 +1167,49 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "engine.io": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "ws": "3.3.3" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, "es-abstract": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", @@ -1406,9 +1235,9 @@ } }, "es5-ext": { - "version": "0.10.41", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", - "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", "dev": true, "requires": { "es6-iterator": "2.0.3", @@ -1423,7 +1252,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-symbol": "3.1.1" } }, @@ -1434,7 +1263,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -1442,9 +1271,10 @@ } }, "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", + "dev": true }, "es6-set": { "version": "0.1.5", @@ -1453,7 +1283,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -1466,7 +1296,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41" + "es5-ext": "0.10.42" } }, "es6-weak-map": { @@ -1476,7 +1306,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } @@ -1529,7 +1359,7 @@ "doctrine": "2.1.0", "escope": "3.6.0", "espree": "3.5.4", - "esquery": "1.0.0", + "esquery": "1.0.1", "estraverse": "4.2.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", @@ -1557,6 +1387,23 @@ "table": "3.8.3", "text-table": "0.2.0", "user-home": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "eslint-config-standard": { @@ -1638,9 +1485,9 @@ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { "estraverse": "4.2.0" @@ -1677,9 +1524,14 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41" + "es5-ext": "0.10.42" } }, + "events": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", + "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==" + }, "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", @@ -1723,10 +1575,18 @@ "vary": "1.1.2" }, "dependencies": { - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -1745,6 +1605,12 @@ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, + "faker": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", + "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=", + "dev": true + }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", @@ -1770,77 +1636,14 @@ "lodash.get": "4.4.2", "lodash.isplainobject": "4.0.6", "lodash.set": "4.3.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } } }, - "feathers-authentication-jwt": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/feathers-authentication-jwt/-/feathers-authentication-jwt-0.3.2.tgz", - "integrity": "sha512-KR4vy+yQJvbllUhdB5iFTD6jIvM5UzfiZaUm1sXLhKPonczx1vH2Io3RZnZjsWMxfKrmRrKtIKuYAHFhZffn4g==", - "requires": { - "debug": "2.6.9", - "feathers-errors": "2.9.2", - "lodash.merge": "4.6.1", - "lodash.omit": "4.5.0", - "lodash.pick": "4.4.0", - "passport-jwt": "2.2.1" - } - }, - "feathers-authentication-local": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/feathers-authentication-local/-/feathers-authentication-local-0.4.4.tgz", - "integrity": "sha512-NU+y0ne8HOubzHSEJmyt6YLTpM8imIFavUQmw5cWX10ynPWZBNFeKb7j5nBbh283c/47+qcQ3YwajK49ZyDbyw==", - "requires": { - "bcryptjs": "2.4.3", - "debug": "3.1.0", - "feathers-errors": "2.9.2", - "lodash.get": "4.4.2", - "lodash.merge": "4.6.1", - "lodash.omit": "4.5.0", - "lodash.pick": "4.4.0", - "passport-local": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "feathers-commons": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/feathers-commons/-/feathers-commons-0.8.7.tgz", - "integrity": "sha1-EcbyW1N3RamD6NYVUtfbiTLVN4I=" - }, "feathers-errors": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/feathers-errors/-/feathers-errors-2.9.2.tgz", "integrity": "sha512-qwIX97bNW7+1tWVG073+omUA0rCYKJtTtwuzTrrvfrtdr8J8Dk1Fy4iaV9Fa6/YBD5AZu0lsplPE0iu4u/d4GQ==", "requires": { "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } } }, "feathers-hooks-common": { @@ -1850,44 +1653,25 @@ "requires": { "@feathers-plus/batch-loader": "0.3.0", "@feathersjs/commons": "1.4.0", - "@feathersjs/errors": "3.3.0", - "@feathersjs/feathers": "3.1.4", - "ajv": "5.5.2", - "debug": "3.1.0", - "process": "0.11.10", - "traverse": "0.6.6" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } + "@feathersjs/errors": "3.3.0", + "@feathersjs/feathers": "3.1.4", + "ajv": "5.5.2", + "debug": "3.1.0", + "process": "0.11.10", + "traverse": "0.6.6" } }, "feathers-mongoose": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-3.6.2.tgz", - "integrity": "sha1-o/keQK6Ma8Bie2wJhJuUvpFefy4=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-6.1.0.tgz", + "integrity": "sha512-Z2313JkKBCkgP1mREd5UC0Cq67IEe3fXyAMIPE4fC0kHRCOPVhoBStqkyk5kFHKYhYe+C3cx4pfgrhQy80LgGQ==", "requires": { - "feathers-commons": "0.8.7", - "feathers-errors": "2.9.2", - "feathers-query-filters": "2.1.2", + "@feathersjs/commons": "1.4.0", + "@feathersjs/errors": "3.3.0", "lodash.omit": "4.5.0", "uberproto": "1.2.0" } }, - "feathers-query-filters": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/feathers-query-filters/-/feathers-query-filters-2.1.2.tgz", - "integrity": "sha1-zbGCJNteGcwBQNUoEI4JCNXrBlQ=", - "requires": { - "feathers-commons": "0.8.7" - } - }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -1920,6 +1704,21 @@ "parseurl": "1.3.2", "statuses": "1.4.0", "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "find-root": { @@ -2070,6 +1869,12 @@ "uglify-js": "2.8.29" }, "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", @@ -2113,27 +1918,12 @@ "ansi-regex": "2.1.1" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "requires": { - "isarray": "0.0.1" - } - }, "has-binary2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", "requires": { "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } } }, "has-cors": { @@ -2162,17 +1952,19 @@ "cryptiles": "3.1.2", "hoek": "4.2.1", "sntp": "2.1.0" + }, + "dependencies": { + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + } } }, "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" - }, - "hooks-fixed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-1.1.0.tgz", - "integrity": "sha1-DowVM2cI5mERhf45C0RofdUjDbs=" + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "html-encoding-sniffer": { "version": "1.0.2", @@ -2183,21 +1975,14 @@ } }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.1", + "depd": "1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", + "setprototypeof": "1.1.0", "statuses": "1.4.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - } } }, "http-signature": { @@ -2408,9 +2193,9 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" }, "isemail": { "version": "1.2.0", @@ -2450,6 +2235,12 @@ "wordwrap": "1.0.0" }, "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, "escodegen": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", @@ -2561,13 +2352,6 @@ "isemail": "1.2.0", "moment": "2.22.0", "topo": "1.1.0" - }, - "dependencies": { - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - } } }, "js-tokens": { @@ -2650,11 +2434,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" - }, "json5": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", @@ -2673,14 +2452,19 @@ "dev": true }, "jsonwebtoken": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", - "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz", + "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==", "requires": { - "joi": "6.10.1", "jws": "3.1.4", + "lodash.includes": "4.3.0", + "lodash.isboolean": "3.0.3", + "lodash.isinteger": "4.0.4", + "lodash.isnumber": "3.0.3", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", "lodash.once": "4.1.1", - "ms": "2.0.0", + "ms": "2.1.1", "xtend": "4.0.1" } }, @@ -2728,9 +2512,9 @@ "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" }, "kareem": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.0.1.tgz", - "integrity": "sha1-eAXSFbtTIU7Dr5aaHQsfF+PnuVw=" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.6.tgz", + "integrity": "sha512-/C+l8gABdHsAIfNpykJNWmYodpTnDRyn+JhORkP2VgEf1GgdAc+oTHjVADwISwCJKta031EOIwY6+Hki5z8SpQ==" }, "kerberos": { "version": "0.0.11", @@ -3074,13 +2858,13 @@ "requires": { "bson": "0.2.22", "kerberos": "0.0.11", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { @@ -3089,19 +2873,9 @@ "isarray": "1.0.0", "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", + "string_decoder": "1.1.1", "util-deprecate": "1.0.2" } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.1" - } } } }, @@ -3121,18 +2895,6 @@ "readable-stream": "2.2.7" }, "dependencies": { - "bson": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", - "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==", - "dev": true - }, - "es6-promise": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3182,83 +2944,80 @@ } }, "mongodb-core": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-1.3.13.tgz", - "integrity": "sha1-Co6HGUYe2Y827Zga4A+mXYuXeB0=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.4.tgz", + "integrity": "sha512-OTH267FjfwBdEufSnrgd+u8HuLWRuQ6p8DR0XirPl2BdlLEMh4XwjJf1RTlruILp5p2m1w8dDC8rCxibC3W8qQ==", "requires": { - "bson": "0.4.23", + "bson": "1.0.6", "require_optional": "1.0.1" } }, "mongoose": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.4.11.tgz", - "integrity": "sha1-6mfhz4GdGA+W29TiBWdVltVbnWg=", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.13.tgz", + "integrity": "sha512-VCiutgdxwhTuNHIuUgMRWVYvv0GFw6FUi4j14B7um/Wcy1uhuwF552a6XVKUCth/AY8C+PjVU9fVGJ5K0JmrmQ==", "requires": { - "async": "1.5.2", - "bson": "0.4.23", - "hooks-fixed": "1.1.0", - "kareem": "1.0.1", - "mongodb": "2.1.14", - "mpath": "0.2.1", - "mpromise": "0.5.5", - "mquery": "1.10.0", - "ms": "0.7.1", - "muri": "1.1.0", + "async": "2.1.4", + "bson": "1.0.6", + "kareem": "2.0.6", + "lodash.get": "4.4.2", + "mongodb": "3.0.4", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.3.0", + "mquery": "3.0.0", + "ms": "2.0.0", "regexp-clone": "0.0.1", "sliced": "1.0.1" }, "dependencies": { "mongodb": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.1.14.tgz", - "integrity": "sha1-146dcOCWbtVquoer0VofGrlHjIU=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.4.tgz", + "integrity": "sha512-90YIIs7A4ko4kCGafxxXj3foexCAlJBC0YLwwIKgSLoE7Vni2IqUMz6HSsZ3zbXOfR1KWtxfnc0RyAMAY/ViLg==", "requires": { - "es6-promise": "3.0.2", - "mongodb-core": "1.3.13", - "readable-stream": "1.0.31" + "mongodb-core": "3.0.4" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "mpath": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.2.1.tgz", - "integrity": "sha1-Ok6Ck1mAHeljCcJ6ay4QLon56W4=" + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" }, - "mpromise": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz", - "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" + "mpath": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz", + "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=" }, "mquery": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-1.10.0.tgz", - "integrity": "sha1-hgPwKwtSTResBTmoWZYSTuF7fLM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz", + "integrity": "sha512-WL1Lk8v4l8VFSSwN3yCzY9TXw+fKVYKn6f+w86TRzOLSE8k1yTgGaLBPUByJQi8VcLbOdnUneFV/y3Kv874pnQ==", "requires": { - "bluebird": "2.10.2", - "debug": "2.2.0", + "bluebird": "3.5.0", + "debug": "2.6.9", "regexp-clone": "0.0.1", "sliced": "0.0.5" }, "dependencies": { "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "sliced": { "version": "0.0.5", @@ -3268,9 +3027,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "multiline": { "version": "1.0.2", @@ -3281,11 +3040,6 @@ "strip-indent": "1.0.1" } }, - "muri": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/muri/-/muri-1.1.0.tgz", - "integrity": "sha1-o6bXTmiogPQzokmnSWnLtmXMCt0=" - }, "mute-stream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", @@ -3494,11 +3248,6 @@ "wordwrap": "1.0.0" } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -3530,13 +3279,36 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, + "passport": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", + "requires": { + "passport-strategy": "1.0.0", + "pause": "0.0.1" + } + }, "passport-jwt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-2.2.1.tgz", - "integrity": "sha1-DgBMlAcTGdZz2dm8/RV0qGgBFSc=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-3.0.1.tgz", + "integrity": "sha1-5Pcnba2L0lHUPG/DiIMTC5YycvY=", "requires": { "jsonwebtoken": "7.4.3", "passport-strategy": "1.0.0" + }, + "dependencies": { + "jsonwebtoken": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", + "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", + "requires": { + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "2.1.1", + "xtend": "4.0.1" + } + } } }, "passport-local": { @@ -3697,17 +3469,52 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } } }, "readable-stream": { - "version": "1.0.31", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz", - "integrity": "sha1-jyUC4LyeOw2huUUgqrtOJgPsr64=", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } } }, "readline2": { @@ -3727,7 +3534,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.6.0" + "resolve": "1.7.0" } }, "regexp-clone": { @@ -3747,7 +3554,7 @@ "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.12.0", "combined-stream": "1.0.6", "extend": "3.0.1", @@ -3798,9 +3605,9 @@ } }, "resolve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", - "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz", + "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==", "dev": true, "requires": { "path-parse": "1.0.5" @@ -3888,12 +3695,27 @@ "escape-html": "1.0.3", "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", "on-finished": "2.3.0", "range-parser": "1.2.0", "statuses": "1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "serve-static": { @@ -3908,9 +3730,9 @@ } }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "shelljs": { "version": "0.7.8", @@ -3960,165 +3782,62 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { "hoek": "4.2.1" + }, + "dependencies": { + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + } + } + }, + "socket.io": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.0.tgz", + "integrity": "sha512-KS+3CNWWNtLbVN5j0/B+1hjxRzey+oTK6ejpAOoxMZis6aXeB8cUtfuvjHl97tuZx+t/qD/VyqFMjuzu2Js6uQ==", + "requires": { + "debug": "3.1.0", + "engine.io": "3.2.0", + "has-binary2": "1.0.2", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.1.0", + "socket.io-parser": "3.2.0" } }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, "socket.io-client": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.4.8.tgz", - "integrity": "sha1-SBskHnPfFA6hpPsDSGqFrQl/VVg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.0.tgz", + "integrity": "sha512-TvKPpL0cBON5LduQfR8Rxrr+ktj70bLXGvqHCL3er5avBXruB3gpnbaud5ikFYVfANH1gCABAvo0qN8Axpg2ew==", "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", - "component-emitter": "1.2.0", - "debug": "2.2.0", - "engine.io-client": "1.6.11", - "has-binary": "0.1.7", + "component-emitter": "1.2.1", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.2", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", - "parseuri": "0.0.4", - "socket.io-parser": "2.2.6", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.2.0", "to-array": "0.1.4" - }, - "dependencies": { - "after": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", - "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=" - }, - "base64-arraybuffer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", - "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=" - }, - "component-emitter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.0.tgz", - "integrity": "sha1-zNETqGOI0GSC0D3j/H35hSa6jv4=" - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "engine.io-client": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.6.11.tgz", - "integrity": "sha1-fSUNj6HCGBGezeUTkEWKV9UXE3Y=", - "requires": { - "component-emitter": "1.1.2", - "component-inherit": "0.0.3", - "debug": "2.2.0", - "engine.io-parser": "1.2.4", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.1", - "parseqs": "0.0.2", - "parseuri": "0.0.4", - "ws": "1.0.1", - "xmlhttprequest-ssl": "1.5.1", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" - } - } - }, - "engine.io-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.4.tgz", - "integrity": "sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=", - "requires": { - "after": "0.8.1", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.2", - "blob": "0.0.4", - "has-binary": "0.1.6", - "utf8": "2.1.0" - }, - "dependencies": { - "has-binary": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", - "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "parsejson": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", - "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", - "requires": { - "better-assert": "1.0.2" - } - }, - "parseqs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", - "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", - "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", - "requires": { - "better-assert": "1.0.2" - } - }, - "socket.io-parser": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.6.tgz", - "integrity": "sha1-ON/WHfUNz4qx2eIJEyK/kCuii5k=", - "requires": { - "benchmark": "1.0.0", - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" - } - } - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz", - "integrity": "sha1-fQsqLljN3YGQOcKcneZQReGzEOk=", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "xmlhttprequest-ssl": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz", - "integrity": "sha1-O3dB/qSoZnWXbpCNKW1ERZYfqmc=" - } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "isarray": "2.0.1" } }, "socks": { @@ -4183,6 +3902,15 @@ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -4293,6 +4021,12 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "shelljs": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", @@ -4340,9 +4074,13 @@ } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "stringstream": { "version": "0.0.5", @@ -4493,13 +4231,6 @@ "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", "requires": { "hoek": "2.16.3" - }, - "dependencies": { - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - } } }, "tough-cookie": { @@ -4625,11 +4356,6 @@ "os-homedir": "1.0.2" } }, - "utf8": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.0.tgz", - "integrity": "sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4746,11 +4472,26 @@ "mkdirp": "0.5.1" } }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, "xml-name-validator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index 5ed62ad..d39d625 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ }, "dependencies": { "@feathersjs/authentication": "^2.1.3", + "@feathersjs/authentication-jwt": "^2.0.0", + "@feathersjs/authentication-local": "^1.1.1", "@feathersjs/client": "^3.4.4", "@feathersjs/configuration": "^1.0.2", "@feathersjs/errors": "^3.3.0", @@ -35,22 +37,19 @@ "compression": "^1.7.2", "cors": "^2.8.4", "d3": "^3.5.17", - "dotenv": "^2.0.0", + "dotenv": "^5.0.1", "feathers-authentication-hooks": "^0.1.7", - "feathers-authentication-jwt": "^0.3.2", - "feathers-authentication-local": "^0.4.4", "feathers-hooks-common": "^4.10.0", - "feathers-mongoose": "^3.6.2", + "feathers-mongoose": "^6.1.0", "jsdom": "^9.8.3", - "mongoose": "4.4.11", + "mongoose": "^5.0.13", "nodemailer": "^2.6.4", "promise": "^7.3.1", - "socket.io-client": "~1.4.6", + "socket.io-client": "^2.1.0", "underscore": "^1.8.3", "winston": "^2.4.1" }, "devDependencies": { - "Faker": "^0.7.2", "coveralls": "^2.13.3", "eslint": "^3.8.1", "eslint-config-standard": "^6.2.0", @@ -58,6 +57,7 @@ "eslint-plugin-promise": "^3.3.0", "eslint-plugin-react": "^6.4.1", "eslint-plugin-standard": "^2.0.1", + "faker": "^4.1.0", "istanbul": "^0.4.5", "istanbul-coveralls": "^1.0.3", "mocha": "^2.5.3", diff --git a/src/app.js b/src/app.js index f62cf80..273de96 100644 --- a/src/app.js +++ b/src/app.js @@ -1,13 +1,11 @@ 'use strict' const path = require('path') -const serveStatic = require('@feathersjs/feathers').static +const feathers = require('@feathersjs/feathers') const express = require('@feathersjs/express') const compress = require('compression') const cors = require('cors') -const feathers = require('@feathersjs/feathers') const configuration = require('@feathersjs/configuration') -const rest = require('@feathersjs/express/rest') const bodyParser = require('body-parser') const socketio = require('@feathersjs/socketio') const middleware = require('./middleware') @@ -15,17 +13,23 @@ const services = require('./services') const events = require('./events') const jobs = require('./jobs') const scripts = require('./scripts') +const channels = require('./channels') + +// Create an Express compatible Feathers application const app = module.exports = express(feathers()) app.configure(configuration(path.join(__dirname, '..'))) +// Add body parsing middleware +app.use(bodyParser.json()) +app.use(bodyParser.urlencoded({ extended: true })) + +// Initialize REST provider +app.configure(express.rest()) + app.use(compress()) .options('*', cors()) .use(cors()) - .use('/', express(serveStatic(app.get('www')))) - .use(bodyParser.json()) - .use(bodyParser.urlencoded({ extended: true })) - .configure(rest()) .configure(socketio((io) => { io.set('transports', [ 'websocket', @@ -40,7 +44,12 @@ app.use(compress()) events.configure(socket, app) }) })) - .configure(services) + +// Statically host some files +app.use('/', express.static(app.get('www'))) + +app.configure(services) + .configure(channels) .configure(middleware) .configure(scripts) diff --git a/src/channels.js b/src/channels.js new file mode 100644 index 0000000..61d922f --- /dev/null +++ b/src/channels.js @@ -0,0 +1,74 @@ +/********************************************** + * + * This file was taken from the feathers v2 to v3 migration guide + * (https://docs.feathersjs.com/migrating.html) + * for an initial quick pass at migrating the use of event filters + * `.filter()` + * + * However (from that guide): + * Very important: This channels.js file will publish all + * real-time events to all authenticated users. This is already safer + * than the previous default but you should carefully review the + * channels documentation and implement appropriate channels so + * that only the right users are going to receive real-time events. + * + **********************************************/ + +module.exports = function(app) { + if(typeof app.channel !== 'function') { + // If no real-time functionality has been configured just return + return; + } + + app.on('connection', connection => { + // On a new real-time connection, add it to the anonymous channel + app.channel('anonymous').join(connection); + }); + + app.on('login', (authResult, { connection }) => { + // connection can be undefined if there is no + // real-time connection, e.g. when logging in via REST + if(connection) { + // Obtain the logged in user from the connection + // const user = connection.user; + + // The connection is no longer anonymous, remove it + app.channel('anonymous').leave(connection); + + // Add it to the authenticated user channel + app.channel('authenticated').join(connection); + + // Channels can be named anything and joined on any condition + + // E.g. to send real-time events only to admins use + // if(user.isAdmin) { app.channel('admins').join(connection); } + + // If the user has joined e.g. chat rooms + // if(Array.isArray(user.rooms)) user.rooms.forEach(room => app.channel(`rooms/${room.id}`).join(channel)); + + // Easily organize users by email and userid for things like messaging + // app.channel(`emails/${user.email}`).join(channel); + // app.channel(`userIds/$(user.id}`).join(channel); + } + }); + + app.publish((data, hook) => { // eslint-disable-line no-unused-vars + // Here you can add event publishers to channels set up in `channels.js` + // To publish only for a specific event use `app.publish(eventname, () => {})` + + // e.g. to publish all service events to all authenticated users use + return app.channel('authenticated'); + }); + + // Here you can also add service specific event publishers + // e..g the publish the `users` service `created` event to the `admins` channel + // app.service('users').publish('created', () => app.channel('admins')); + + // With the userid and email organization from above you can easily select involved users + // app.service('messages').publish(() => { + // return [ + // app.channel(`userIds/${data.createdBy}`), + // app.channel(`emails/${data.recipientEmail}`) + // ]; + // }); +}; diff --git a/src/scripts/create-default-user.js b/src/scripts/create-default-user.js index c378e33..d8b8cfc 100644 --- a/src/scripts/create-default-user.js +++ b/src/scripts/create-default-user.js @@ -40,13 +40,13 @@ module.exports = function () { } }).then(function (userOrTrue) { return client.authenticate({ - type: 'token', + strategy: 'jwt', email: DEFAULT_USER_EMAIL, password: DEFAULT_USER_PASSWORD }) }).then(function (authResult) { if (authResult !== undefined) { - fs.writeFile(path.join(__dirname, 'DEFAULT_USER_TOKEN.txt'), authResult.token, function (err) { + fs.writeFile(path.join(__dirname, 'DEFAULT_USER_TOKEN.txt'), authResult.accessToken, function (err) { if (err) { return console.log(err) } diff --git a/src/services/authentication/index.js b/src/services/authentication/index.js index 911f9c4..a0a6eae 100644 --- a/src/services/authentication/index.js +++ b/src/services/authentication/index.js @@ -2,8 +2,8 @@ const winston = require('winston') const auth = require('@feathersjs/authentication') -const local = require('feathers-authentication-local') -const jwt = require('feathers-authentication-jwt') +const local = require('@feathersjs/authentication-local') +const jwt = require('@feathersjs/authentication-jwt') module.exports = function () { const app = this diff --git a/src/services/face/index.js b/src/services/face/index.js index c7a1426..9ad9e74 100644 --- a/src/services/face/index.js +++ b/src/services/face/index.js @@ -15,14 +15,11 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/faces', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const faceService = app.service('/faces') - // Set up our before hooks - faceService.before(hooks.before) - - // Set up our after hooks - faceService.after(hooks.after) + // Set up our hooks + faceService.hooks(hooks) faceService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/meeting/index.js b/src/services/meeting/index.js index 9ec5a14..52de107 100644 --- a/src/services/meeting/index.js +++ b/src/services/meeting/index.js @@ -16,8 +16,7 @@ module.exports = function () { app.use('/meetings', service(options)) const meetingService = app.service('/meetings') - meetingService.before(hooks.before) - meetingService.after(hooks.after) + meetingService.hooks(hooks) meetingService.filter(authenticationFilter) } diff --git a/src/services/meetingEvent/index.js b/src/services/meetingEvent/index.js index d07e37d..87bc58f 100644 --- a/src/services/meetingEvent/index.js +++ b/src/services/meetingEvent/index.js @@ -18,12 +18,9 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/meetingEvents', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const meetingEventService = app.service('/meetingEvents') - // Set up our before hooks - meetingEventService.before(hooks.before) - - // Set up our after hooks - meetingEventService.after(hooks.after) + // Set up our hooks + meetingEventService.hooks(hooks) } diff --git a/src/services/participant/index.js b/src/services/participant/index.js index b8215a8..6ae6853 100644 --- a/src/services/participant/index.js +++ b/src/services/participant/index.js @@ -19,14 +19,11 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/participants', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const participantService = app.service('/participants') - // Set up our before hooks - participantService.before(hooks.before) - - // Set up our after hooks - participantService.after(hooks.after) + // Set up our hooks + participantService.hooks(hooks) participantService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/participantEvent/index.js b/src/services/participantEvent/index.js index 6b8c266..341c28b 100644 --- a/src/services/participantEvent/index.js +++ b/src/services/participantEvent/index.js @@ -19,14 +19,11 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/participantEvents', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const participantEventService = app.service('/participantEvents') - // Set up our before hooks - participantEventService.before(hooks.before) - - // Set up our after hooks - participantEventService.after(hooks.after) + // Set up our hooks + participantEventService.hooks(hooks) participantEventService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/turn/index.js b/src/services/turn/index.js index 770219d..339f5f6 100644 --- a/src/services/turn/index.js +++ b/src/services/turn/index.js @@ -15,13 +15,11 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/turns', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const turnService = app.service('/turns') - // Set up our before hooks - turnService.before(hooks.before) + // Set up our hooks + turnService.hooks(hooks) - // Set up our after hooks - turnService.after(hooks.after) turnService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/user/hooks/index.js b/src/services/user/hooks/index.js index 67b2d7c..f72f394 100644 --- a/src/services/user/hooks/index.js +++ b/src/services/user/hooks/index.js @@ -1,19 +1,18 @@ 'use strict' -const { discard, populate } = require('feathers-hooks-common') const auth = require('@feathersjs/authentication') -const local = require('feathers-authentication-local') -const { queryWithCurrentUser, restrictToOwner } = require('feathers-authentication-hooks') +const local = require('@feathersjs/authentication-local') +const { discard } = require('feathers-hooks-common') + +const { restrictToOwner } = require('feathers-authentication-hooks') exports.before = { all: [], find: [ - auth.hooks.authenticate('jwt'), - populate() + auth.hooks.authenticate('jwt') ], get: [ auth.hooks.authenticate('jwt'), - populate(), restrictToOwner({ ownerField: '_id' }) ], create: [ @@ -22,17 +21,14 @@ exports.before = { ], update: [ auth.hooks.authenticate('jwt'), - populate(), restrictToOwner({ ownerField: '_id' }) ], patch: [ auth.hooks.authenticate('jwt'), - populate(), restrictToOwner({ ownerField: '_id' }) ], remove: [ auth.hooks.authenticate('jwt'), - populate(), restrictToOwner({ ownerField: '_id' }) ] } diff --git a/src/services/user/index.js b/src/services/user/index.js index 72cf851..6148751 100644 --- a/src/services/user/index.js +++ b/src/services/user/index.js @@ -18,12 +18,9 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/users', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const userService = app.service('/users') - // Set up our before hooks - userService.before(hooks.before) - - // Set up our after hooks - userService.after(hooks.after) + // Set up our hooks + userService.hooks(hooks) } diff --git a/src/services/utterance/index.js b/src/services/utterance/index.js index c350824..1206a10 100644 --- a/src/services/utterance/index.js +++ b/src/services/utterance/index.js @@ -15,14 +15,11 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/utterances', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const utteranceService = app.service('/utterances') - // Set up our before hooks - utteranceService.before(hooks.before) - - // Set up our after hooks - utteranceService.after(hooks.after) + // Set up our hooks + utteranceService.hooks(hooks) utteranceService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/utteranceDistribution/index.js b/src/services/utteranceDistribution/index.js index fb2f788..636896f 100644 --- a/src/services/utteranceDistribution/index.js +++ b/src/services/utteranceDistribution/index.js @@ -19,14 +19,11 @@ module.exports = function () { // Initialize our service with any options it requires app.use('/utteranceDistributions', service(options)) - // Get our initialize service to that we can bind hooks + // Get our service so that we can bind hooks const utteranceDistributionService = app.service('/utteranceDistributions') - // Set up our before hooks - utteranceDistributionService.before(hooks.before) - - // Set up our after hooks - utteranceDistributionService.after(hooks.after) + // Set up our hooks + utteranceDistributionService.hooks(hooks) utteranceDistributionService.filter(globalFilters.authenticationFilter) } diff --git a/test/jobs/turn-job/index.test.js b/test/jobs/turn-job/index.test.js index b8d27d7..8fb5844 100644 --- a/test/jobs/turn-job/index.test.js +++ b/test/jobs/turn-job/index.test.js @@ -2,7 +2,7 @@ 'use strict' const assert = require('assert') -const Faker = require('Faker') +const Faker = require('faker') const winston = require('winston') const _ = require('underscore') const turnJob = require('../../../src/jobs').turnJob From 95cbc7bccca652cb1b16c51d28b27d1aba54ae63 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 9 Apr 2018 13:40:43 -0400 Subject: [PATCH 14/35] more feathers migration - global authentication filter is replaced by authentication channel --- src/filters/index.js | 17 ----------------- src/services/face/index.js | 3 --- src/services/meeting/index.js | 3 --- src/services/participant/index.js | 3 --- src/services/participantEvent/index.js | 3 --- src/services/turn/index.js | 3 --- src/services/utterance/index.js | 3 --- src/services/utteranceDistribution/index.js | 3 --- 8 files changed, 38 deletions(-) delete mode 100644 src/filters/index.js diff --git a/src/filters/index.js b/src/filters/index.js deleted file mode 100644 index 5f0ec65..0000000 --- a/src/filters/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -// Any filters that are shared across services are here - -const winston = require('winston') - -function authenticationFilter (data, connection) { - if (!connection.user) { - winston.log('info', 'User not authenticated.', connection.user) - return false - } - return data -} - -module.exports = { - authenticationFilter: authenticationFilter -} diff --git a/src/services/face/index.js b/src/services/face/index.js index 9ad9e74..19f774a 100644 --- a/src/services/face/index.js +++ b/src/services/face/index.js @@ -3,7 +3,6 @@ const service = require('feathers-mongoose') const face = require('./face-model') const hooks = require('./hooks') -const globalFilters = require('../../filters') module.exports = function () { const app = this @@ -20,6 +19,4 @@ module.exports = function () { // Set up our hooks faceService.hooks(hooks) - - faceService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/meeting/index.js b/src/services/meeting/index.js index 52de107..661c996 100644 --- a/src/services/meeting/index.js +++ b/src/services/meeting/index.js @@ -3,7 +3,6 @@ const service = require('feathers-mongoose') const meeting = require('./meeting-model') const hooks = require('./hooks') -const authenticationFilter = require('../../filters').authenticationFilter module.exports = function () { const app = this @@ -17,6 +16,4 @@ module.exports = function () { const meetingService = app.service('/meetings') meetingService.hooks(hooks) - - meetingService.filter(authenticationFilter) } diff --git a/src/services/participant/index.js b/src/services/participant/index.js index 6ae6853..6c57ed6 100644 --- a/src/services/participant/index.js +++ b/src/services/participant/index.js @@ -3,7 +3,6 @@ const service = require('feathers-mongoose') const participant = require('./participant-model') const hooks = require('./hooks') -const globalFilters = require('../../filters') module.exports = function () { const app = this @@ -24,6 +23,4 @@ module.exports = function () { // Set up our hooks participantService.hooks(hooks) - - participantService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/participantEvent/index.js b/src/services/participantEvent/index.js index 341c28b..26d40f3 100644 --- a/src/services/participantEvent/index.js +++ b/src/services/participantEvent/index.js @@ -3,7 +3,6 @@ const service = require('feathers-mongoose') const participantEvent = require('./participantEvent-model') const hooks = require('./hooks') -const globalFilters = require('../../filters') module.exports = function () { const app = this @@ -24,6 +23,4 @@ module.exports = function () { // Set up our hooks participantEventService.hooks(hooks) - - participantEventService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/turn/index.js b/src/services/turn/index.js index 339f5f6..2cef3c1 100644 --- a/src/services/turn/index.js +++ b/src/services/turn/index.js @@ -3,7 +3,6 @@ const service = require('feathers-mongoose') const turn = require('./turn-model') const hooks = require('./hooks') -const globalFilters = require('../../filters') module.exports = function () { const app = this @@ -20,6 +19,4 @@ module.exports = function () { // Set up our hooks turnService.hooks(hooks) - - turnService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/utterance/index.js b/src/services/utterance/index.js index 1206a10..a4153d6 100644 --- a/src/services/utterance/index.js +++ b/src/services/utterance/index.js @@ -3,7 +3,6 @@ const service = require('feathers-mongoose') const utterance = require('./utterance-model') const hooks = require('./hooks') -const globalFilters = require('../../filters') module.exports = function () { const app = this @@ -20,6 +19,4 @@ module.exports = function () { // Set up our hooks utteranceService.hooks(hooks) - - utteranceService.filter(globalFilters.authenticationFilter) } diff --git a/src/services/utteranceDistribution/index.js b/src/services/utteranceDistribution/index.js index 636896f..2c66672 100644 --- a/src/services/utteranceDistribution/index.js +++ b/src/services/utteranceDistribution/index.js @@ -3,7 +3,6 @@ const service = require('feathers-mongoose') const utteranceDistribution = require('./utteranceDistribution-model') const hooks = require('./hooks') -const globalFilters = require('../../filters') module.exports = function () { const app = this @@ -24,6 +23,4 @@ module.exports = function () { // Set up our hooks utteranceDistributionService.hooks(hooks) - - utteranceDistributionService.filter(globalFilters.authenticationFilter) } From f76d01c144df926b78658d8f960e44a8eef73df3 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 9 Apr 2018 13:44:24 -0400 Subject: [PATCH 15/35] make channels.js conform to style enforced by `standard` pkg --- src/channels.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/channels.js b/src/channels.js index 61d922f..798c6cb 100644 --- a/src/channels.js +++ b/src/channels.js @@ -1,4 +1,4 @@ -/********************************************** +/* ******************************************** * * This file was taken from the feathers v2 to v3 migration guide * (https://docs.feathersjs.com/migrating.html) @@ -12,31 +12,31 @@ * channels documentation and implement appropriate channels so * that only the right users are going to receive real-time events. * - **********************************************/ + * ********************************************/ -module.exports = function(app) { - if(typeof app.channel !== 'function') { +module.exports = function (app) { + if (typeof app.channel !== 'function') { // If no real-time functionality has been configured just return - return; + return } app.on('connection', connection => { // On a new real-time connection, add it to the anonymous channel - app.channel('anonymous').join(connection); - }); + app.channel('anonymous').join(connection) + }) app.on('login', (authResult, { connection }) => { // connection can be undefined if there is no // real-time connection, e.g. when logging in via REST - if(connection) { + if (connection) { // Obtain the logged in user from the connection // const user = connection.user; // The connection is no longer anonymous, remove it - app.channel('anonymous').leave(connection); + app.channel('anonymous').leave(connection) // Add it to the authenticated user channel - app.channel('authenticated').join(connection); + app.channel('authenticated').join(connection) // Channels can be named anything and joined on any condition @@ -50,15 +50,15 @@ module.exports = function(app) { // app.channel(`emails/${user.email}`).join(channel); // app.channel(`userIds/$(user.id}`).join(channel); } - }); + }) app.publish((data, hook) => { // eslint-disable-line no-unused-vars // Here you can add event publishers to channels set up in `channels.js` // To publish only for a specific event use `app.publish(eventname, () => {})` // e.g. to publish all service events to all authenticated users use - return app.channel('authenticated'); - }); + return app.channel('authenticated') + }) // Here you can also add service specific event publishers // e..g the publish the `users` service `created` event to the `admins` channel @@ -71,4 +71,4 @@ module.exports = function(app) { // app.channel(`emails/${data.recipientEmail}`) // ]; // }); -}; +} From 20c5f997ce05cc4ac448d75ba27fe68801554814 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 23 Apr 2018 17:26:42 -0400 Subject: [PATCH 16/35] more feathers v2 -> v3 migration - npm test is actually running, fails on authentication now, so that's next --- src/scripts/create-default-user.js | 1 - test/jobs/turn-job/index.test.js | 8 ++++---- test/load.test.js | 9 ++++----- test/services/meeting/index.test.js | 6 +++--- test/shared/global-before.js | 1 - 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/scripts/create-default-user.js b/src/scripts/create-default-user.js index d8b8cfc..41fd6c1 100644 --- a/src/scripts/create-default-user.js +++ b/src/scripts/create-default-user.js @@ -19,7 +19,6 @@ module.exports = function () { const client = feathers() .configure(feathers.socketio(socket)) - .configure(feathers.hooks()) .configure(feathers.authentication()) const DEFAULT_USER_EMAIL = process.env.DEFAULT_USER_EMAIL diff --git a/test/jobs/turn-job/index.test.js b/test/jobs/turn-job/index.test.js index 8fb5844..aac3e9b 100644 --- a/test/jobs/turn-job/index.test.js +++ b/test/jobs/turn-job/index.test.js @@ -34,7 +34,7 @@ var testMeeting = { _id: 'turn-job-meeting-0', room: 'turn-job', participants: ['p1a', 'p2a', 'p3a'], - startTime: Faker.Date.recent(), + startTime: Faker.date.recent(), active: true } @@ -43,19 +43,19 @@ var testUtterances = [ participant: testMeeting.participants[0], startTime: new Date(startTime), endTime: new Date(startTime + 1 * 50), - volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.Helpers.randomNumber(5) } }) + volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.random.number(5) } }) }, { meeting: testMeeting._id, participant: testMeeting.participants[0], startTime: new Date(startTime + 2 * 50), endTime: new Date(startTime + 3 * 50), - volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.Helpers.randomNumber(5) } }) + volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.random.number(5) } }) }, { meeting: testMeeting._id, participant: testMeeting.participants[1], startTime: new Date(startTime + 3 * 50), endTime: new Date(startTime + 4 * 50), - volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.Helpers.randomNumber(5) } }) + volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.random.number(5) } }) } ] diff --git a/test/load.test.js b/test/load.test.js index 42e578c..f7fa15d 100644 --- a/test/load.test.js +++ b/test/load.test.js @@ -3,7 +3,7 @@ const assert = require('assert') const io = require('socket.io-client') -const Faker = require('Faker') +const Faker = require('faker') const feathers = require('@feathersjs/client') const _ = require('underscore') @@ -39,7 +39,7 @@ describe('Load tests', function () { participant: 'participant' + ioIndex, startTime: new Date(), endTime: new Date((new Date()).getTime() + 50), - volumes: _(10).times((n) => { return Faker.Helpers.randomNumber(5) }) + volumes: _(10).times((n) => { return Faker.helpers.random.number(5) }) }) socket.emit('face::create', { meeting: 'meeting' + ioIndex, @@ -47,8 +47,8 @@ describe('Load tests', function () { start_time: new Date(), end_time: new Date((new Date()).getTime() + 50), timestamp: new Date(), - face_delta: Faker.Helpers.randomNumber(5), - delta_array: _(71).times((n) => { return [Faker.Helpers.randomNumber(5)] }) + face_delta: Faker.random.number(5), + delta_array: _(71).times((n) => { return [Faker.random.number(5)] }) }) }, interval) @@ -75,7 +75,6 @@ describe('Load tests', function () { 'force new connection': true }) var app = feathers() - .configure(feathers.hooks()) .configure(feathers.socketio(socket)) var turns = app.service('turns') var recvdTurns = [] diff --git a/test/services/meeting/index.test.js b/test/services/meeting/index.test.js index 051343c..3c4f0bd 100644 --- a/test/services/meeting/index.test.js +++ b/test/services/meeting/index.test.js @@ -2,15 +2,15 @@ 'use strict' const assert = require('assert') -const Faker = require('Faker') +const Faker = require('faker') const app = require('../../../src/app') describe('meeting service', () => { var testMeeting = { - _id: Faker.Helpers.randomNumber(500).toString(), + _id: Faker.random.number(500).toString(), participants: ['p1', 'p2', 'p3'], - startTime: Faker.Date.recent(), + startTime: Faker.date.recent(), active: false } diff --git a/test/shared/global-before.js b/test/shared/global-before.js index 5cbb720..21a8b3b 100644 --- a/test/shared/global-before.js +++ b/test/shared/global-before.js @@ -58,7 +58,6 @@ function createUser (db) { function authenticate () { const client = feathers().configure(feathers.socketio(global.socket)) - .configure(feathers.hooks()) .configure(feathers.authentication()) return client.authenticate({ type: 'local', From aaa7f555dad04fd4e386093161f21839044aae52 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Tue, 24 Apr 2018 15:01:02 -0400 Subject: [PATCH 17/35] more feathers v2 -> v3 migration (& update mongodb package) - mongodb is only used in global-before.js to "cleanup by dropping the database" - turns out the previous remove hook used to remove the password field, did not remove it if the call came from the server. Added this functionality back. - updated other feathers client uses as they should be done when running from node. --- package-lock.json | 64 ++++-------------------------- package.json | 3 +- src/scripts/create-default-user.js | 19 +++++++-- src/services/user/hooks/index.js | 6 ++- test/load.test.js | 9 +++-- test/shared/global-before.js | 43 +++++++++++++------- 6 files changed, 61 insertions(+), 83 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7e7dc57..7ce3183 100644 --- a/package-lock.json +++ b/package-lock.json @@ -536,12 +536,6 @@ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, "buildmail": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", @@ -1270,12 +1264,6 @@ "event-emitter": "0.3.5" } }, - "es6-promise": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", - "dev": true - }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -2885,61 +2873,23 @@ "integrity": "sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg==" }, "mongodb": { - "version": "2.2.35", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.35.tgz", - "integrity": "sha512-3HGLucDg/8EeYMin3k+nFWChTA85hcYDCw1lPsWR6yV9A6RgKb24BkLiZ9ySZR+S0nfBjWoIUS7cyV6ceGx5Gg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.7.tgz", + "integrity": "sha512-n/14kMJEoARXz1qhpNPhUocqy+z5130jhqgEIX1Tsl8UVpHrndQ8et+VmgC4yPK/I8Tcgc93JEMQCHTekBUnNA==", "dev": true, "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.19", - "readable-stream": "2.2.7" + "mongodb-core": "3.0.7" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "mongodb-core": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.19.tgz", - "integrity": "sha512-Jt4AtWUkpuW03kRdYGxga4O65O1UHlFfvvInslEfLlGi+zDMxbBe3J2NVmN9qPJ957Mn6Iz0UpMtV80cmxCVxw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz", + "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==", "dev": true, "requires": { "bson": "1.0.6", "require_optional": "1.0.1" } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } } } }, diff --git a/package.json b/package.json index d39d625..df0612c 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ }, "dependencies": { "@feathersjs/authentication": "^2.1.3", + "@feathersjs/authentication-client": "^1.0.2", "@feathersjs/authentication-jwt": "^2.0.0", "@feathersjs/authentication-local": "^1.1.1", "@feathersjs/client": "^3.4.4", @@ -62,7 +63,7 @@ "istanbul-coveralls": "^1.0.3", "mocha": "^2.5.3", "mocha-mongo": "^0.2.0", - "mongodb": "^2.2.35", + "mongodb": "^3.0.7", "standard": "^7.1.2" } } diff --git a/src/scripts/create-default-user.js b/src/scripts/create-default-user.js index 41fd6c1..db970ee 100644 --- a/src/scripts/create-default-user.js +++ b/src/scripts/create-default-user.js @@ -1,7 +1,10 @@ +const winston = require('winston') const path = require('path') const fs = require('fs') -const feathers = require('@feathersjs/client') const io = require('socket.io-client') +const feathers = require('@feathersjs/feathers') +const socketio = require('@feathersjs/socketio-client') +const auth = require('@feathersjs/authentication-client') var socket = io.connect('http://localhost:3000', { 'transports': [ @@ -15,11 +18,19 @@ var socket = io.connect('http://localhost:3000', { module.exports = function () { const app = this - console.log('in create default user') + winston.info('in create default user') + + // TODO: this is now in 3 places, it really should be somewhere common like a config file -mjl 2018-04-24 + let config = { + jwt: {}, + secret: process.env.AUTH_TOKEN_SECRET, + expiresIn: process.env.AUTH_TOKEN_EXPIRESIN, + local: {} + } const client = feathers() - .configure(feathers.socketio(socket)) - .configure(feathers.authentication()) + .configure(socketio(socket)) + .configure(auth(config)) const DEFAULT_USER_EMAIL = process.env.DEFAULT_USER_EMAIL const DEFAULT_USER_PASSWORD = process.env.DEFAULT_USER_PASSWORD diff --git a/src/services/user/hooks/index.js b/src/services/user/hooks/index.js index f72f394..ccf4c54 100644 --- a/src/services/user/hooks/index.js +++ b/src/services/user/hooks/index.js @@ -2,7 +2,7 @@ const auth = require('@feathersjs/authentication') const local = require('@feathersjs/authentication-local') -const { discard } = require('feathers-hooks-common') +const { iff, isProvider, discard } = require('feathers-hooks-common') const { restrictToOwner } = require('feathers-authentication-hooks') @@ -34,7 +34,9 @@ exports.before = { } exports.after = { - all: [discard('password')], // remove password field once authentication is done + // remove password field once authentication is done only for external calls + // see https://github.com/feathers-plus/feathers-hooks-common/issues/139 + all: [iff(isProvider('external'), discard('password'))], find: [], get: [], create: [], diff --git a/test/load.test.js b/test/load.test.js index f7fa15d..40ae566 100644 --- a/test/load.test.js +++ b/test/load.test.js @@ -4,7 +4,8 @@ const assert = require('assert') const io = require('socket.io-client') const Faker = require('faker') -const feathers = require('@feathersjs/client') +const feathers = require('@feathersjs/feathers') +const socketio = require('@feathersjs/socketio-client') const _ = require('underscore') const testUsers = 50 @@ -74,9 +75,9 @@ describe('Load tests', function () { ], 'force new connection': true }) - var app = feathers() - .configure(feathers.socketio(socket)) - var turns = app.service('turns') + var client = feathers() + .configure(socketio(socket)) + var turns = client.service('turns') var recvdTurns = [] for (var i = 0; i < testUsers; i++) { recvdTurns[i] = 0 } var isDone = false diff --git a/test/shared/global-before.js b/test/shared/global-before.js index 21a8b3b..b301ad0 100644 --- a/test/shared/global-before.js +++ b/test/shared/global-before.js @@ -1,16 +1,20 @@ /* eslint-env mocha */ 'use strict' -const feathersServer = require('@feathersjs/feathers') -const MongoClient = require('mongodb').MongoClient const winston = require('winston') const Promise = require('promise') +const MongoClient = require('mongodb').MongoClient const mongoose = require('mongoose') -const feathers = require('@feathersjs/client') const io = require('socket.io-client') +const feathers = require('@feathersjs/feathers') +const socketio = require('@feathersjs/socketio-client') +const auth = require('@feathersjs/authentication-client') const user = require('../../src/services/user') +// to see debug log messages enable the following: +// winston.level = 'debug' + global.socket = io.connect('http://localhost:' + process.env.PORT, { 'transports': [ 'websocket', @@ -25,29 +29,30 @@ var mongoUrl = process.env.MONGODB_URI function dropDatabase () { winston.log('info', 'dropping db..') - var connectedDb = null + var mongoClient = null return MongoClient.connect(mongoUrl) - .then((db) => { - connectedDb = db - return connectedDb.dropDatabase() + .then((client) => { + mongoClient = client + return client.db().dropDatabase() }) - .then(() => { return connectedDb }) + .then(() => { return mongoClient }) } -function createUser (db) { +function createUser (mongoClient) { winston.log('info', 'creating user...') return new Promise(function (resolve, reject) { - db.close().then(function () { + mongoClient.close().then(function () { mongoose.connect(mongoUrl) mongoose.Promise = global.Promise }) - var serverNoAuth = feathersServer().configure(user) + var serverNoAuth = feathers().configure(user) // serverNoAuth.listen(3000) return serverNoAuth.service('users').create({ email: 'hello', password: 'password' }).then((user) => { - winston.log('info', 'created user...') + winston.info('created user...') + winston.debug(user) resolve(user) }).catch((err) => { winston.log('info', 'error creating user:', err) @@ -57,10 +62,18 @@ function createUser (db) { } function authenticate () { - const client = feathers().configure(feathers.socketio(global.socket)) - .configure(feathers.authentication()) + const client = feathers() + let config = { + jwt: {}, + secret: process.env.AUTH_TOKEN_SECRET, + expiresIn: process.env.AUTH_TOKEN_EXPIRESIN, + local: {} + } + client + .configure(socketio(global.socket)) + .configure(auth(config)) return client.authenticate({ - type: 'local', + strategy: 'local', email: 'hello', password: 'password' }).then((res) => { From 565039bccf30459811ab3a6ddd1f5fd54ebecf06 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Tue, 24 Apr 2018 17:52:42 -0400 Subject: [PATCH 18/35] turn off winston logging to the console when running tests I'd like to get this into a config file, but for now the logging was getting in the way of seeing the tests running. --- test/app.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/app.test.js b/test/app.test.js index 942f5f1..44d2241 100644 --- a/test/app.test.js +++ b/test/app.test.js @@ -6,6 +6,9 @@ const request = require('request') const winston = require('winston') const app = require('../src/app') +// No logging to the console (which may mean no logging at all, but it gets in the way of the test output otherwise. +winston.remove(winston.transports.Console) + before(function (done) { global.app = app winston.log('info', 'mongo:', process.env.MONGODB_URI) From 4de50b21d09c2c1a977ba6cbd9e3fb788365fc65 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Wed, 25 Apr 2018 18:12:48 -0400 Subject: [PATCH 19/35] update d3, jsdom, nodemailer & promise dependent packages and mocha dev package - d3 has been broken into many modules, so I've only installed the ones currently being used. - I'm not positive that nodemailer still works, it will require testing w/ an smtp server available - I updated the promise package, but I think we should remove it altogether and use native Promises at this point - updating mocha has exposed an issue with the tests. mocha is hanging when the tests "finish" because they aren't cleaning up properly after themselves. See https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit more debugging of the tests is needed to figure out how to fix them. --- package-lock.json | 889 ++++++++---------- package.json | 18 +- .../meeting/hooks/deactivate-meeting-hook.js | 28 +- 3 files changed, 427 insertions(+), 508 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7ce3183..a6ccd4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,16 +5,16 @@ "requires": true, "dependencies": { "@feathers-plus/batch-loader": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@feathers-plus/batch-loader/-/batch-loader-0.3.0.tgz", - "integrity": "sha512-buElwyOZKVI34kD7jHt+czIDv1brjXLBPJ+7is+RC98JK+TyqWIUuBJ4E0ZMjPxwwkAJIN6IATyPgvhSXhkaxw==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@feathers-plus/batch-loader/-/batch-loader-0.3.3.tgz", + "integrity": "sha512-1ZQ8wRScn6/Si4k8ARdGNAWiBqM90V22/IZqkSmu0zhqFtfk+h/l9od4hGWKdKCw9R5TtcL+CvPZBOa5AT6JfQ==" }, "@feathersjs/authentication": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@feathersjs/authentication/-/authentication-2.1.3.tgz", - "integrity": "sha512-2qhfdjM6fZkEWSw3M5/gAdqvGUEc6TkjCKRGQ4b5Ket50XMgyAdJGPwb31jVzLTJCcezgyGPPen87qIMbwkL1Q==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication/-/authentication-2.1.5.tgz", + "integrity": "sha512-lz/b0coSnc3SSHOeEJIvT6n3r+HvVIcrZo9eKnbaEx6roZnw4oGU9dbiCHr1VKH3yNDR+fVrV0hzPfh5Nb67sg==", "requires": { - "@feathersjs/commons": "1.4.0", + "@feathersjs/commons": "1.4.1", "@feathersjs/errors": "3.3.0", "@feathersjs/socket-commons": "3.1.5", "debug": "3.1.0", @@ -53,17 +53,14 @@ } }, "@feathersjs/authentication-local": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@feathersjs/authentication-local/-/authentication-local-1.1.1.tgz", - "integrity": "sha512-gEO5EmZiGiq+QnIKjanFpx8oJQngDZ/UF3Ms5oSfmnP2mUC2gjB/qQCM07bgCVUiivGhn2jexzd/IWEzcDPs9Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication-local/-/authentication-local-1.1.3.tgz", + "integrity": "sha512-BBuC87Xoh5WtskWkD10ZccZCk6F4/FD0eNu8CxfptwHi8a3NBrervQ4RzU7spll1IeWAsL5oAnQPYC9bJn3h/A==", "requires": { "@feathersjs/errors": "3.3.0", "bcryptjs": "2.4.3", "debug": "3.1.0", - "lodash.get": "4.4.2", - "lodash.merge": "4.6.1", - "lodash.omit": "4.5.0", - "lodash.pick": "4.4.0", + "lodash": "4.17.10", "passport-local": "1.0.0" } }, @@ -81,9 +78,9 @@ } }, "@feathersjs/commons": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-1.4.0.tgz", - "integrity": "sha512-21/E+KpFJO32fK8snn9kVCWi7R3C2CEPUsuxgYg61mKqydXBvo0lDzMfhp//o4pu9rdZrvNSGyb32Gvi3eK3OA==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-1.4.1.tgz", + "integrity": "sha512-hs3Tz0JV/nwd14B9s+mv4SG+Tll9pDxqEn2wuc5CzL4I2vc1+EnwnhpOkokvQMTAdzsaxwOLoQ4y1BPm6WmMNA==" }, "@feathersjs/configuration": { "version": "1.0.2", @@ -103,11 +100,11 @@ } }, "@feathersjs/express": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-1.2.1.tgz", - "integrity": "sha512-u7t8FgrcRybjjD3qVOIfvlJJfw772/em9TJ8we/zADtATI1g68bmtC/103VtiUpC+H3n2yJGKpV0lcdHlqt9Kg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-1.2.2.tgz", + "integrity": "sha512-Z5sFXcIHxn5ZPdrYeqAndXTPfmSvKbc1YJ1afZmsqXWYM7sD/xa2jZxXodI4KNLRJChKt6kTiWACyolKVXUOkg==", "requires": { - "@feathersjs/commons": "1.4.0", + "@feathersjs/commons": "1.4.1", "@feathersjs/errors": "3.3.0", "debug": "3.1.0", "express": "4.16.3", @@ -119,7 +116,7 @@ "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-3.1.4.tgz", "integrity": "sha512-zFT8a28SoORxxWMHLC2IUSXa3UwKBMlBl1mSLCVALk5GsmnvJpf+P/SU8TMcuzh39Uew7Dj4tZSatu71mnY9cQ==", "requires": { - "@feathersjs/commons": "1.4.0", + "@feathersjs/commons": "1.4.1", "debug": "3.1.0", "events": "2.0.0", "uberproto": "1.2.0" @@ -138,7 +135,7 @@ "resolved": "https://registry.npmjs.org/@feathersjs/rest-client/-/rest-client-1.3.4.tgz", "integrity": "sha512-GIe4u6uLk/69A8qOee2Zz9XQBkO1C6jNWFjWYoKiiuOj3Gz294AHv5tMF7DzmnWOQyVosSrZOzgfH98yf2VNuw==", "requires": { - "@feathersjs/commons": "1.4.0", + "@feathersjs/commons": "1.4.1", "@feathersjs/errors": "3.3.0", "qs": "6.5.1" } @@ -150,7 +147,7 @@ "requires": { "@feathersjs/errors": "3.3.0", "debug": "3.1.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "url-pattern": "1.0.3" } }, @@ -177,10 +174,10 @@ "resolved": "https://registry.npmjs.org/@feathersjs/transport-commons/-/transport-commons-4.0.0.tgz", "integrity": "sha512-O+kuJWpdao0Lw5Pg/65eOuMIlxu+aP9bnK9jNlxfwVdqCxw4eX3Jh8WS0WmQpfZYILk5oyhP/IUdHgSqcjaXgw==", "requires": { - "@feathersjs/commons": "1.4.0", + "@feathersjs/commons": "1.4.1", "@feathersjs/errors": "3.3.0", "debug": "3.1.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "radix-router": "3.0.1" } }, @@ -205,16 +202,16 @@ } }, "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" }, "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "requires": { - "acorn": "4.0.13" + "acorn": "5.5.3" } }, "acorn-jsx": { @@ -234,11 +231,6 @@ } } }, - "addressparser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", - "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" - }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -371,7 +363,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", "requires": { - "lodash": "4.17.5" + "lodash": "4.17.10" } }, "async-limiter": { @@ -520,6 +512,17 @@ "concat-map": "0.0.1" } }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "bson": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", @@ -536,19 +539,11 @@ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true }, - "buildmail": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", - "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", - "requires": { - "addressparser": "1.0.1", - "libbase64": "0.1.0", - "libmime": "3.0.0", - "libqp": "1.1.0", - "nodemailer-fetch": "1.6.0", - "nodemailer-shared": "1.1.0", - "punycode": "1.4.1" - } + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true }, "bytes": { "version": "3.0.0", @@ -738,6 +733,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" } } }, @@ -778,11 +778,6 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" - }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -1003,10 +998,78 @@ "es5-ext": "0.10.42" } }, - "d3": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", - "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=" + "d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==" + }, + "d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=" + }, + "d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=" + }, + "d3-color": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.1.0.tgz", + "integrity": "sha512-IZVcqX5yYFvR2NUBbSfIfbgNcSgAtZ7JbgQWqDXf4CywtN7agvI7Kw6+Q1ETvlHOHWJT55Kyuzt0C3I0GVtRHQ==" + }, + "d3-format": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==" + }, + "d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "requires": { + "d3-color": "1.1.0" + } + }, + "d3-scale": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.0.0.tgz", + "integrity": "sha512-Sa2Ny6CoJT7x6dozxPnvUQT61epGWsgppFvnNl8eJEzfJBG0iDBBTJAtz2JKem7Mb+NevnaZiDiIDHsuWkv6vg==", + "requires": { + "d3-array": "1.2.1", + "d3-collection": "1.0.4", + "d3-format": "1.2.2", + "d3-interpolate": "1.1.6", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1" + } + }, + "d3-scale-chromatic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.2.0.tgz", + "integrity": "sha512-qQUhLi8fPe/F0b0M46C6eFUbms5IIMHuhJ5DKjjzBUvm1b6aPtygJzGbrMdMUD/ckLBq+NdWwHeN2cpMDp4Q5Q==", + "requires": { + "d3-color": "1.1.0", + "d3-interpolate": "1.1.6" + } + }, + "d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==" + }, + "d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==" + }, + "d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "requires": { + "d3-time": "1.0.8" + } }, "dashdash": { "version": "1.14.1", @@ -1016,6 +1079,16 @@ "assert-plus": "1.0.0" } }, + "data-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "requires": { + "abab": "1.0.4", + "whatwg-mimetype": "2.1.0", + "whatwg-url": "6.4.1" + } + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -1114,9 +1187,9 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "doctrine": { @@ -1128,6 +1201,14 @@ "esutils": "2.0.2" } }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "requires": { + "webidl-conversions": "4.0.2" + } + }, "dotenv": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", @@ -1148,7 +1229,7 @@ "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", "requires": { "base64url": "2.0.0", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "ee-first": { @@ -1264,6 +1345,12 @@ "event-emitter": "0.3.5" } }, + "es6-promise": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", + "dev": true + }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -1361,7 +1448,7 @@ "js-yaml": "3.6.1", "json-stable-stringify": "1.0.1", "levn": "0.3.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "mkdirp": "0.5.1", "natural-compare": "1.4.0", "optionator": "0.8.2", @@ -1457,14 +1544,6 @@ "requires": { "acorn": "5.5.3", "acorn-jsx": "3.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - } } }, "esprima": { @@ -1575,6 +1654,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" } } }, @@ -1615,32 +1699,22 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "feathers-authentication-hooks": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/feathers-authentication-hooks/-/feathers-authentication-hooks-0.1.7.tgz", - "integrity": "sha512-RI4PHZRqpxfy+BFrE2HZQMEVIWnwYyDblxgr5t7WQXs5iG77Hhev/d4nGLitQo/Ukwe9qlvkYihFZ42ylfctjA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/feathers-authentication-hooks/-/feathers-authentication-hooks-0.2.0.tgz", + "integrity": "sha512-jebnA47GHNcWzFlHS7/f2A20GDoe+jlNNdbxL+6yFe9xDOJn+Y2weFhzdeeK5ZxQ+oc0lh0KS6USS4T9aMGrng==", "requires": { + "@feathersjs/errors": "3.3.0", "debug": "3.1.0", - "feathers-errors": "2.9.2", - "lodash.get": "4.4.2", - "lodash.isplainobject": "4.0.6", - "lodash.set": "4.3.2" - } - }, - "feathers-errors": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/feathers-errors/-/feathers-errors-2.9.2.tgz", - "integrity": "sha512-qwIX97bNW7+1tWVG073+omUA0rCYKJtTtwuzTrrvfrtdr8J8Dk1Fy4iaV9Fa6/YBD5AZu0lsplPE0iu4u/d4GQ==", - "requires": { - "debug": "3.1.0" + "lodash": "4.17.10" } }, "feathers-hooks-common": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/feathers-hooks-common/-/feathers-hooks-common-4.10.0.tgz", - "integrity": "sha512-O/6+0zs0udmayLhmmecb2sLXC7eY5/NR1FPX/bKuoS3qCuZVrSa//9JZu8L/NlTTamM7Sps2x7J51/EaYQHlGg==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/feathers-hooks-common/-/feathers-hooks-common-4.11.0.tgz", + "integrity": "sha512-HuZm8mJI7BLDWUZCT6+xTAfIsqHySEZO6n5eIayhnpBZpwiFAkMdROBBvLbxJIBvrz5p2iEvLoLZK/6rm4Zybg==", "requires": { - "@feathers-plus/batch-loader": "0.3.0", - "@feathersjs/commons": "1.4.0", + "@feathers-plus/batch-loader": "0.3.3", + "@feathersjs/commons": "1.4.1", "@feathersjs/errors": "3.3.0", "@feathersjs/feathers": "3.1.4", "ajv": "5.5.2", @@ -1650,11 +1724,11 @@ } }, "feathers-mongoose": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-6.1.0.tgz", - "integrity": "sha512-Z2313JkKBCkgP1mREd5UC0Cq67IEe3fXyAMIPE4fC0kHRCOPVhoBStqkyk5kFHKYhYe+C3cx4pfgrhQy80LgGQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-6.1.1.tgz", + "integrity": "sha512-m35hSzEF62M7/a6Qk8TmPHdFkAUqp7RnHirgiSFPXUbs4e9iq7unl1NBtudr7MqoVCMY49nIUhJasaEtJFB/NA==", "requires": { - "@feathersjs/commons": "1.4.0", + "@feathersjs/commons": "1.4.1", "@feathersjs/errors": "3.3.0", "lodash.omit": "4.5.0", "uberproto": "1.2.0" @@ -1840,9 +1914,9 @@ "dev": true }, "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", "dev": true }, "handlebars": { @@ -1949,6 +2023,12 @@ } } }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", @@ -1983,27 +2063,6 @@ "sshpk": "1.14.1" } }, - "httpntlm": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", - "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", - "requires": { - "httpreq": "0.4.24", - "underscore": "1.7.0" - }, - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" - } - } - }, - "httpreq": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", - "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" - }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", @@ -2053,7 +2112,7 @@ "cli-cursor": "1.0.2", "cli-width": "2.2.0", "figures": "1.7.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "readline2": "1.0.1", "run-async": "0.1.0", "rx-lite": "3.1.2", @@ -2068,11 +2127,6 @@ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", "dev": true }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, "ipaddr.js": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", @@ -2307,30 +2361,6 @@ "sum-up": "1.0.3" } }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "dev": true, - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } - } - }, "joi": { "version": "6.10.1", "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", @@ -2338,7 +2368,7 @@ "requires": { "hoek": "2.16.3", "isemail": "1.2.0", - "moment": "2.22.0", + "moment": "2.22.1", "topo": "1.1.0" } }, @@ -2373,29 +2403,47 @@ "optional": true }, "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.9.0.tgz", + "integrity": "sha512-sb3omwJTJ+HwAltLZevM/KQBusY+l2Ar5UfnTCWk9oUVBiDnQPBNiG1BaTAKttCnneonYbNo7vi4EFDY2lBfNA==", "requires": { "abab": "1.0.4", - "acorn": "4.0.13", - "acorn-globals": "3.1.0", + "acorn": "5.5.3", + "acorn-globals": "4.1.0", "array-equal": "1.0.0", - "content-type-parser": "1.0.2", "cssom": "0.3.2", "cssstyle": "0.2.37", + "data-urls": "1.0.0", + "domexception": "1.0.1", "escodegen": "1.9.1", "html-encoding-sniffer": "1.0.2", + "left-pad": "1.3.0", "nwmatcher": "1.4.4", - "parse5": "1.5.1", + "parse5": "4.0.0", + "pn": "1.1.0", "request": "2.85.0", + "request-promise-native": "1.0.5", "sax": "1.2.4", "symbol-tree": "3.2.2", "tough-cookie": "2.3.4", + "w3c-hr-time": "1.0.1", "webidl-conversions": "4.0.2", "whatwg-encoding": "1.0.3", - "whatwg-url": "4.8.0", - "xml-name-validator": "2.0.1" + "whatwg-mimetype": "2.1.0", + "whatwg-url": "6.4.1", + "ws": "4.1.0", + "xml-name-validator": "3.0.0" + }, + "dependencies": { + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2" + } + } } }, "json-schema": { @@ -2481,7 +2529,7 @@ "base64url": "2.0.0", "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.9", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "jws": { @@ -2491,7 +2539,7 @@ "requires": { "base64url": "2.0.0", "jwa": "1.1.5", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "jwt-decode": { @@ -2504,16 +2552,6 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.6.tgz", "integrity": "sha512-/C+l8gABdHsAIfNpykJNWmYodpTnDRyn+JhORkP2VgEf1GgdAc+oTHjVADwISwCJKta031EOIwY6+Hki5z8SpQ==" }, - "kerberos": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-0.0.11.tgz", - "integrity": "sha1-yymJHCHCKsGV8xQLl90SIE/qfcI=", - "dev": true, - "optional": true, - "requires": { - "nan": "1.8.4" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2536,6 +2574,11 @@ "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2545,37 +2588,10 @@ "type-check": "0.3.2" } }, - "libbase64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", - "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=" - }, - "libmime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", - "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", - "requires": { - "iconv-lite": "0.4.15", - "libbase64": "0.1.0", - "libqp": "1.1.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" - } - } - }, - "libqp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", - "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=" - }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, "lodash.clone": { "version": "4.5.0", @@ -2637,10 +2653,10 @@ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, "log-driver": { "version": "1.2.5", @@ -2659,21 +2675,6 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "mailcomposer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", - "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", - "requires": { - "buildmail": "4.0.1", - "libmime": "3.0.0" - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -2740,194 +2741,156 @@ } }, "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", + "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", "dev": true, "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" + "supports-color": "4.4.0" }, "dependencies": { "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "has-flag": "2.0.0" } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", - "dev": true } } }, "mocha-mongo": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mocha-mongo/-/mocha-mongo-0.2.0.tgz", - "integrity": "sha1-Wlx2NUek1HUzzigX+02qxJrnOb8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mocha-mongo/-/mocha-mongo-1.0.0.tgz", + "integrity": "sha1-q3Kaq60uTa5Rj7UPKpEB/qbXTfQ=", "dev": true, "requires": { - "mongodb": "1.4.40", + "mongodb": "2.2.35", "qbox": "0.1.7" }, "dependencies": { - "bson": { - "version": "0.2.22", - "resolved": "https://registry.npmjs.org/bson/-/bson-0.2.22.tgz", - "integrity": "sha1-/NoQPybQwHTVpS1Qkn24D9ArSzk=", - "dev": true, - "requires": { - "nan": "1.8.4" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true + "dev": true }, "mongodb": { - "version": "1.4.40", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.4.40.tgz", - "integrity": "sha1-z9gLdP3w+gU/LM+19JxHyjKjjvs=", + "version": "2.2.35", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.35.tgz", + "integrity": "sha512-3HGLucDg/8EeYMin3k+nFWChTA85hcYDCw1lPsWR6yV9A6RgKb24BkLiZ9ySZR+S0nfBjWoIUS7cyV6ceGx5Gg==", + "dev": true, + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.19", + "readable-stream": "2.2.7" + } + }, + "mongodb-core": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.19.tgz", + "integrity": "sha512-Jt4AtWUkpuW03kRdYGxga4O65O1UHlFfvvInslEfLlGi+zDMxbBe3J2NVmN9qPJ957Mn6Iz0UpMtV80cmxCVxw==", "dev": true, "requires": { - "bson": "0.2.22", - "kerberos": "0.0.11", - "readable-stream": "2.3.6" + "bson": "1.0.6", + "require_optional": "1.0.1" } }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", "dev": true, - "optional": true, "requires": { + "buffer-shims": "1.0.0", "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } } } }, "moment": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.0.tgz", - "integrity": "sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg==" + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", + "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" }, "mongodb": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.7.tgz", "integrity": "sha512-n/14kMJEoARXz1qhpNPhUocqy+z5130jhqgEIX1Tsl8UVpHrndQ8et+VmgC4yPK/I8Tcgc93JEMQCHTekBUnNA==", - "dev": true, "requires": { "mongodb-core": "3.0.7" - }, - "dependencies": { - "mongodb-core": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz", - "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==", - "dev": true, - "requires": { - "bson": "1.0.6", - "require_optional": "1.0.1" - } - } } }, "mongodb-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.4.tgz", - "integrity": "sha512-OTH267FjfwBdEufSnrgd+u8HuLWRuQ6p8DR0XirPl2BdlLEMh4XwjJf1RTlruILp5p2m1w8dDC8rCxibC3W8qQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz", + "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==", "requires": { "bson": "1.0.6", "require_optional": "1.0.1" } }, "mongoose": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.13.tgz", - "integrity": "sha512-VCiutgdxwhTuNHIuUgMRWVYvv0GFw6FUi4j14B7um/Wcy1uhuwF552a6XVKUCth/AY8C+PjVU9fVGJ5K0JmrmQ==", + "version": "5.0.16", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.16.tgz", + "integrity": "sha512-GZqoN85gpk7+MTxZkE+yEVTtvvGfG5//X3UMWfbPQJhNO3nmmF4GFdE1qro73Vsn0PCchxyst3z55JpqZuYAZA==", "requires": { "async": "2.1.4", "bson": "1.0.6", "kareem": "2.0.6", "lodash.get": "4.4.2", - "mongodb": "3.0.4", + "mongodb": "3.0.7", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.3.0", + "mpath": "0.4.1", "mquery": "3.0.0", "ms": "2.0.0", "regexp-clone": "0.0.1", "sliced": "1.0.1" }, "dependencies": { - "mongodb": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.4.tgz", - "integrity": "sha512-90YIIs7A4ko4kCGafxxXj3foexCAlJBC0YLwwIKgSLoE7Vni2IqUMz6HSsZ3zbXOfR1KWtxfnc0RyAMAY/ViLg==", - "requires": { - "mongodb-core": "3.0.4" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2941,9 +2904,9 @@ "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" }, "mpath": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz", - "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.4.1.tgz", + "integrity": "sha512-NNY/MpBkALb9jJmjpBlIi6GRoLveLUM0pJzgbp9vY9F7IQEb/HREC/nxrixechcQwd1NevOhJnWWV8QQQRE+OA==" }, "mquery": { "version": "3.0.0", @@ -2996,12 +2959,6 @@ "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", "dev": true }, - "nan": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz", - "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=", - "dev": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3020,65 +2977,9 @@ "dev": true }, "nodemailer": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", - "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", - "requires": { - "libmime": "3.0.0", - "mailcomposer": "4.0.1", - "nodemailer-direct-transport": "3.3.2", - "nodemailer-shared": "1.1.0", - "nodemailer-smtp-pool": "2.8.2", - "nodemailer-smtp-transport": "2.7.2", - "socks": "1.1.9" - } - }, - "nodemailer-direct-transport": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", - "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", - "requires": { - "nodemailer-shared": "1.1.0", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-fetch": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", - "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=" - }, - "nodemailer-shared": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", - "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", - "requires": { - "nodemailer-fetch": "1.6.0" - } - }, - "nodemailer-smtp-pool": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", - "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-smtp-transport": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", - "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-wellknown": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", - "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.6.4.tgz", + "integrity": "sha512-SD4uuX7NMzZ5f5m1XHDd13J4UC3SmdJk8DsmU1g6Nrs5h3x9LcXr6EBPZIqXRJ3LrF7RdklzGhZRF/TuylTcLg==" }, "nopt": { "version": "3.0.6", @@ -3204,9 +3105,9 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, "parseqs": { "version": "0.0.5", @@ -3345,6 +3246,11 @@ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", "dev": true }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -3368,9 +3274,9 @@ "dev": true }, "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz", + "integrity": "sha1-5F1osAoXZHttpxG/he1u1HII9FA=", "requires": { "asap": "2.0.6" } @@ -3385,9 +3291,9 @@ } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" }, "qbox": { "version": "0.1.7", @@ -3454,7 +3360,7 @@ "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "string_decoder": "1.1.1", "util-deprecate": "1.0.2" }, @@ -3484,7 +3390,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.7.0" + "resolve": "1.7.1" } }, "regexp-clone": { @@ -3520,13 +3426,31 @@ "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "stringstream": "0.0.5", "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "4.17.10" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.4" + } + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -3555,9 +3479,9 @@ } }, "resolve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz", - "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { "path-parse": "1.0.5" @@ -3619,9 +3543,9 @@ "dev": true }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "sax": { "version": "1.2.4", @@ -3695,12 +3619,6 @@ "rechoir": "0.6.2" } }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, "slice-ansi": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", @@ -3712,20 +3630,6 @@ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, - "smart-buffer": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", - "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" - }, - "smtp-connection": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", - "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", - "requires": { - "httpntlm": "1.6.1", - "nodemailer-shared": "1.1.0" - } - }, "sntp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", @@ -3790,15 +3694,6 @@ "isarray": "2.0.1" } }, - "socks": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", - "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", - "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3896,7 +3791,7 @@ "is-resolvable": "1.1.0", "js-yaml": "3.6.1", "json-stable-stringify": "1.0.1", - "lodash": "4.17.5", + "lodash": "4.17.10", "mkdirp": "0.5.1", "optionator": "0.8.2", "path-is-absolute": "1.0.1", @@ -4012,6 +3907,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -4029,7 +3929,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "stringstream": { @@ -4104,7 +4004,7 @@ "ajv": "4.11.8", "ajv-keywords": "1.5.1", "chalk": "1.1.3", - "lodash": "4.17.5", + "lodash": "4.17.10", "slice-ansi": "0.0.4", "string-width": "2.1.1" }, @@ -4169,12 +4069,6 @@ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", - "dev": true - }, "topo": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", @@ -4189,12 +4083,22 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } } }, "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "2.1.0" + } }, "traverse": { "version": "0.6.6", @@ -4206,7 +4110,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -4277,9 +4181,9 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz", + "integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A==" }, "uniq": { "version": "1.0.1", @@ -4337,6 +4241,14 @@ "extsprintf": "1.3.0" } }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "requires": { + "browser-process-hrtime": "0.1.2" + } + }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", @@ -4350,20 +4262,19 @@ "iconv-lite": "0.4.19" } }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==" + }, "whatwg-url": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", - "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", + "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", "requires": { - "tr46": "0.0.3", - "webidl-conversions": "3.0.1" - }, - "dependencies": { - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - } + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" } }, "which": { @@ -4383,9 +4294,9 @@ "optional": true }, "winston": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz", - "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", + "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", "requires": { "async": "1.0.0", "colors": "1.0.3", @@ -4428,14 +4339,14 @@ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "ultron": "1.1.1" } }, "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, "xmlhttprequest-ssl": { "version": "1.5.5", diff --git a/package.json b/package.json index df0612c..324e12c 100644 --- a/package.json +++ b/package.json @@ -37,15 +37,19 @@ "body-parser": "^1.18.2", "compression": "^1.7.2", "cors": "^2.8.4", - "d3": "^3.5.17", + "d3-array": "^1.2.1", + "d3-axis": "^1.0.8", + "d3-scale": "^2.0.0", + "d3-scale-chromatic": "^1.2.0", + "d3-selection": "^1.3.0", "dotenv": "^5.0.1", - "feathers-authentication-hooks": "^0.1.7", + "feathers-authentication-hooks": "^0.2.0", "feathers-hooks-common": "^4.10.0", "feathers-mongoose": "^6.1.0", - "jsdom": "^9.8.3", + "jsdom": "^11.9.0", "mongoose": "^5.0.13", - "nodemailer": "^2.6.4", - "promise": "^7.3.1", + "nodemailer": "^4.6.4", + "promise": "^8.0.1", "socket.io-client": "^2.1.0", "underscore": "^1.8.3", "winston": "^2.4.1" @@ -61,8 +65,8 @@ "faker": "^4.1.0", "istanbul": "^0.4.5", "istanbul-coveralls": "^1.0.3", - "mocha": "^2.5.3", - "mocha-mongo": "^0.2.0", + "mocha": "^5.1.1", + "mocha-mongo": "^1.0.0", "mongodb": "^3.0.7", "standard": "^7.1.2" } diff --git a/src/services/meeting/hooks/deactivate-meeting-hook.js b/src/services/meeting/hooks/deactivate-meeting-hook.js index 4ee4b8b..280c48a 100644 --- a/src/services/meeting/hooks/deactivate-meeting-hook.js +++ b/src/services/meeting/hooks/deactivate-meeting-hook.js @@ -7,8 +7,14 @@ const _ = require('underscore') const winston = require('winston') -var d3 = require('d3') -var jsdom = require('jsdom') +var d3 = Object.assign({}, + require("d3-selection"), + require("d3-array"), + require("d3-axis"), + require("d3-scale"), + require("d3-scale-chromatic")) + +var { JSDOM } = require('jsdom') var nodemailer = require('nodemailer') function shouldMakeMeetingInactive (newParticipants, meetingObject) { @@ -93,17 +99,19 @@ function createVisualization (visualizationData) { var margin = { top: 20, right: 15, bottom: 60, left: 60 } var width = 800 - margin.left - margin.right var height = 500 - margin.top - margin.bottom - var color = d3.scale.category20() + // TODO: think about color, start here: https://medium.com/@Elijah_Meeks/color-advice-for-data-visualization-with-d3-js-33b5adc41c90 + // d3 v5 removed category20 which was used here. + var color = d3.scaleOrdinal(d3.schemeCategory10) - var x = d3.scale.linear() + var x = d3.scaleLinear() .domain([ 0, d3.max(visualizationData, function (d) { return d.meanLengthUtterances }) + 5 ]) .range([ 0, width ]) - var y = d3.scale.linear() + var y = d3.scaleLinear() .domain([ 0, d3.max(visualizationData, function (d) { return d.numUtterances }) + 1 ]) .range([ height, 0 ]) - var document = jsdom.jsdom() + const { document } = (new JSDOM(``)).window var chart = d3.select(document.body) .append('svg') .attr('width', width + margin.right + margin.left) @@ -117,9 +125,7 @@ function createVisualization (visualizationData) { .attr('class', 'main') // draw the x axis - var xAxis = d3.svg.axis() - .scale(x) - .orient('bottom') + var xAxis = d3.axisBottom(x) main.append('g') .attr('transform', 'translate(0,' + height + ')') @@ -134,9 +140,7 @@ function createVisualization (visualizationData) { .text('Avg. Length of Turns (in seconds)') // draw the y axis - var yAxis = d3.svg.axis() - .scale(y) - .orient('left') + var yAxis = d3.axisLeft(y) main.append('g') .attr('transform', 'translate(0,0)') From e0b56a66d8c68ef783d5c2e85eec50471edf1ac7 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sun, 13 May 2018 12:13:27 -0400 Subject: [PATCH 20/35] fix standard formatting reported errors --- .../meeting/hooks/deactivate-meeting-hook.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/services/meeting/hooks/deactivate-meeting-hook.js b/src/services/meeting/hooks/deactivate-meeting-hook.js index 280c48a..4f34c01 100644 --- a/src/services/meeting/hooks/deactivate-meeting-hook.js +++ b/src/services/meeting/hooks/deactivate-meeting-hook.js @@ -8,11 +8,11 @@ const _ = require('underscore') const winston = require('winston') var d3 = Object.assign({}, - require("d3-selection"), - require("d3-array"), - require("d3-axis"), - require("d3-scale"), - require("d3-scale-chromatic")) + require('d3-selection'), + require('d3-array'), + require('d3-axis'), + require('d3-scale'), + require('d3-scale-chromatic')) var { JSDOM } = require('jsdom') var nodemailer = require('nodemailer') @@ -111,7 +111,7 @@ function createVisualization (visualizationData) { .domain([ 0, d3.max(visualizationData, function (d) { return d.numUtterances }) + 1 ]) .range([ height, 0 ]) - const { document } = (new JSDOM(``)).window + const { document } = (new JSDOM('')).window var chart = d3.select(document.body) .append('svg') .attr('width', width + margin.right + margin.left) From 14c497b3e659ad6605ac823d2e2a85d761f8767d Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sun, 13 May 2018 12:19:54 -0400 Subject: [PATCH 21/35] another fix for feathers authentication migration --- src/scripts/create-default-user.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/scripts/create-default-user.js b/src/scripts/create-default-user.js index db970ee..13cd93c 100644 --- a/src/scripts/create-default-user.js +++ b/src/scripts/create-default-user.js @@ -38,8 +38,10 @@ module.exports = function () { return app.service('users').find({ email: DEFAULT_USER_EMAIL }).then(function (users) { + winston.debug(`found user w/ email: ${DEFAULT_USER_EMAIL}: ${JSON.stringify(users.data)}`) return users.data.length > 0 }).then(function (foundUser) { + winston.debug(`found user ${foundUser}`) if (!foundUser) { return app.service('users').create({ email: DEFAULT_USER_EMAIL, @@ -50,26 +52,28 @@ module.exports = function () { } }).then(function (userOrTrue) { return client.authenticate({ - strategy: 'jwt', + strategy: 'local', email: DEFAULT_USER_EMAIL, password: DEFAULT_USER_PASSWORD }) }).then(function (authResult) { + winston.debug(`client authentication: ${JSON.stringify(authResult)}`) if (authResult !== undefined) { fs.writeFile(path.join(__dirname, 'DEFAULT_USER_TOKEN.txt'), authResult.accessToken, function (err) { if (err) { - return console.log(err) + winston.error('error saving user token', err) + return false } }) socket.disconnect() return true } else { - console.log('auth error') + winston.error('auth error') socket.disconnect() return false } }).catch(function (err) { - console.log('could not connect to app', err) + winston.error('could not connect to app', err) socket.disconnect() return false }) From 7a65ec543f8d6fda92cddb42b304a13461b4d199 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sat, 28 Apr 2018 07:44:37 -0400 Subject: [PATCH 22/35] improve Makefile start-dev target exiting from the rhythm-server container shouldn't abort the following commands in the recipe. Added a new command to stop running containers (namely mongo) --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 18290ab..d3bd9a3 100644 --- a/Makefile +++ b/Makefile @@ -57,8 +57,9 @@ clean-build : -rm -f dist/* start-dev : - docker-compose run rhythm-server bash - docker-compose rm --force + -docker-compose run rhythm-server bash + -docker-compose rm --force + -docker-compose stop ./node_modules/.bin/wtfnode : npm install wtfnode --no-save From 2cea9af2808fc4ed91133a1abb0bba6c8b577c82 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Wed, 16 May 2018 17:04:44 -0400 Subject: [PATCH 23/35] Add github issue and pull request templates Copied the templates used by [KeePassXC](https://github.com/keepassxreboot/keepassxc) which seem like good templates to start with. --- .github/ISSUE_TEMPLATE.md | 36 ++++++++++++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 32 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..9933ea3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,36 @@ + + +## Expected Behavior + + + +## Current Behavior + + + +## Possible Solution + + + +## Steps to Reproduce (for bugs) + + +1. +2. +3. +4. + +## Context + + + +## Debug Info + +rhythm-server - VERSION + +Operating system: OS +CPU architecture: ARCH +Kernel: KERNEL + +Docker environment (if applicable): +Using `make up` from `rhythm-docker` diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..01c3095 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,32 @@ + + +## Description + + +## Motivation and context + + + +## How has this been tested? + + + + +## Screenshots (if appropriate): + +## Types of changes + + +- ✅ Bug fix (non-breaking change which fixes an issue) +- ✅ New feature (non-breaking change which adds functionality) +- ✅ Breaking change (fix or feature that would cause existing functionality to change) + +## Checklist: + + + + +- ✅ My code follows the code style of this project. **[REQUIRED]** +- ✅ All new and existing tests passed. **[REQUIRED]** +- ✅ My change requires a change to the documentation and I have updated it accordingly. +- ✅ I have added tests to cover my changes. From a83d563868e72a80f88b07478cf354c5d2e9d3f6 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Wed, 16 May 2018 17:08:42 -0400 Subject: [PATCH 24/35] Bump pre-release version number to 0.4.0-dev.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 324e12c..6af6687 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "rhythm-server", "description": "server for breakout, a measurement and feedback framework for human communication", - "version": "0.3.0", + "version": "0.4.0-dev.1", "homepage": "", "main": "src/", "keywords": [ From 57312de4a94849b0a369e556bece5b0558baa3c6 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 14 May 2018 12:04:54 -0400 Subject: [PATCH 25/35] remove standard package & unused eslint related packages, update remaining packages - Update to latest major version of eslint - modify package.json scripts removing standard and adding eslint --- package-lock.json | 2359 ++++++++++++++++++--------------------------- package.json | 31 +- 2 files changed, 933 insertions(+), 1457 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6ccd4e..224b19c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,19 +14,19 @@ "resolved": "https://registry.npmjs.org/@feathersjs/authentication/-/authentication-2.1.5.tgz", "integrity": "sha512-lz/b0coSnc3SSHOeEJIvT6n3r+HvVIcrZo9eKnbaEx6roZnw4oGU9dbiCHr1VKH3yNDR+fVrV0hzPfh5Nb67sg==", "requires": { - "@feathersjs/commons": "1.4.1", - "@feathersjs/errors": "3.3.0", - "@feathersjs/socket-commons": "3.1.5", - "debug": "3.1.0", - "jsonwebtoken": "8.2.1", - "lodash.clone": "4.5.0", - "lodash.merge": "4.6.1", - "lodash.omit": "4.5.0", - "lodash.pick": "4.4.0", - "long-timeout": "0.1.1", - "ms": "2.1.1", - "passport": "0.4.0", - "uuid": "3.2.1" + "@feathersjs/commons": "^1.2.0", + "@feathersjs/errors": "^3.0.0", + "@feathersjs/socket-commons": "^3.1.2", + "debug": "^3.1.0", + "jsonwebtoken": "^8.0.0", + "lodash.clone": "^4.5.0", + "lodash.merge": "^4.6.0", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "long-timeout": "^0.1.1", + "ms": "^2.0.0", + "passport": "^0.4.0", + "uuid": "^3.1.0" } }, "@feathersjs/authentication-client": { @@ -34,44 +34,44 @@ "resolved": "https://registry.npmjs.org/@feathersjs/authentication-client/-/authentication-client-1.0.2.tgz", "integrity": "sha512-uZfWWMLqNkXcGi5bCuvQwLjBWvUhHtGjK4yZJh3KIHFAESBlQ4/TlqI/JRz2RuswfGfbyNtj9ARPam71YCGOpw==", "requires": { - "@feathersjs/errors": "3.3.0", - "debug": "3.1.0", - "jwt-decode": "2.2.0" + "@feathersjs/errors": "^3.0.0", + "debug": "^3.1.0", + "jwt-decode": "^2.1.0" } }, "@feathersjs/authentication-jwt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@feathersjs/authentication-jwt/-/authentication-jwt-2.0.0.tgz", - "integrity": "sha512-ZNp0Edkehjt8TIyhp7mxRvQRzQ2t6UPJg+niKh8MdnIKkQ6iGEY8+4NbxP3g8JU0QcUBykS+KxsWmPQzws42FA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication-jwt/-/authentication-jwt-2.0.1.tgz", + "integrity": "sha512-2EhgBEFLWm87ZuHcCQtahbujEgwe8++aUGj9rCcFSCWx4oz9S/0NfRH37AtKQuHpdnTG9rClLOP23KqvhOLeLQ==", "requires": { - "@feathersjs/errors": "3.3.0", - "debug": "3.1.0", - "lodash.merge": "4.6.1", - "lodash.omit": "4.5.0", - "lodash.pick": "4.4.0", - "passport-jwt": "3.0.1" + "@feathersjs/errors": "^3.0.0", + "debug": "^3.1.0", + "lodash.merge": "^4.6.0", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "passport-jwt": "^4.0.0" } }, "@feathersjs/authentication-local": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@feathersjs/authentication-local/-/authentication-local-1.1.3.tgz", - "integrity": "sha512-BBuC87Xoh5WtskWkD10ZccZCk6F4/FD0eNu8CxfptwHi8a3NBrervQ4RzU7spll1IeWAsL5oAnQPYC9bJn3h/A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication-local/-/authentication-local-1.2.1.tgz", + "integrity": "sha512-FS78aGjs+zVp3ovXsBmqToqN9mIF1AUFfssnFFa7zcfzuzIp6s3kJARfamdBZH4duq/QW1eO0xRVPIJj9BqZ+A==", "requires": { - "@feathersjs/errors": "3.3.0", - "bcryptjs": "2.4.3", - "debug": "3.1.0", - "lodash": "4.17.10", - "passport-local": "1.0.0" + "@feathersjs/errors": "^3.0.0", + "bcryptjs": "^2.3.0", + "debug": "^3.1.0", + "lodash": "^4.17.5", + "passport-local": "^1.0.0" } }, "@feathersjs/client": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@feathersjs/client/-/client-3.4.4.tgz", - "integrity": "sha512-yYXgyaPTHcCxMZxJ24fYfIpQDBOaenI5pqogCM8sndx1A6ezVkT2t4AUotKVUj46MuHOpOvKiEapTICJNhcHGw==", + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@feathersjs/client/-/client-3.4.5.tgz", + "integrity": "sha512-kLXwyI4i+eAsDuqZcUhWuQ0ttDCsbxEOKvUGBw/mzmfFg/2kWFfa7YIoheTkZ/udCxRjUISDPHxh6i7h2sHpyA==", "requires": { "@feathersjs/authentication-client": "1.0.2", "@feathersjs/errors": "3.3.0", - "@feathersjs/feathers": "3.1.4", + "@feathersjs/feathers": "3.1.5", "@feathersjs/primus-client": "1.1.0", "@feathersjs/rest-client": "1.3.4", "@feathersjs/socketio-client": "1.1.0" @@ -87,8 +87,8 @@ "resolved": "https://registry.npmjs.org/@feathersjs/configuration/-/configuration-1.0.2.tgz", "integrity": "sha512-y0XXfkQF0nFYFwzx/nh2sTfVRetVNBFZd5WQCRCz+tCA2DA17oN9cnFCmuZi9/KVsdLZjx7WG9RmnSkRON9E2Q==", "requires": { - "config": "1.30.0", - "debug": "3.1.0" + "config": "^1.27.0", + "debug": "^3.1.0" } }, "@feathersjs/errors": { @@ -96,7 +96,7 @@ "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-3.3.0.tgz", "integrity": "sha512-9oYAhAj4CKIix5KITRDEzvyNJNIaqNde5lGqmrQLw4pTuyWMvx9tgBhtXPA0l8lS1KnMKw4Qf1gHo6aKrM+OyQ==", "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" } }, "@feathersjs/express": { @@ -104,22 +104,22 @@ "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-1.2.2.tgz", "integrity": "sha512-Z5sFXcIHxn5ZPdrYeqAndXTPfmSvKbc1YJ1afZmsqXWYM7sD/xa2jZxXodI4KNLRJChKt6kTiWACyolKVXUOkg==", "requires": { - "@feathersjs/commons": "1.4.1", - "@feathersjs/errors": "3.3.0", - "debug": "3.1.0", - "express": "4.16.3", - "uberproto": "1.2.0" + "@feathersjs/commons": "^1.4.0", + "@feathersjs/errors": "^3.0.0", + "debug": "^3.1.0", + "express": "^4.16.2", + "uberproto": "^1.2.0" } }, "@feathersjs/feathers": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-3.1.4.tgz", - "integrity": "sha512-zFT8a28SoORxxWMHLC2IUSXa3UwKBMlBl1mSLCVALk5GsmnvJpf+P/SU8TMcuzh39Uew7Dj4tZSatu71mnY9cQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-3.1.5.tgz", + "integrity": "sha512-GrgAjh44jx6I1xmZFa9Nkub5GIlnGKmP6Id1Ys0P+NQFPYALdtUs6idmuBFGf3Rc+uKHWpbB13eTnNfDSGKZdQ==", "requires": { - "@feathersjs/commons": "1.4.1", - "debug": "3.1.0", - "events": "2.0.0", - "uberproto": "1.2.0" + "@feathersjs/commons": "^1.4.0", + "debug": "^3.1.0", + "events": "^2.0.0", + "uberproto": "^1.2.0" } }, "@feathersjs/primus-client": { @@ -127,7 +127,7 @@ "resolved": "https://registry.npmjs.org/@feathersjs/primus-client/-/primus-client-1.1.0.tgz", "integrity": "sha512-a6zczmbHF7Rmm/KHNMIlD6CNEjdhbFkCHxdBaM+CaKMb9tkW8sNdR4Pc1VA/t8CRUqOSECPE9mk141MwoKwQRA==", "requires": { - "@feathersjs/transport-commons": "4.0.0" + "@feathersjs/transport-commons": "^4.0.0" } }, "@feathersjs/rest-client": { @@ -135,9 +135,9 @@ "resolved": "https://registry.npmjs.org/@feathersjs/rest-client/-/rest-client-1.3.4.tgz", "integrity": "sha512-GIe4u6uLk/69A8qOee2Zz9XQBkO1C6jNWFjWYoKiiuOj3Gz294AHv5tMF7DzmnWOQyVosSrZOzgfH98yf2VNuw==", "requires": { - "@feathersjs/commons": "1.4.1", - "@feathersjs/errors": "3.3.0", - "qs": "6.5.1" + "@feathersjs/commons": "^1.2.0", + "@feathersjs/errors": "^3.0.0", + "qs": "^6.5.0" } }, "@feathersjs/socket-commons": { @@ -145,10 +145,10 @@ "resolved": "https://registry.npmjs.org/@feathersjs/socket-commons/-/socket-commons-3.1.5.tgz", "integrity": "sha512-cnMqVNGR0fOM00UqRmslmPiUZ2UKToTxesoGwZvhvq4unF032KzS4gz8bZ7qYsin9HmAP/E2gs2v0119CR7LKQ==", "requires": { - "@feathersjs/errors": "3.3.0", - "debug": "3.1.0", - "lodash": "4.17.10", - "url-pattern": "1.0.3" + "@feathersjs/errors": "^3.0.0", + "debug": "^3.1.0", + "lodash": "^4.17.4", + "url-pattern": "^1.0.3" } }, "@feathersjs/socketio": { @@ -156,9 +156,9 @@ "resolved": "https://registry.npmjs.org/@feathersjs/socketio/-/socketio-3.2.1.tgz", "integrity": "sha512-QGIptIgsbyyKzmCE0Hzd5HBAq80CnM/Qaq4e3aqs3gpe+GUUeVubpmZszLhapzwwto8WshxWVWUQLQZ+uRYH9g==", "requires": { - "@feathersjs/transport-commons": "4.0.0", - "debug": "3.1.0", - "socket.io": "2.1.0" + "@feathersjs/transport-commons": "^4.0.0", + "debug": "^3.1.0", + "socket.io": "^2.1.0" } }, "@feathersjs/socketio-client": { @@ -166,7 +166,7 @@ "resolved": "https://registry.npmjs.org/@feathersjs/socketio-client/-/socketio-client-1.1.0.tgz", "integrity": "sha512-2ry9vX8qIF1Nax3G3r121Utsnj5NQbGgBG7K0M3RTJc+93Gg46BrnLVMFKue5fz2YTIOpHfHDRu1qqbddTJLXQ==", "requires": { - "@feathersjs/transport-commons": "4.0.0" + "@feathersjs/transport-commons": "^4.0.0" } }, "@feathersjs/transport-commons": { @@ -174,11 +174,11 @@ "resolved": "https://registry.npmjs.org/@feathersjs/transport-commons/-/transport-commons-4.0.0.tgz", "integrity": "sha512-O+kuJWpdao0Lw5Pg/65eOuMIlxu+aP9bnK9jNlxfwVdqCxw4eX3Jh8WS0WmQpfZYILk5oyhP/IUdHgSqcjaXgw==", "requires": { - "@feathersjs/commons": "1.4.1", - "@feathersjs/errors": "3.3.0", - "debug": "3.1.0", - "lodash": "4.17.10", - "radix-router": "3.0.1" + "@feathersjs/commons": "^1.4.0", + "@feathersjs/errors": "^3.0.0", + "debug": "^3.1.0", + "lodash": "^4.17.4", + "radix-router": "^3.0.1" } }, "abab": { @@ -197,7 +197,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -211,7 +211,7 @@ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "requires": { - "acorn": "5.5.3" + "acorn": "^5.0.0" } }, "acorn-jsx": { @@ -220,7 +220,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -241,27 +241,21 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -270,12 +264,6 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -294,7 +282,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "array-equal": { @@ -313,7 +301,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -322,16 +310,6 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0" - } - }, "arraybuffer.slice": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", @@ -363,7 +341,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", "requires": { - "lodash": "4.17.10" + "lodash": "^4.14.0" } }, "async-limiter": { @@ -392,9 +370,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "backo2": { @@ -429,7 +407,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "bcryptjs": { @@ -461,15 +439,15 @@ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" }, "dependencies": { "debug": { @@ -492,7 +470,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" }, "dependencies": { "hoek": { @@ -508,7 +486,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -556,7 +534,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsite": { @@ -589,8 +567,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -599,28 +577,25 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -634,8 +609,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -648,21 +623,24 @@ } } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { @@ -675,7 +653,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -704,7 +682,7 @@ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", "requires": { - "mime-db": "1.33.0" + "mime-db": ">= 1.33.0 < 2" } }, "compression": { @@ -712,13 +690,13 @@ "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "bytes": "3.0.0", - "compressible": "2.0.13", + "compressible": "~2.0.13", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "debug": { @@ -753,10 +731,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "config": { @@ -798,8 +776,8 @@ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" + "object-assign": "^4", + "vary": "^1" } }, "coveralls": { @@ -833,7 +811,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "caseless": { @@ -848,7 +826,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "form-data": { @@ -857,9 +835,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "har-validator": { @@ -868,10 +846,10 @@ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.15.1", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "hawk": { @@ -880,10 +858,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "http-signature": { @@ -892,9 +870,9 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "qs": { @@ -909,26 +887,26 @@ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" } }, "sntp": { @@ -937,7 +915,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "tunnel-agent": { @@ -948,12 +926,23 @@ } } }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "cryptiles": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -961,7 +950,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "hoek": { @@ -981,7 +970,7 @@ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", "requires": { - "cssom": "0.3.2" + "cssom": "0.3.x" } }, "cycle": { @@ -989,15 +978,6 @@ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.42" - } - }, "d3-array": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", @@ -1028,7 +1008,7 @@ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", "requires": { - "d3-color": "1.1.0" + "d3-color": "1" } }, "d3-scale": { @@ -1036,21 +1016,21 @@ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.0.0.tgz", "integrity": "sha512-Sa2Ny6CoJT7x6dozxPnvUQT61epGWsgppFvnNl8eJEzfJBG0iDBBTJAtz2JKem7Mb+NevnaZiDiIDHsuWkv6vg==", "requires": { - "d3-array": "1.2.1", - "d3-collection": "1.0.4", - "d3-format": "1.2.2", - "d3-interpolate": "1.1.6", - "d3-time": "1.0.8", - "d3-time-format": "2.1.1" + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" } }, "d3-scale-chromatic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.2.0.tgz", - "integrity": "sha512-qQUhLi8fPe/F0b0M46C6eFUbms5IIMHuhJ5DKjjzBUvm1b6aPtygJzGbrMdMUD/ckLBq+NdWwHeN2cpMDp4Q5Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.0.tgz", + "integrity": "sha512-YwMbiaW2bStWvQFByK8hA6hk7ToWflspIo2TRukCqERd8isiafEMBXmwfh8c7/0Z94mVvIzIveRLVC6RAjhgeA==", "requires": { - "d3-color": "1.1.0", - "d3-interpolate": "1.1.6" + "d3-color": "1", + "d3-interpolate": "1" } }, "d3-selection": { @@ -1068,7 +1048,7 @@ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", "requires": { - "d3-time": "1.0.8" + "d3-time": "1" } }, "dashdash": { @@ -1076,7 +1056,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "data-urls": { @@ -1084,9 +1064,9 @@ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", "requires": { - "abab": "1.0.4", - "whatwg-mimetype": "2.1.0", - "whatwg-url": "6.4.1" + "abab": "^1.0.4", + "whatwg-mimetype": "^2.0.0", + "whatwg-url": "^6.4.0" } }, "debug": { @@ -1104,12 +1084,6 @@ } } }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true - }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -1122,53 +1096,19 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "1.0.4" - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "deglob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", - "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", - "dev": true, - "requires": { - "find-root": "1.1.0", - "glob": "7.1.2", - "ignore": "3.3.7", - "pkg-config": "1.1.1", - "run-parallel": "1.1.8", - "uniq": "1.0.1", - "xtend": "4.0.1" - } - }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -1198,7 +1138,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "domexception": { @@ -1206,7 +1146,7 @@ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "requires": { - "webidl-conversions": "4.0.2" + "webidl-conversions": "^4.0.2" } }, "dotenv": { @@ -1220,7 +1160,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ecdsa-sig-formatter": { @@ -1228,8 +1168,8 @@ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", "requires": { - "base64url": "2.0.0", - "safe-buffer": "5.1.2" + "base64url": "^2.0.0", + "safe-buffer": "^5.0.1" } }, "ee-first": { @@ -1247,12 +1187,12 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", - "ws": "3.3.3" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" } }, "engine.io-client": { @@ -1262,14 +1202,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" } }, @@ -1279,70 +1219,10 @@ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.7", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.4", - "has-binary2": "1.0.2" - } - }, - "es-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", - "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", - "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "has-binary2": "~1.0.2" } }, "es6-promise": { @@ -1351,41 +1231,6 @@ "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", "dev": true }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1402,138 +1247,296 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" } }, "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "2.1.0", - "escope": "3.6.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.6.1", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "ms": "2.0.0" + "color-convert": "^1.9.0" } }, - "ms": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "figures": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "globals": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", + "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==", "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } } } }, - "eslint-config-standard": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz", - "integrity": "sha1-06aKr8cZFjnn7kQec0hzkCY1QpI=", - "dev": true - }, - "eslint-config-standard-jsx": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.3.0.tgz", - "integrity": "sha1-yrCAGhWjYL9j+suXqyL73YjYpeA=", - "dev": true - }, "eslint-plugin-promise": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz", "integrity": "sha512-2WO+ZFh7vxUKRfR0cOIMrWgYKdR6S1AlOezw6pC52B6oYpd5WFghN+QHxvrRdZMtbo8h3dfUZ2o1rWb0UPbKtg==", "dev": true }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "array.prototype.find": "2.0.4", - "doctrine": "1.5.0", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.1.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "eslint-plugin-standard": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.3.1.tgz", - "integrity": "sha1-Z2W9Km2ezce98bFFrkuzDit7hvg=", + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", "dev": true }, "espree": { @@ -1542,8 +1545,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -1557,7 +1560,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -1566,7 +1569,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1584,62 +1587,46 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" - } - }, "events": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==" }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, "express": { "version": "4.16.3", "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", + "proxy-addr": "~2.0.3", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "debug": { @@ -1667,6 +1654,17 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -1703,24 +1701,24 @@ "resolved": "https://registry.npmjs.org/feathers-authentication-hooks/-/feathers-authentication-hooks-0.2.0.tgz", "integrity": "sha512-jebnA47GHNcWzFlHS7/f2A20GDoe+jlNNdbxL+6yFe9xDOJn+Y2weFhzdeeK5ZxQ+oc0lh0KS6USS4T9aMGrng==", "requires": { - "@feathersjs/errors": "3.3.0", - "debug": "3.1.0", - "lodash": "4.17.10" + "@feathersjs/errors": "^3.3.0", + "debug": "^3.1.0", + "lodash": "^4.17.5" } }, "feathers-hooks-common": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/feathers-hooks-common/-/feathers-hooks-common-4.11.0.tgz", - "integrity": "sha512-HuZm8mJI7BLDWUZCT6+xTAfIsqHySEZO6n5eIayhnpBZpwiFAkMdROBBvLbxJIBvrz5p2iEvLoLZK/6rm4Zybg==", - "requires": { - "@feathers-plus/batch-loader": "0.3.3", - "@feathersjs/commons": "1.4.1", - "@feathersjs/errors": "3.3.0", - "@feathersjs/feathers": "3.1.4", - "ajv": "5.5.2", - "debug": "3.1.0", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/feathers-hooks-common/-/feathers-hooks-common-4.11.1.tgz", + "integrity": "sha512-+tt8M57zdL4N0hIMsML2C688DhC6oAgvH48rU1bDLmgTHe4wt7XJ9N4ewpkFQ0SxsUngBbN/hi/iOBbxnFfFzw==", + "requires": { + "@feathers-plus/batch-loader": "^0.3.0", + "@feathersjs/commons": "^1.4.0", + "@feathersjs/errors": "^3.3.0", + "@feathersjs/feathers": "^3.1.3", + "ajv": "^5.5.2", + "debug": "^3.1.0", "process": "0.11.10", - "traverse": "0.6.6" + "traverse": "^0.6.6" } }, "feathers-mongoose": { @@ -1728,20 +1726,10 @@ "resolved": "https://registry.npmjs.org/feathers-mongoose/-/feathers-mongoose-6.1.1.tgz", "integrity": "sha512-m35hSzEF62M7/a6Qk8TmPHdFkAUqp7RnHirgiSFPXUbs4e9iq7unl1NBtudr7MqoVCMY49nIUhJasaEtJFB/NA==", "requires": { - "@feathersjs/commons": "1.4.1", - "@feathersjs/errors": "3.3.0", - "lodash.omit": "4.5.0", - "uberproto": "1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "@feathersjs/commons": "^1.3.0", + "@feathersjs/errors": "^3.2.0", + "lodash.omit": "^4.3.0", + "uberproto": "^1.2.0" } }, "file-entry-cache": { @@ -1750,8 +1738,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "finalhandler": { @@ -1760,12 +1748,12 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" }, "dependencies": { "debug": { @@ -1783,30 +1771,18 @@ } } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, "flat-cache": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1817,9 +1793,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "^2.1.12" } }, "forwarded": { @@ -1838,10 +1814,10 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "generate-function": { @@ -1856,21 +1832,15 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -1879,32 +1849,26 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, "globby": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "graceful-fs": { @@ -1925,10 +1889,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "async": { @@ -1943,7 +1907,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -1958,17 +1922,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has-ansi": { @@ -1977,7 +1932,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-binary2": { @@ -1999,21 +1954,15 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, "hawk": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" }, "dependencies": { "hoek": { @@ -2032,14 +1981,15 @@ "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true }, "html-encoding-sniffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "requires": { - "whatwg-encoding": "1.0.3" + "whatwg-encoding": "^1.0.1" } }, "http-errors": { @@ -2047,10 +1997,10 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-signature": { @@ -2058,9 +2008,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "iconv-lite": { @@ -2091,8 +2041,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2100,33 +2050,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.10", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, "ipaddr.js": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", @@ -2138,27 +2061,6 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, "is-my-ip-valid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", @@ -2171,11 +2073,11 @@ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-path-cwd": { @@ -2190,7 +2092,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2199,36 +2101,27 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", "dev": true }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "1.0.1" - } - }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2239,11 +2132,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" }, - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2261,20 +2149,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.6.1", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.0", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "async": { @@ -2289,11 +2177,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" } }, "esprima": { @@ -2314,11 +2202,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "resolve": { @@ -2334,7 +2222,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "supports-color": { @@ -2343,7 +2231,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -2354,22 +2242,11 @@ "integrity": "sha1-TxwVkr4QTVkfkzy/nA8vUoStzwA=", "dev": true, "requires": { - "chalk": "1.1.3", - "coveralls": "2.13.3", - "minimist": "1.2.0", - "rimraf": "2.6.2", - "sum-up": "1.0.3" - } - }, - "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", - "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", - "requires": { - "hoek": "2.16.3", - "isemail": "1.2.0", - "moment": "2.22.1", - "topo": "1.1.0" + "chalk": "^1.0.0", + "coveralls": "^2.11.2", + "minimist": "^1.1.1", + "rimraf": "^2.3.4", + "sum-up": "^1.0.1" } }, "js-tokens": { @@ -2384,8 +2261,8 @@ "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" }, "dependencies": { "esprima": { @@ -2403,36 +2280,36 @@ "optional": true }, "jsdom": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.9.0.tgz", - "integrity": "sha512-sb3omwJTJ+HwAltLZevM/KQBusY+l2Ar5UfnTCWk9oUVBiDnQPBNiG1BaTAKttCnneonYbNo7vi4EFDY2lBfNA==", - "requires": { - "abab": "1.0.4", - "acorn": "5.5.3", - "acorn-globals": "4.1.0", - "array-equal": "1.0.0", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "data-urls": "1.0.0", - "domexception": "1.0.1", - "escodegen": "1.9.1", - "html-encoding-sniffer": "1.0.2", - "left-pad": "1.3.0", - "nwmatcher": "1.4.4", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz", + "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", + "requires": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", "parse5": "4.0.0", - "pn": "1.1.0", - "request": "2.85.0", - "request-promise-native": "1.0.5", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.4", - "w3c-hr-time": "1.0.1", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-mimetype": "2.1.0", - "whatwg-url": "6.4.1", - "ws": "4.1.0", - "xml-name-validator": "3.0.0" + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.0", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" }, "dependencies": { "ws": { @@ -2440,8 +2317,8 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" } } } @@ -2456,14 +2333,11 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "json-stable-stringify": { + "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, "json-stringify-safe": { "version": "5.0.1", @@ -2475,12 +2349,6 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsonpointer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", @@ -2492,16 +2360,16 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz", "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==", "requires": { - "jws": "3.1.4", - "lodash.includes": "4.3.0", - "lodash.isboolean": "3.0.3", - "lodash.isinteger": "4.0.4", - "lodash.isnumber": "3.0.3", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.once": "4.1.1", - "ms": "2.1.1", - "xtend": "4.0.1" + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "xtend": "^4.0.1" } }, "jsprim": { @@ -2512,14 +2380,8 @@ "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true + "verror": "1.10.0" + } }, "jwa": { "version": "1.1.5", @@ -2529,7 +2391,7 @@ "base64url": "2.0.0", "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.9", - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "jws": { @@ -2537,9 +2399,9 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", "requires": { - "base64url": "2.0.0", - "jwa": "1.1.5", - "safe-buffer": "5.1.2" + "base64url": "^2.0.0", + "jwa": "^1.1.4", + "safe-buffer": "^5.0.1" } }, "jwt-decode": { @@ -2548,9 +2410,9 @@ "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" }, "kareem": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.6.tgz", - "integrity": "sha512-/C+l8gABdHsAIfNpykJNWmYodpTnDRyn+JhORkP2VgEf1GgdAc+oTHjVADwISwCJKta031EOIwY6+Hki5z8SpQ==" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.7.tgz", + "integrity": "sha512-p8+lEpsNs4N0fvNOC1/zzDO0wDrD3Pb1G+OwfIG+gKVK3MyY5jeaGYh+9Qx6jb4fEG2b3E6U98vaE9MH7Gilsw==" }, "kind-of": { "version": "3.2.2", @@ -2558,7 +2420,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -2584,8 +2446,8 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "lodash": { @@ -2675,6 +2537,16 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -2705,16 +2577,22 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2777,7 +2655,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -2788,8 +2666,8 @@ "integrity": "sha1-q3Kaq60uTa5Rj7UPKpEB/qbXTfQ=", "dev": true, "requires": { - "mongodb": "2.2.35", - "qbox": "0.1.7" + "mongodb": "^2.2.24", + "qbox": "0.1.x" }, "dependencies": { "isarray": { @@ -2815,8 +2693,8 @@ "integrity": "sha512-Jt4AtWUkpuW03kRdYGxga4O65O1UHlFfvvInslEfLlGi+zDMxbBe3J2NVmN9qPJ957Mn6Iz0UpMtV80cmxCVxw==", "dev": true, "requires": { - "bson": "1.0.6", - "require_optional": "1.0.1" + "bson": "~1.0.4", + "require_optional": "~1.0.0" } }, "process-nextick-args": { @@ -2831,13 +2709,13 @@ "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", "dev": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -2846,43 +2724,38 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } }, - "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" - }, "mongodb": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.7.tgz", - "integrity": "sha512-n/14kMJEoARXz1qhpNPhUocqy+z5130jhqgEIX1Tsl8UVpHrndQ8et+VmgC4yPK/I8Tcgc93JEMQCHTekBUnNA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.8.tgz", + "integrity": "sha512-mj7yIUyAr9xnO2ev8pcVJ9uX7gSum5LLs1qIFoWLxA5Il50+jcojKtaO1/TbexsScZ9Poz00Pc3b86GiSqJ7WA==", "requires": { - "mongodb-core": "3.0.7" + "mongodb-core": "3.0.8" } }, "mongodb-core": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz", - "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.8.tgz", + "integrity": "sha512-dFxfhH9N7ohuQnINyIl6dqEF8sYOE0WKuymrFf3L3cipJNrx+S8rAbNOTwa00/fuJCjBMJNFsaA+R2N16//UIw==", "requires": { - "bson": "1.0.6", - "require_optional": "1.0.1" + "bson": "~1.0.4", + "require_optional": "^1.0.1" } }, "mongoose": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.16.tgz", - "integrity": "sha512-GZqoN85gpk7+MTxZkE+yEVTtvvGfG5//X3UMWfbPQJhNO3nmmF4GFdE1qro73Vsn0PCchxyst3z55JpqZuYAZA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.0.tgz", + "integrity": "sha512-GFx4Z2YpfxRQ9BExd2ML5MDKYdzOjdXB5a6fhove98EP6iB8tgZDY/fKSociEMJSIA37auPXmKfGfrc2uAMkMQ==", "requires": { "async": "2.1.4", - "bson": "1.0.6", - "kareem": "2.0.6", + "bson": "~1.0.5", + "kareem": "2.0.7", "lodash.get": "4.4.2", - "mongodb": "3.0.7", + "mongodb": "3.0.8", "mongoose-legacy-pluralize": "1.0.2", "mpath": "0.4.1", "mquery": "3.0.0", @@ -2944,21 +2817,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, - "multiline": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "dev": true, - "requires": { - "strip-indent": "1.0.1" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2970,12 +2828,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "nodemailer": { "version": "4.6.4", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.6.4.tgz", @@ -2987,15 +2839,9 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "nwmatcher": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", @@ -3016,24 +2862,6 @@ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -3053,23 +2881,17 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { @@ -3091,12 +2913,12 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "os-homedir": { @@ -3104,6 +2926,12 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", @@ -3114,7 +2942,7 @@ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -3122,7 +2950,7 @@ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -3135,31 +2963,17 @@ "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", "requires": { - "passport-strategy": "1.0.0", + "passport-strategy": "1.x.x", "pause": "0.0.1" } }, "passport-jwt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-3.0.1.tgz", - "integrity": "sha1-5Pcnba2L0lHUPG/DiIMTC5YycvY=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz", + "integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==", "requires": { - "jsonwebtoken": "7.4.3", - "passport-strategy": "1.0.0" - }, - "dependencies": { - "jsonwebtoken": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", - "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", - "requires": { - "joi": "6.10.1", - "jws": "3.1.4", - "lodash.once": "4.1.1", - "ms": "2.1.1", - "xtend": "4.0.1" - } - } + "jsonwebtoken": "^8.2.0", + "passport-strategy": "^1.0.0" } }, "passport-local": { @@ -3167,7 +2981,7 @@ "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", "requires": { - "passport-strategy": "1.0.0" + "passport-strategy": "1.x.x" } }, "passport-strategy": { @@ -3187,12 +3001,6 @@ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -3226,26 +3034,9 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "dev": true, - "requires": { - "debug-log": "1.0.1", - "find-root": "1.1.0", - "xtend": "4.0.1" + "pinkie": "^2.0.0" } }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", @@ -3267,18 +3058,12 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, "promise": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz", "integrity": "sha1-5F1osAoXZHttpxG/he1u1HII9FA=", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "proxy-addr": { @@ -3286,10 +3071,16 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.6.0" } }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, "punycode": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", @@ -3340,7 +3131,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.4.0" + "statuses": ">= 1.3.1 < 2" } }, "setprototypeof": { @@ -3356,13 +3147,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" }, "dependencies": { "isarray": { @@ -3373,31 +3164,17 @@ } } }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.7.1" - } - }, "regexp-clone": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -3409,28 +3186,28 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "request-promise-core": { @@ -3438,7 +3215,7 @@ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", "requires": { - "lodash": "4.17.10" + "lodash": "^4.13.1" } }, "request-promise-native": { @@ -3447,8 +3224,8 @@ "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", "requires": { "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.4" + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" } }, "require-uncached": { @@ -3457,8 +3234,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" }, "dependencies": { "resolve-from": { @@ -3474,17 +3251,8 @@ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", "requires": { - "resolve-from": "2.0.0", - "semver": "5.5.0" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" + "resolve-from": "^2.0.0", + "semver": "^5.1.0" } }, "resolve-from": { @@ -3492,16 +3260,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -3509,7 +3267,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -3518,30 +3276,24 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "run-parallel": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.8.tgz", - "integrity": "sha512-e5t1NVhr5VWmD9V9U4KjjSGkf5w6CcTPgw11A3CfIvkkQxlAKzX3usPUp1NUQTmpOOjU+f9QRICU3tMbKwn9ZQ==", - "dev": true - }, "rx-lite": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", "dev": true }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3563,18 +3315,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { "debug": { @@ -3597,9 +3349,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -3608,21 +3360,25 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "shebang-regex": "^1.0.0" } }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "sliced": { @@ -3635,7 +3391,7 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" }, "dependencies": { "hoek": { @@ -3650,12 +3406,12 @@ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.0.tgz", "integrity": "sha512-KS+3CNWWNtLbVN5j0/B+1hjxRzey+oTK6ejpAOoxMZis6aXeB8cUtfuvjHl97tuZx+t/qD/VyqFMjuzu2Js6uQ==", "requires": { - "debug": "3.1.0", - "engine.io": "3.2.0", - "has-binary2": "1.0.2", - "socket.io-adapter": "1.1.1", + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", "socket.io-client": "2.1.0", - "socket.io-parser": "3.2.0" + "socket.io-parser": "~3.2.0" } }, "socket.io-adapter": { @@ -3672,15 +3428,15 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.2.1", - "has-binary2": "1.0.2", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "3.2.0", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" } }, @@ -3690,7 +3446,7 @@ "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "requires": { "component-emitter": "1.2.1", - "debug": "3.1.0", + "debug": "~3.1.0", "isarray": "2.0.1" } }, @@ -3711,14 +3467,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "stack-trace": { @@ -3726,182 +3482,6 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "standard": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", - "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", - "dev": true, - "requires": { - "eslint": "2.10.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.1", - "eslint-plugin-promise": "1.3.2", - "eslint-plugin-react": "5.2.2", - "eslint-plugin-standard": "1.3.3", - "standard-engine": "4.1.3" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "eslint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", - "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.1.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.6.1", - "json-stable-stringify": "1.0.1", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "eslint-config-standard": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", - "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=", - "dev": true - }, - "eslint-config-standard-jsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", - "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=", - "dev": true - }, - "eslint-plugin-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", - "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=", - "dev": true - }, - "eslint-plugin-react": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", - "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", - "dev": true, - "requires": { - "doctrine": "1.5.0", - "jsx-ast-utils": "1.4.1" - } - }, - "eslint-plugin-standard": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", - "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=", - "dev": true - }, - "espree": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", - "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", - "dev": true, - "requires": { - "acorn": "3.3.0", - "acorn-jsx": "3.0.1" - } - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", - "dev": true - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - } - } - }, - "standard-engine": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", - "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", - "dev": true, - "requires": { - "defaults": "1.0.3", - "deglob": "1.1.2", - "find-root": "1.1.0", - "get-stdin": "5.0.1", - "minimist": "1.2.0", - "multiline": "1.0.2", - "pkg-config": "1.1.1", - "xtend": "4.0.1" - } - }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -3912,24 +3492,13 @@ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -3943,30 +3512,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - } + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3981,7 +3527,7 @@ "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } }, "supports-color": { @@ -3995,63 +3541,6 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.10", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4064,25 +3553,26 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, - "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", - "requires": { - "hoek": "2.16.3" - } - }, "tough-cookie": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" }, "dependencies": { "punycode": { @@ -4097,7 +3587,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" } }, "traverse": { @@ -4110,7 +3600,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -4124,7 +3614,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { @@ -4133,7 +3623,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -4154,9 +3644,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -4185,12 +3675,6 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz", "integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A==" }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -4201,15 +3685,6 @@ "resolved": "https://registry.npmjs.org/url-pattern/-/url-pattern-1.0.3.tgz", "integrity": "sha1-BAkpJHGyTyPFDWWkeTF5PStaz8E=" }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4236,9 +3711,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "w3c-hr-time": { @@ -4246,7 +3721,7 @@ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", "requires": { - "browser-process-hrtime": "0.1.2" + "browser-process-hrtime": "^0.1.2" } }, "webidl-conversions": { @@ -4272,9 +3747,9 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "which": { @@ -4283,7 +3758,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "window-size": { @@ -4298,12 +3773,12 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", "requires": { - "async": "1.0.0", - "colors": "1.0.3", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "stack-trace": "0.0.10" + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" }, "dependencies": { "async": { @@ -4330,7 +3805,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "ws": { @@ -4338,9 +3813,9 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, "xml-name-validator": { @@ -4358,6 +3833,12 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -4365,9 +3846,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } }, diff --git a/package.json b/package.json index 6af6687..456d986 100644 --- a/package.json +++ b/package.json @@ -16,23 +16,23 @@ "node": ">=5.4.0" }, "scripts": { - "test": "npm run stylecheck && npm run mocha", + "test": "npm run lint && npm run mocha", "start": "node -r dotenv/config src/", - "mocha": "node -r dotenv/config ./node_modules/.bin/mocha $(find test -type f \\( ! -name load* ! -name *.swp \\) | sort)", + "mocha": "./node_modules/.bin/mocha --reporter spec -r dotenv/config --recursive --sort --invert --grep 'Load tests' test", "loadtest": " -r dotenv/config ./node_modules/.bin/mocha test/load.test.js", "coverage": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && istanbul-coveralls", - "stylecheck": "find src/ test/ -name *.js | xargs ./node_modules/.bin/standard" + "lint": "./node_modules/.bin/eslint --format stylish src test" }, "dependencies": { "@feathersjs/authentication": "^2.1.3", "@feathersjs/authentication-client": "^1.0.2", - "@feathersjs/authentication-jwt": "^2.0.0", - "@feathersjs/authentication-local": "^1.1.1", - "@feathersjs/client": "^3.4.4", + "@feathersjs/authentication-jwt": "^2.0.1", + "@feathersjs/authentication-local": "^1.2.1", + "@feathersjs/client": "^3.4.5", "@feathersjs/configuration": "^1.0.2", "@feathersjs/errors": "^3.3.0", "@feathersjs/express": "^1.2.1", - "@feathersjs/feathers": "^3.1.4", + "@feathersjs/feathers": "^3.1.5", "@feathersjs/socketio": "^3.2.1", "body-parser": "^1.18.2", "compression": "^1.7.2", @@ -40,14 +40,14 @@ "d3-array": "^1.2.1", "d3-axis": "^1.0.8", "d3-scale": "^2.0.0", - "d3-scale-chromatic": "^1.2.0", + "d3-scale-chromatic": "^1.3.0", "d3-selection": "^1.3.0", "dotenv": "^5.0.1", "feathers-authentication-hooks": "^0.2.0", - "feathers-hooks-common": "^4.10.0", + "feathers-hooks-common": "^4.11.1", "feathers-mongoose": "^6.1.0", - "jsdom": "^11.9.0", - "mongoose": "^5.0.13", + "jsdom": "^11.10.0", + "mongoose": "^5.1.0", "nodemailer": "^4.6.4", "promise": "^8.0.1", "socket.io-client": "^2.1.0", @@ -56,18 +56,13 @@ }, "devDependencies": { "coveralls": "^2.13.3", - "eslint": "^3.8.1", - "eslint-config-standard": "^6.2.0", - "eslint-config-standard-jsx": "^3.2.0", + "eslint": "^4.19.1", "eslint-plugin-promise": "^3.3.0", - "eslint-plugin-react": "^6.4.1", - "eslint-plugin-standard": "^2.0.1", "faker": "^4.1.0", "istanbul": "^0.4.5", "istanbul-coveralls": "^1.0.3", "mocha": "^5.1.1", "mocha-mongo": "^1.0.0", - "mongodb": "^3.0.7", - "standard": "^7.1.2" + "mongodb": "^3.0.8" } } From 5b7cef67eb37d38236583a3e403878883d18b94e Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 14 May 2018 13:46:01 -0400 Subject: [PATCH 26/35] eslint rules Mostly attempt to choose style rules to match existing style For currently inconsistent styling, choose what I like best that still fits with the existing style. Set errors/warnings level based on whether I think it reveals a potential problem. Further review may warrant changing these settings or designations. --- .eslintrc.yml | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 .eslintrc.yml diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..655ed33 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,180 @@ +--- +env: + node: true + mocha: true +extends: 'eslint:recommended' +parserOptions: + ecmaVersion: 2017 + sourceType: script +rules: + array-bracket-spacing: + - error + - always + - + objectsInArrays: false + arrow-parens: + - error + - as-needed + - + requireForBlockBody: true + arrow-spacing: error + block-spacing: error + brace-style: + - error + - 1tbs # I very much prefer allman -mjl + - + allowSingleLine: true + camelcase: + - error + - + properties: always + comma-dangle: + - error + - only-multiline + comma-spacing: error + comma-style: error + computed-property-spacing: error + consistent-return: error + consistent-this: error + curly: + - error + - multi-line + dot-location: + - error + - property + eqeqeq: error + func-call-spacing: error + generator-star-spacing: + - error + - + before: false + after: true + global-require: error + indent: + - error + - 2 + - + SwitchCase: 1 + FunctionDeclaration: + parameters: first + body: 1 + FunctionExpression: + parameters: first + body: 1 + MemberExpression: off + CallExpression: + arguments: first + ArrayExpression: first + ObjectExpression: first + ImportDeclaration: first + key-spacing: + - error + - + beforeColon: false + afterColon: true + mode: minimum + keyword-spacing: error + linebreak-style: + - error + - unix + max-len: + - warn + - + code: 120 + ignoreStrings: false + ignoreTemplateLiterals: false + ignoreRegExpLiterals: false + ignoreTrailingComments: true + ignoreUrls: true + newline-per-chained-call: + - error + - + ignoreChainWithDepth: 3 + no-console: warn + no-eq-null: error + no-extend-native: error + no-extra-parens: warn + no-fallthrough: error + no-global-assign: error + no-magic-numbers: off + no-multi-assign: error + no-multi-spaces: + - error + - + ignoreEOLComments: true + no-new: error + no-octal-escape: error + no-shadow: error + no-shadow-restricted-names: error + no-trailing-spaces: error + no-unused-vars: warn + no-use-before-define: + - error + - + functions: false + no-useless-call: error + no-useless-return: error + no-var: off # this is probably worth turning on and fixing at some point + no-whitespace-before-property: error + object-curly-newline: off + object-curly-spacing: + - error + - always + object-property-newline: + - error + - + allowAllPropertiesOnSameLine: true + one-var-declaration-per-line: + - error + - always + operator-linebreak: off + prefer-rest-params: error + prefer-spread: error + quote-props: + - error + - as-needed + - + keywords: true + quotes: + - error + - single + - + avoidEscape: true + allowTemplateLiterals: true + rest-spread-spacing: error + semi: + - error + - never + semi-spacing: error + sort-imports: error + space-before-blocks: error + space-before-function-paren: + - error + - + anonymous: always + named: always + asyncArrow: ignore + space-in-parens: error + space-infix-ops: error + space-unary-ops: + - error + - + words: true + nonwords: false + spaced-comment: + - warn + - always + - + line: + markers: + - / + block: + exceptions: + - "*" + balanced: true + symbol-description: error + template-curly-spacing: + - error + - never + valid-jsdoc: warn + yoda: error From eb1e9b26796ad0d34c6abd7f7bf9ba8bbafcd97b Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sun, 29 Apr 2018 17:59:41 -0400 Subject: [PATCH 27/35] added eslint promise plugin rules uncovered more areas that need fixing. --- .eslintrc.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 655ed33..e984181 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -1,8 +1,12 @@ --- +plugins: + - promise env: node: true mocha: true -extends: 'eslint:recommended' +extends: + - eslint:recommended + - plugin:promise/recommended parserOptions: ecmaVersion: 2017 sourceType: script @@ -128,6 +132,7 @@ rules: - error - always operator-linebreak: off + promise/no-nesting: off prefer-rest-params: error prefer-spread: error quote-props: From 9ec9733e3ca05ca9921f40fa77695a267636b282 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sun, 29 Apr 2018 19:33:32 -0400 Subject: [PATCH 28/35] add eslint config for files in test moved mocha env to the test config modified the no-shadow to allow shadowing `done` --- .eslintrc.yml | 1 - test/.eslintrc.yml | 9 +++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 test/.eslintrc.yml diff --git a/.eslintrc.yml b/.eslintrc.yml index e984181..b9486d8 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -3,7 +3,6 @@ plugins: - promise env: node: true - mocha: true extends: - eslint:recommended - plugin:promise/recommended diff --git a/test/.eslintrc.yml b/test/.eslintrc.yml new file mode 100644 index 0000000..8750db5 --- /dev/null +++ b/test/.eslintrc.yml @@ -0,0 +1,9 @@ +--- +env: + mocha: true +rules: + no-shadow: + - error + - + allow: + - done From ec09a23a0d66dac543aad965ee42a2ec4bc53195 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 14 May 2018 14:11:04 -0400 Subject: [PATCH 29/35] Makefile changes to support linting including vim support for running `:make vim-lint` to use the vim quickfix window. --- Makefile | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index d3bd9a3..98a0b74 100644 --- a/Makefile +++ b/Makefile @@ -12,19 +12,25 @@ MOCHA = ./node_modules/.bin/mocha LINT_LOG = logs/lint.log TEST_LOG = logs/test.log +# Add --quiet to only report on errors, not warnings +LINT_OPTIONS = +LINT_FORMAT = stylish .DELETE_ON_ERROR : .PHONY : help all build doc lint test load-test wtftest clean clean-build start-dev help : - @echo "" ; \ - echo "Useful targets in this rhythm-server Makefile:" ; \ - echo "- all : run lint, build, test" ; \ - echo "- build :" ; \ - echo "- lint : run lint over the sources" ; \ - echo "- test : run the mocha (unit) tests" ; \ + @echo "" ; \ + echo "Useful targets in this rhythm-server Makefile:" ; \ + echo "- all : run lint, build, test" ; \ + echo "- build :" ; \ + echo "- lint : run lint over the sources & tests; display results to stdout" ; \ + echo "- lint-log : run lint concise diffable output to $(LINT_LOG)" ; \ + echo "- test : run the mocha (unit) tests" ; \ + echo "- load-test : run the mocha (load) tests" ; \ echo "- wtftest : run the mocha (unit) tests w/ wtfnode to help debug the test run hanging at the end" ; \ - echo "- start-dev : start a dev container for the rhythm-server" ; \ + echo "- start-dev : start a dev container for the rhythm-server" ; \ + echo "- vim-lint : run lint in format consumable by vim quickfix" ; \ echo "" all : lint build test @@ -35,10 +41,11 @@ build : doc : @echo doc would run the compiler: $(COMPILER) -lint : - @echo lint should run the linter which would include checking the coding style: $(LINT) - @echo but for now is just running the style check \"standard\" - find src/ test/ -name *.js | xargs ./node_modules/.bin/standard +lint-log: LINT_OPTIONS = --output-file $(LINT_LOG) +lint-log: LINT_FORMAT = unix +vim-lint: LINT_FORMAT = unix +lint vim-lint lint-log: + $(LINT) $(LINT_OPTIONS) --format $(LINT_FORMAT) src test test : $(MOCHA) --reporter spec -r dotenv/config --recursive --sort --invert --grep 'Load tests' test | tee $(TEST_LOG) From 744a208ef22b5241e7e6c3ace6f9cdbc66d63b89 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 14 May 2018 14:17:35 -0400 Subject: [PATCH 30/35] logs/lint.log added to track lint errors/warnings If we get rid of all of the errors and warnings, this file can be removed from the repository. Meantime this should help prevent new errors/warnings while working on the existing set. --- logs/lint.log | 660 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 660 insertions(+) create mode 100644 logs/lint.log diff --git a/logs/lint.log b/logs/lint.log new file mode 100644 index 0000000..49fee82 --- /dev/null +++ b/logs/lint.log @@ -0,0 +1,660 @@ +/app/src/app.js:19:13: Unexpected chained assignment. [Error/no-multi-assign] +/app/src/app.js:43:8: Unexpected console statement. [Warning/no-console] +/app/src/channels.js:23:24: Expected parentheses around arrow function argument having a body with curly braces. [Error/arrow-parens] +/app/src/events/meetingJoinedEvent.js:9:53: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:15:41: A space is required after '['. [Error/array-bracket-spacing] +/app/src/events/meetingJoinedEvent.js:15:57: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/events/meetingJoinedEvent.js:16:14: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:33:56: A space is required after '['. [Error/array-bracket-spacing] +/app/src/events/meetingJoinedEvent.js:33:69: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/events/meetingJoinedEvent.js:35:18: 'participant' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:38:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/events/meetingJoinedEvent.js:46:19: A space is required after '['. [Error/array-bracket-spacing] +/app/src/events/meetingJoinedEvent.js:46:32: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/events/meetingJoinedEvent.js:50:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/events/meetingJoinedEvent.js:50:17: 'err' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:60:14: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/events/meetingJoinedEvent.js:91:20: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:95:14: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/index.js:8:3: Unexpected console statement. [Warning/no-console] +/app/src/jobs/end-meeting-job.js:23:6: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/jobs/end-meeting-job.js:37:14: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:37:26: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:44:16: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/jobs/end-meeting-job.js:53:14: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:54:1: Expected indentation of 14 spaces but found 8. [Error/indent] +/app/src/jobs/end-meeting-job.js:54:25: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:56:6: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/jobs/end-meeting-job.js:60:12: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:61:1: Expected indentation of 12 spaces but found 6. [Error/indent] +/app/src/jobs/end-meeting-job.js:61:23: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:69:59: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:69:91: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/end-meeting-job.js:74:18: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/jobs/end-meeting-job.js:100:54: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/end-meeting-job.js:101:5: Unexpected console statement. [Warning/no-console] +/app/src/jobs/end-meeting-job.js:102:6: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/jobs/end-meeting-job.js:103:5: Unexpected console statement. [Warning/no-console] +/app/src/jobs/end-meeting-job.js:107:31: Expected to return a value at the end of function. [Error/consistent-return] +/app/src/jobs/turn-job/turn-analytics.js:17:46: 'turns' is already declared in the upper scope. [Error/no-shadow] +/app/src/jobs/turn-job/turn-analytics.js:43:9: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:43:21: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:43:46: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:43:47: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:44:9: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:44:19: A space is required after '{'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:44:42: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:44:43: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:46:16: A space is required after '['. [Error/array-bracket-spacing] +/app/src/jobs/turn-job/turn-analytics.js:46:65: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/jobs/turn-job/turn-analytics.js:48:11: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:53:66: 'key' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:83:52: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:83:53: 'turn' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:84:66: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:84:67: 'newTurn' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:86:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/jobs/turn-job/turn-analytics.js:89:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/jobs/turn-job/turn-analytics.js:91:53: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:91:54: 'newTurn' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:93:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/jobs/turn-job/turn-analytics.js:93:17: 'err' is already declared in the upper scope. [Error/no-shadow] +/app/src/jobs/turn-job/turn-analytics.js:97:6: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/middleware/index.js:11:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/scripts/create-default-user.js:10:3: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/src/scripts/create-default-user.js:20:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/scripts/create-default-user.js:43:6: Expected line break before `.then`. [Error/newline-per-chained-call] +/app/src/scripts/create-default-user.js:53:6: Expected line break before `.then`. [Error/newline-per-chained-call] +/app/src/scripts/create-default-user.js:53:21: 'userOrTrue' is defined but never used. [Warning/no-unused-vars] +/app/src/scripts/create-default-user.js:59:6: Expected line break before `.then`. [Error/newline-per-chained-call] +/app/src/scripts/create-default-user.js:62:92: Expected to return a value at the end of function. [Error/consistent-return] +/app/src/scripts/create-default-user.js:75:6: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/scripts/index.js:4:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/authentication/index.js:9:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/authentication/index.js:30:35: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/authentication/index.js:30:50: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/face/face-model.js:12:16: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/face/face-model.js:12:49: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/face/face-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/face/face-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/face/face-model.js:15:3: Identifier 'face_delta' is not in camel case. [Error/camelcase] +/app/src/services/face/face-model.js:16:3: Identifier 'norm_smile' is not in camel case. [Error/camelcase] +/app/src/services/face/face-model.js:17:3: Identifier 'delta_array' is not in camel case. [Error/camelcase] +/app/src/services/face/face-model.js:17:16: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/face/face-model.js:17:23: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/face/face-model.js:18:3: Identifier 'x_array' is not in camel case. [Error/camelcase] +/app/src/services/face/face-model.js:18:12: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/face/face-model.js:18:19: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/face/face-model.js:19:3: Identifier 'y_array' is not in camel case. [Error/camelcase] +/app/src/services/face/face-model.js:19:12: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/face/face-model.js:19:19: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/face/hooks/index.js:7:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/face/hooks/index.js:7:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/face/hooks/index.js:10:11: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/face/hooks/index.js:10:20: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/face/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/index.js:17:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/index.js:20:13: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/index.js:21:1: Expected indentation of 13 spaces but found 6. [Error/indent] +/app/src/services/index.js:21:7: Identifier 'auto_reconnect' is not in camel case. [Error/camelcase] +/app/src/services/index.js:22:1: Expected indentation of 13 spaces but found 6. [Error/indent] +/app/src/services/index.js:22:18: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/meeting/hooks/activate-meeting-hook.js:10:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/meeting/hooks/activate-meeting-hook.js:15:19: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/meeting/hooks/activate-meeting-hook.js:20:12: 'meetingEvent' is defined but never used. [Warning/no-unused-vars] +/app/src/services/meeting/hooks/add-participant-hook.js:19:63: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/add-participant-hook.js:19:89: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/add-participant-hook.js:23:12: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/services/meeting/hooks/apply_unstructured_query-hook.js:11:48: Expected to return a value at the end of arrow function. [Error/consistent-return] +/app/src/services/meeting/hooks/apply_unstructured_query-hook.js:15:15: Use '===' to compare with null. [Error/no-eq-null] +/app/src/services/meeting/hooks/apply_unstructured_query-hook.js:15:28: Expected '===' and instead saw '=='. [Error/eqeqeq] +/app/src/services/meeting/hooks/compute-turn-hook.js:11:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/meeting/hooks/compute-turn-hook.js:15:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:21:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:51:11: Each then() should return a value or throw [Error/promise/always-return] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:55:88: Unexpected parentheses around single function argument having a body with no curly braces. [Error/arrow-parens] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:57:5: Expected catch() or return [Error/promise/catch-or-return] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:62:13: Each then() should return a value or throw [Error/promise/always-return] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:66:68: 'key' is defined but never used. [Warning/no-unused-vars] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:70:75: 'key' is defined but never used. [Warning/no-unused-vars] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:79:40: There should be no space after '['. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:79:48: There should be no space before ']'. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:81:28: There should be no space after '['. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:81:37: There should be no space before ']'. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:82:72: There should be no space after '['. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:82:88: There should be no space before ']'. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:83:93: There should be no space after '['. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:83:109: There should be no space before ']'. [Error/computed-property-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:92:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:161:14: Expected line break before `.append`. [Error/newline-per-chained-call] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:165:30: 'i' is defined but never used. [Warning/no-unused-vars] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:218:1: Line 218 exceeds the maximum line length of 120. [Warning/max-len] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:219:1: Line 219 exceeds the maximum line length of 120. [Warning/max-len] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:220:1: Line 220 exceeds the maximum line length of 120. [Warning/max-len] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:262:14: Unexpected console statement. [Warning/no-console] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:265:12: Unexpected console statement. [Warning/no-console] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:270:19: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:275:16: 'meetingEvent' is defined but never used. [Warning/no-unused-vars] +/app/src/services/meeting/hooks/index.js:14:13: Identifier 'start_time' is not in camel case. [Error/camelcase] +/app/src/services/meeting/hooks/index.js:24:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:24:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:25:11: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:25:45: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:26:9: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:26:38: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:27:11: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:27:22: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:28:10: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:29:1: Expected indentation of 10 spaces but found 4. [Error/indent] +/app/src/services/meeting/hooks/index.js:30:1: Expected indentation of 10 spaces but found 4. [Error/indent] +/app/src/services/meeting/hooks/index.js:30:23: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:35:11: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:35:50: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:36:11: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:36:27: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:37:10: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:37:49: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:39:9: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/index.js:39:36: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/participants-event-hook.js:9:18: Expected to return a value at the end of function. [Error/consistent-return] +/app/src/services/meeting/hooks/participants-event-hook.js:15:14: 'participantEvent' is defined but never used. [Warning/no-unused-vars] +/app/src/services/meeting/hooks/participants-event-hook.js:18:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/services/meeting/hooks/remove-participants-hook.js:19:12: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/services/meeting/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/meeting/meeting-model.js:11:8: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/meeting/meeting-model.js:11:21: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/meeting/meeting-model.js:12:18: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/meeting/meeting-model.js:12:51: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/meeting/meeting-model.js:14:14: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/meeting/meeting-model.js:14:46: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/meetingEvent/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/meetingEvent/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meetingEvent/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/meetingEvent/meetingEvent-model.js:12:12: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/meetingEvent/meetingEvent-model.js:12:41: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/participant/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/participant/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/participant/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/participant/index.js:12:7: Unquoted reserved word 'default' used as key. [Error/quote-props] +/app/src/services/participant/participant-model.js:16:14: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/participant/participant-model.js:16:43: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/participantEvent/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/participantEvent/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/participantEvent/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/participantEvent/index.js:13:7: Unquoted reserved word 'default' used as key. [Error/quote-props] +/app/src/services/participantEvent/participantEvent-model.js:12:18: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/participantEvent/participantEvent-model.js:12:51: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/participantEvent/participantEvent-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/participantEvent/participantEvent-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/turn/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/turn/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/turn/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/turn/turn-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/turn/turn-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/turn/turn-model.js:20:18: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/turn/turn-model.js:20:51: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/user/hooks/index.js:39:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/user/hooks/index.js:39:57: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/user/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/user/index.js:13:7: Unquoted reserved word 'default' used as key. [Error/quote-props] +/app/src/services/user/user-model.js:9:10: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/user/user-model.js:9:53: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/index.js:10:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/utterance/hooks/index.js:10:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/utterance/hooks/index.js:13:11: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/utterance/hooks/index.js:13:69: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/utterance/hooks/mergeHook.js:10:14: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/mergeHook.js:10:26: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/mergeHook.js:22:9: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/utterance/hooks/mergeHook.js:25:7: Expected catch() or return [Error/promise/catch-or-return] +/app/src/services/utterance/hooks/mergeHook.js:28:15: Each then() should return a value or throw [Error/promise/always-return] +/app/src/services/utterance/hooks/participant-consented-hook.js:9:34: Expected to return a value at the end of arrow function. [Error/consistent-return] +/app/src/services/utterance/hooks/participant-consented-hook.js:10:16: Each then() should return a value or throw [Error/promise/always-return] +/app/src/services/utterance/hooks/participant-consented-hook.js:14:32: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/participant-consented-hook.js:14:33: Unnecessarily quoted property 'created' found. [Error/quote-props] +/app/src/services/utterance/hooks/participant-consented-hook.js:14:49: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/participant-consented-hook.js:16:17: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/services/utterance/hooks/participant-consented-hook.js:18:30: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/participant-consented-hook.js:18:31: Unnecessarily quoted property 'created' found. [Error/quote-props] +/app/src/services/utterance/hooks/participant-consented-hook.js:18:47: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/repeatHook.js:9:3: Expected catch() or return [Error/promise/catch-or-return] +/app/src/services/utterance/hooks/repeatHook.js:12:16: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/repeatHook.js:12:43: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/repeatHook.js:13:16: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/repeatHook.js:13:51: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/repeatHook.js:16:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:17:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:18:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:19:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:20:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:21:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:22:1: Expected indentation of 27 spaces but found 29. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:23:1: Expected indentation of 29 spaces but found 31. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:24:1: Expected indentation of 54 spaces but found 58. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:25:1: Expected indentation of 29 spaces but found 31. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:26:1: Expected indentation of 52 spaces but found 56. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:27:1: Expected indentation of 29 spaces but found 31. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:27:39: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/services/utterance/hooks/repeatHook.js:29:1: Expected indentation of 27 spaces but found 29. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:30:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:31:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:32:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:33:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:34:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:35:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:36:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:37:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:38:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:39:1: Expected indentation of 6 spaces but found 8. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:40:1: Expected indentation of 4 spaces but found 6. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:41:1: Expected indentation of 2 spaces but found 4. [Error/indent] +/app/src/services/utterance/hooks/roomHook.js:3:16: Expected to return a value at the end of function. [Error/consistent-return] +/app/src/services/utterance/hooks/roomHook.js:9:3: Expected catch() or return [Error/promise/catch-or-return] +/app/src/services/utterance/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/utterance/utterance-model.js:12:16: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utterance/utterance-model.js:12:49: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/utterance-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utterance/utterance-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utteranceDistribution/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] +/app/src/services/utteranceDistribution/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/utteranceDistribution/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] +/app/src/services/utteranceDistribution/index.js:13:7: Unquoted reserved word 'default' used as key. [Error/quote-props] +/app/src/services/utteranceDistribution/utteranceDistribution-model.js:12:12: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utteranceDistribution/utteranceDistribution-model.js:12:41: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utteranceDistribution/utteranceDistribution-model.js:14:18: A space is required after '{'. [Error/object-curly-spacing] +/app/src/services/utteranceDistribution/utteranceDistribution-model.js:14:51: A space is required before '}'. [Error/object-curly-spacing] +/app/test/events/index.test.js:18:5: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/events/index.test.js:27:38: 'room' is defined but never used. [Warning/no-unused-vars] +/app/test/events/index.test.js:28:5: Expected catch() or return [Error/promise/catch-or-return] +/app/test/events/index.test.js:28:89: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:34:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:34:18: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/test/events/index.test.js:36:12: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/events/index.test.js:37:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:44:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:48:26: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:49:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:60:19: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:64:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:65:16: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/events/index.test.js:68:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:74:48: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:82:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/events/index.test.js:83:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/meetingEvent.test.js:11:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/meetingEvent.test.js:11:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/meetingEvent.test.js:12:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/meetingEvent.test.js:26:21: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/events/meetingEvent.test.js:32:6: A space is required before '}'. [Error/object-curly-spacing] +/app/test/helpers/index.test.js:15:45: A space is required after '['. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:15:49: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:26:10: A space is required after '{'. [Error/object-curly-spacing] +/app/test/helpers/index.test.js:26:15: A space is required before '}'. [Error/object-curly-spacing] +/app/test/helpers/index.test.js:30:45: A space is required after '['. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:30:49: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:32:10: A space is required after '{'. [Error/object-curly-spacing] +/app/test/helpers/index.test.js:32:15: A space is required before '}'. [Error/object-curly-spacing] +/app/test/helpers/index.test.js:41:10: A space is required after '['. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:41:15: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:45:45: A space is required after '['. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:45:49: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:47:10: A space is required after '['. [Error/array-bracket-spacing] +/app/test/helpers/index.test.js:47:15: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:45:19: A space is required after '['. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:45:68: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:54:22: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:55:59: 'list' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:56:10: Expected catch() or return [Error/promise/catch-or-return] +/app/test/jobs/end-meeting-job.test.js:56:70: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:59:9: Expected line break before `.then`. [Error/newline-per-chained-call] +/app/test/jobs/end-meeting-job.test.js:59:24: 'participants' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:63:8: Function expected no return value. [Error/consistent-return] +/app/test/jobs/end-meeting-job.test.js:69:9: Expected line break before `.then`. [Error/newline-per-chained-call] +/app/test/jobs/end-meeting-job.test.js:69:24: 'utterance' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:70:8: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:71:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:73:9: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/jobs/end-meeting-job.test.js:76:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:98:68: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:100:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:103:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:108:68: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:110:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:113:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:132:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:134:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:135:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/jobs/end-meeting-job.test.js:136:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:144:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:146:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:147:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/jobs/end-meeting-job.test.js:148:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:170:42: A space is required after '['. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:170:69: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:171:26: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:175:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:177:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:182:42: A space is required after '['. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:182:103: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:183:26: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:187:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:189:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:36:17: A space is required after '['. [Error/array-bracket-spacing] +/app/test/jobs/turn-job/index.test.js:36:37: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/jobs/turn-job/index.test.js:46:27: 'n' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:46:44: Unnecessarily quoted property 'timestamp' found. [Error/quote-props] +/app/test/jobs/turn-job/index.test.js:46:62: Unnecessarily quoted property 'vol' found. [Error/quote-props] +/app/test/jobs/turn-job/index.test.js:52:27: 'n' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:52:44: Unnecessarily quoted property 'timestamp' found. [Error/quote-props] +/app/test/jobs/turn-job/index.test.js:52:62: Unnecessarily quoted property 'vol' found. [Error/quote-props] +/app/test/jobs/turn-job/index.test.js:58:27: 'n' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:58:44: Unnecessarily quoted property 'timestamp' found. [Error/quote-props] +/app/test/jobs/turn-job/index.test.js:58:62: Unnecessarily quoted property 'vol' found. [Error/quote-props] +/app/test/jobs/turn-job/index.test.js:64:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/test/jobs/turn-job/index.test.js:67:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/test/jobs/turn-job/index.test.js:72:5: Expected catch() or return [Error/promise/catch-or-return] +/app/test/jobs/turn-job/index.test.js:72:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:77:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:77:16: 'participants' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:77:35: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:78:27: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:84:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:87:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:88:14: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/jobs/turn-job/index.test.js:89:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:94:40: 'done' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:105:40: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:105:41: 'utterances' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:105:58: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:106:52: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:117:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:124:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:125:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/jobs/turn-job/index.test.js:126:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:129:1: Expected indentation of 6 spaces but found 13. [Error/indent] +/app/test/jobs/turn-job/index.test.js:136:16: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:138:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:139:11: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/jobs/turn-job/index.test.js:140:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/load.test.js:20:11: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/load.test.js:43:35: 'n' is defined but never used. [Warning/no-unused-vars] +/app/test/load.test.js:48:13: Identifier 'start_time' is not in camel case. [Error/camelcase] +/app/test/load.test.js:49:13: Identifier 'end_time' is not in camel case. [Error/camelcase] +/app/test/load.test.js:51:13: Identifier 'face_delta' is not in camel case. [Error/camelcase] +/app/test/load.test.js:52:13: Identifier 'delta_array' is not in camel case. [Error/camelcase] +/app/test/load.test.js:52:39: 'n' is defined but never used. [Warning/no-unused-vars] +/app/test/load.test.js:52:54: A space is required after '['. [Error/array-bracket-spacing] +/app/test/load.test.js:52:77: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/load.test.js:69:7: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/load.test.js:91:20: 'i' is already declared in the upper scope. [Error/no-shadow] +/app/test/services/face/index.test.js:18:5: Identifier 'y_array' is not in camel case. [Error/camelcase] +/app/test/services/face/index.test.js:19:5: Identifier 'x_array' is not in camel case. [Error/camelcase] +/app/test/services/face/index.test.js:20:5: Identifier 'delta_array' is not in camel case. [Error/camelcase] +/app/test/services/face/index.test.js:34:5: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/services/face/index.test.js:44:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/face/index.test.js:47:26: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/face/index.test.js:48:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/face/index.test.js:52:44: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/face/index.test.js:55:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/face/index.test.js:56:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/face/index.test.js:56:14: Unexpected parentheses around single function argument having a body with no curly braces. [Error/arrow-parens] +/app/test/services/face/index.test.js:56:23: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:22:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:23:7: Expected catch() or return [Error/promise/catch-or-return] +/app/test/services/meeting/activate-meeting-hook.test.js:24:19: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:26:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:28:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:34:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:34:14: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/activate-meeting-hook.test.js:35:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:36:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/activate-meeting-hook.test.js:37:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:43:21: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/activate-meeting-hook.test.js:43:26: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/activate-meeting-hook.test.js:44:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:47:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:48:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/activate-meeting-hook.test.js:49:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:19:19: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:19:30: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:30:16: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/add-participants-hook.test.js:38:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:38:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:39:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:43:26: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:45:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:47:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:54:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:54:14: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/add-participants-hook.test.js:55:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:56:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/add-participants-hook.test.js:57:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:63:7: Identifier 'add_participant' is not in camel case. [Error/camelcase] +/app/test/services/meeting/add-participants-hook.test.js:64:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:66:46: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:66:63: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:67:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:68:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/add-participants-hook.test.js:69:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:75:21: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:75:44: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:76:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:77:46: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:77:69: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/add-participants-hook.test.js:78:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:79:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/add-participants-hook.test.js:80:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:40:19: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/deactivate-meeting-hook-test.js:40:93: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/deactivate-meeting-hook-test.js:69:59: 'list' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/deactivate-meeting-hook-test.js:72:55: 'list' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/deactivate-meeting-hook-test.js:78:9: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/deactivate-meeting-hook-test.js:87:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:87:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:88:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:92:64: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:94:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:96:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:103:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:107:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:108:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/deactivate-meeting-hook-test.js:109:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:116:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:116:23: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/deactivate-meeting-hook-test.js:118:25: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/deactivate-meeting-hook-test.js:118:44: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/deactivate-meeting-hook-test.js:119:25: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/deactivate-meeting-hook-test.js:119:38: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/deactivate-meeting-hook-test.js:121:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:123:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:124:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/deactivate-meeting-hook-test.js:125:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:127:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/deactivate-meeting-hook-test.js:128:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/index.test.js:12:19: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/index.test.js:12:36: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/index.test.js:17:3: Unexpected console statement. [Warning/no-console] +/app/test/services/meeting/index.test.js:26:14: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/index.test.js:28:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/index.test.js:29:11: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/index.test.js:30:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:12:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:12:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:13:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:33:11: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:33:24: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:42:11: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:42:36: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:47:14: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:50:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:51:11: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/meeting-meta.test.js:52:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:58:14: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:61:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:62:11: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/meeting-meta.test.js:63:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:68:34: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:68:42: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:68:49: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:68:62: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:68:63: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:68:64: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:69:14: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:73:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:74:11: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/meeting-meta.test.js:75:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:80:5: Expected catch() or return [Error/promise/catch-or-return] +/app/test/services/meeting/meeting-meta.test.js:80:45: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:80:55: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/meeting-meta.test.js:81:36: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:81:44: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:81:51: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:81:80: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:81:81: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:81:82: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:82:14: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:84:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:85:11: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/meeting-meta.test.js:86:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:92:34: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:92:42: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:92:49: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:92:66: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:92:67: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:92:68: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/meeting-meta.test.js:93:14: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:95:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:96:11: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/meeting-meta.test.js:97:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participant-changed.test.js:11:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participant-changed.test.js:11:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participant-changed.test.js:12:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participant-changed.test.js:19:21: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:19:38: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:22:27: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:22:38: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:31:45: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participant-changed.test.js:31:55: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/participant-changed.test.js:34:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participant-changed.test.js:34:25: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/participant-changed.test.js:34:25: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/test/services/meeting/participant-changed.test.js:36:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participant-changed.test.js:39:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participant-changed.test.js:47:21: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:47:32: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:50:27: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:50:44: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/participant-changed.test.js:59:45: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participant-changed.test.js:59:55: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/participant-changed.test.js:62:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participant-changed.test.js:62:25: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/test/services/meeting/participant-changed.test.js:62:25: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/participant-changed.test.js:65:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participant-changed.test.js:68:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:29:16: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/participants-event-hook.test.js:36:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:36:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:37:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:42:26: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:44:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:46:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:54:16: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/participants-event-hook.test.js:54:30: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/participants-event-hook.test.js:56:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:59:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:60:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/participants-event-hook.test.js:61:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:68:21: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/participants-event-hook.test.js:68:32: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/participants-event-hook.test.js:69:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:69:23: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/participants-event-hook.test.js:74:20: A space is required after '{'. [Error/object-curly-spacing] +/app/test/services/meeting/participants-event-hook.test.js:74:34: A space is required before '}'. [Error/object-curly-spacing] +/app/test/services/meeting/participants-event-hook.test.js:76:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:81:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:82:12: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/participants-event-hook.test.js:83:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:86:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/participants-event-hook.test.js:87:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:19:19: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:19:36: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:30:16: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/remove-participants-hook.test.js:37:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:37:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:38:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:44:26: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:46:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:48:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:55:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:55:14: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/remove-participants-hook.test.js:56:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:57:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/remove-participants-hook.test.js:58:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:64:7: Identifier 'remove_participants' is not in camel case. [Error/camelcase] +/app/test/services/meeting/remove-participants-hook.test.js:64:28: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:64:39: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:65:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:67:46: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:67:51: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:68:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:69:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/remove-participants-hook.test.js:70:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:76:21: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:76:44: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:77:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:78:46: A space is required after '['. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:78:69: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/services/meeting/remove-participants-hook.test.js:79:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:80:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/meeting/remove-participants-hook.test.js:81:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:23:11: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/participant/index.test.js:25:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:26:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/participant/index.test.js:27:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:34:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/participant/index.test.js:36:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:37:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/participant/index.test.js:38:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:21:5: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/services/utterance/index.test.js:57:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:60:26: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:61:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:65:5: Expected catch() or return [Error/promise/catch-or-return] +/app/test/services/utterance/index.test.js:65:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:65:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:74:58: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:80:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:81:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/utterance/index.test.js:82:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:87:58: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:93:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:94:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/utterance/index.test.js:95:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:100:58: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:105:9: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:113:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:114:10: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/utterance/index.test.js:115:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:117:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/services/utterance/index.test.js:118:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:19:3: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/shared/global-before.js:43:10: Avoid creating new promises. [Warning/promise/avoid-new] +/app/test/shared/global-before.js:44:5: Expected catch() or return [Error/promise/catch-or-return] +/app/test/shared/global-before.js:44:30: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:53:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:53:14: 'user' is already declared in the upper scope. [Error/no-shadow] +/app/test/shared/global-before.js:57:8: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/shared/global-before.js:79:12: 'res' is defined but never used. [Warning/no-unused-vars] +/app/test/shared/global-before.js:87:23: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:89:19: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:90:20: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/test/shared/global-before.js:91:19: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:97:23: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:97:31: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:97:58: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] + +654 problems +---- Added manually (from the console report) + +✖ 654 problems (475 errors, 179 warnings) + 332 errors, 12 warnings potentially fixable with the `--fix` option. From 21c05299a8f05d0cf2e3d309eec8f8b5b8b56c55 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sun, 29 Apr 2018 16:37:10 -0400 Subject: [PATCH 31/35] source file changes to match lint rules - remaining errors are no-shadow and consistent-return and changes will be bigger to fix them. - added eslint exceptions to set app = this (consistent-this) because feathers calls those functions w/ the feathers app as the context. source file changes to match lint rules --- src/app.js | 5 +- src/channels.js | 2 +- src/events/meetingJoinedEvent.js | 100 +++++++------- src/jobs/end-meeting-job.js | 97 +++++++------- src/jobs/turn-job/turn-analytics.js | 124 ++++++++++-------- src/middleware/index.js | 2 +- src/scripts/create-default-user.js | 84 ++++++------ src/scripts/index.js | 2 +- src/services/authentication/index.js | 4 +- src/services/face/face-model.js | 12 +- src/services/face/hooks/index.js | 4 +- src/services/face/index.js | 2 +- src/services/index.js | 10 +- .../meeting/hooks/add-participant-hook.js | 28 ++-- .../hooks/apply_unstructured_query-hook.js | 2 +- .../meeting/hooks/deactivate-meeting-hook.js | 15 ++- src/services/meeting/hooks/index.js | 26 ++-- .../meeting/hooks/participants-event-hook.js | 25 ++-- .../meeting/hooks/remove-participants-hook.js | 24 ++-- src/services/meeting/index.js | 2 +- src/services/meeting/meeting-model.js | 6 +- src/services/meetingEvent/hooks/index.js | 2 +- src/services/meetingEvent/index.js | 2 +- .../meetingEvent/meetingEvent-model.js | 2 +- src/services/participant/hooks/index.js | 2 +- src/services/participant/index.js | 4 +- src/services/participant/participant-model.js | 2 +- src/services/participantEvent/hooks/index.js | 2 +- src/services/participantEvent/index.js | 4 +- .../participantEvent-model.js | 4 +- src/services/turn/hooks/index.js | 2 +- src/services/turn/index.js | 2 +- src/services/turn/turn-model.js | 4 +- src/services/user/hooks/index.js | 2 +- src/services/user/index.js | 4 +- src/services/user/user-model.js | 2 +- src/services/utterance/hooks/index.js | 4 +- src/services/utterance/hooks/mergeHook.js | 2 +- .../hooks/participant-consented-hook.js | 26 ++-- src/services/utterance/hooks/repeatHook.js | 15 ++- src/services/utterance/index.js | 2 +- src/services/utterance/utterance-model.js | 4 +- .../utteranceDistribution/hooks/index.js | 2 +- src/services/utteranceDistribution/index.js | 4 +- .../utteranceDistribution-model.js | 4 +- 45 files changed, 367 insertions(+), 312 deletions(-) diff --git a/src/app.js b/src/app.js index 273de96..3f08c9e 100644 --- a/src/app.js +++ b/src/app.js @@ -16,7 +16,8 @@ const scripts = require('./scripts') const channels = require('./channels') // Create an Express compatible Feathers application -const app = module.exports = express(feathers()) +const app = express(feathers()) +module.exports = app app.configure(configuration(path.join(__dirname, '..'))) @@ -36,7 +37,7 @@ app.use(compress()) 'flashsocket', 'htmlfile', 'xhr-polling', - 'jsonp-polling' + 'jsonp-polling', ]) io.on('connection', (socket) => { diff --git a/src/channels.js b/src/channels.js index 798c6cb..f255b38 100644 --- a/src/channels.js +++ b/src/channels.js @@ -20,7 +20,7 @@ module.exports = function (app) { return } - app.on('connection', connection => { + app.on('connection', (connection) => { // On a new real-time connection, add it to the anonymous channel app.channel('anonymous').join(connection) }) diff --git a/src/events/meetingJoinedEvent.js b/src/events/meetingJoinedEvent.js index eaf2db3..3b6fabd 100644 --- a/src/events/meetingJoinedEvent.js +++ b/src/events/meetingJoinedEvent.js @@ -6,18 +6,20 @@ const winston = require('winston') const _ = require('underscore') function addParticipantToMeeting (app, participant, meeting) { - return app.service('meetings').get(meeting).then((meeting) => { - // now patch the meeting to include the participant - winston.log('info', 'patching meeting: ', meeting) - winston.log('info', 'adding participant to meeting: ', participant._id) - var parts = meeting.participants || [] - return app.service('meetings').patch(meeting, { - participants: _.uniq(parts.concat([participant._id])) - }).then((meeting) => { - winston.log('info', 'updated meeting with participants: ', meeting) - return meeting + return app.service('meetings') + .get(meeting) + .then((meeting) => { + // now patch the meeting to include the participant + winston.log('info', 'patching meeting: ', meeting) + winston.log('info', 'adding participant to meeting: ', participant._id) + var parts = meeting.participants || [] + return app.service('meetings') + .patch(meeting, { participants: _.uniq(parts.concat([ participant._id ])) }) + .then((meeting) => { + winston.log('info', 'updated meeting with participants: ', meeting) + return meeting + }) }) - }) } function getOrCreateParticipant (obj) { @@ -30,27 +32,32 @@ function getOrCreateParticipant (obj) { let email = participant.email || data.participant.email return app.service('participants') .patch(participant._id, { - meetings: _.uniq(participant.meetings.concat([data.meeting])), + meetings: _.uniq(participant.meetings.concat([ data.meeting ])), email: email - }).then((participant) => { + }) + .then((participant) => { return addParticipantToMeeting(app, participant, data.meeting) }) - }).catch((err) => { + }) + .catch((err) => { winston.log('info', 'creating a new participant...', err) - return app.service('participants').create({ - _id: data.participant, - name: data.name, - email: data.email, - consent: data.consent || false, - consentDate: data.consentDate || null, - meetings: [data.meeting] - }).then((participant) => { - winston.log('info', 'created a new participant', participant._id) - return addParticipantToMeeting(app, participant, data.meeting) - }).catch((err) => { - winston.log('info', 'couldnt make a new participant', err) - return err - }) + return app.service('participants') + .create({ + _id: data.participant, + name: data.name, + email: data.email, + consent: data.consent || false, + consentDate: data.consentDate || null, + meetings: [ data.meeting ] + }) + .then((participant) => { + winston.log('info', 'created a new participant', participant._id) + return addParticipantToMeeting(app, participant, data.meeting) + }) + .catch((err) => { + winston.log('info', 'couldnt make a new participant', err) + return err + }) }) } @@ -79,24 +86,27 @@ function getOrCreateMeeting (data, app) { winston.log('info', 'no meeting found', data) winston.log('info', 'creating meeting') // get the number of meetings for this group - return app.service('meetings').find({ query: { room: data.room } }).then((mtgs) => { - // generate an id for the new meeting based on room - let id = data.room + '-' + (mtgs.length + 1) - return app.service('meetings').create({ - _id: id, - room: data.room, - active: true, - meetingUrl: data.meetingUrl, - meta: JSON.parse(meta) - }).then((meeting) => { - winston.log('info', 'new meeting created', meeting._id) - data.meeting = meeting._id - return { data: data, app: app } - }).catch((err) => { - winston.log('error', 'couldnt create new meeting', err) - return err + return app.service('meetings').find({ query: { room: data.room } }) + .then((mtgs) => { + // generate an id for the new meeting based on room + let id = data.room + '-' + (mtgs.length + 1) + return app.service('meetings').create({ + _id: id, + room: data.room, + active: true, + meetingUrl: data.meetingUrl, + meta: JSON.parse(meta) + }) + .then((meeting) => { + winston.log('info', 'new meeting created', meeting._id) + data.meeting = meeting._id + return { data: data, app: app } + }) + .catch((err) => { + winston.log('error', 'couldnt create new meeting', err) + return err + }) }) - }) } }) } diff --git a/src/jobs/end-meeting-job.js b/src/jobs/end-meeting-job.js index 08dd1f0..8864f04 100644 --- a/src/jobs/end-meeting-job.js +++ b/src/jobs/end-meeting-job.js @@ -14,16 +14,19 @@ var scope = {} // returns a list of all active meetings, or false if an error occurred. var getActiveMeetings = function () { - return scope.app.service('meetings').find({ - query: { - active: true - } - }).then((meetings) => { - return meetings - }).catch((err) => { - winston.log('error', 'Couldnt find any active meetings:', err) - return [] - }) + return scope.app.service('meetings') + .find({ + query: { + active: true + } + }) + .then((meetings) => { + return meetings + }) + .catch((err) => { + winston.log('error', 'Couldnt find any active meetings:', err) + return [] + }) } // returns an object that indicates whether the given meeting should be ended. @@ -31,47 +34,50 @@ var isMeetingEnded = function (meeting, passedApp) { // TODO make this return true/false instead of an object winston.log('info', 'isMeetingEnded', meeting) var app = passedApp === undefined ? scope.app : passedApp - return app.service('utterances').find({ - query: { - meeting: meeting, - $sort: {endTime: -1}, - $limit: 1 - } - }).then((lastUtterances) => { - var waitFor - if (lastUtterances.length === 0) { - waitFor = app.service('meetings').get(meeting).then((meetingObject) => { - return (new Date().getTime() - new Date(meetingObject.startTime).getTime()) + return app.service('utterances') + .find({ + query: { + meeting: meeting, + $sort: { endTime: -1 }, + $limit: 1 + } + }) + .then((lastUtterances) => { + var waitFor + if (lastUtterances.length === 0) { + waitFor = app.service('meetings').get(meeting).then((meetingObject) => { + return new Date().getTime() - new Date(meetingObject.startTime).getTime() + }) + } else { + waitFor = Promise.resolve(new Date().getTime() - new Date(lastUtterances[0].endTime).getTime()) + } + return waitFor.then((elapsedTime) => { + var meetingShouldEnd = elapsedTime > MAX_TIME_SINCE_LAST_UTTERANCE + winston.log('info', 'should end?:', elapsedTime, MAX_TIME_SINCE_LAST_UTTERANCE) + winston.log('info', 'should end?:', elapsedTime > MAX_TIME_SINCE_LAST_UTTERANCE) + return { meetingShouldEnd: meetingShouldEnd, + meeting: meeting } }) - } else { - waitFor = Promise.resolve(new Date().getTime() - new Date(lastUtterances[0].endTime).getTime()) - } - return waitFor.then((elapsedTime) => { - var meetingShouldEnd = elapsedTime > MAX_TIME_SINCE_LAST_UTTERANCE - winston.log('info', 'should end?:', elapsedTime, MAX_TIME_SINCE_LAST_UTTERANCE) - winston.log('info', 'should end?:', elapsedTime > MAX_TIME_SINCE_LAST_UTTERANCE) - return {meetingShouldEnd: meetingShouldEnd, - meeting: meeting} }) - }).catch((err) => { - winston.log('error', 'Couldnt find last utterance:', err) - // TODO maybe this is why meetings end if you havent spoken yet - // despite the requisite elapsed time not passing - return {meetingShouldEnd: true, - meeting: meeting} - }) + .catch((err) => { + winston.log('error', 'Couldnt find last utterance:', err) + // TODO maybe this is why meetings end if you havent spoken yet + // despite the requisite elapsed time not passing + return { meetingShouldEnd: true, meeting: meeting } + }) } var maybeEndMeeting = function (context, passedApp) { var app = passedApp === undefined ? scope.app : passedApp if (context.meetingShouldEnd) { winston.log('info', 'meetingShouldEnd', JSON.stringify(context.meeting)) - return app.service('meetings').patch(context.meeting, {participants: [], active: false}) + return app.service('meetings').patch(context.meeting, { participants: [], active: false }) .then((patchedMeeting) => { winston.log('info', 'patched meeting w/ id: ', patchedMeeting._id) return patchedMeeting.participants.length === 0 && patchedMeeting.active === false - }).catch((err) => { + }) + .catch((err) => { winston.log('info', 'Couldnt patch meeting!', err) return false }) @@ -97,11 +103,14 @@ var endInactiveMeetings = function (meetings, passedApp) { var monitorMeetings = function () { // not sure that this promise chain works the way I'd like it to winston.log('info', '[end-meeting-job] checking all meetings...') - getActiveMeetings().then(endInactiveMeetings).then((endedMeetings) => { - console.log('info', '(maybe) ended meetings:', endedMeetings) - }).catch((err) => { - console.log('info', 'oops:', err) - }) + getActiveMeetings() + .then(endInactiveMeetings) + .then((endedMeetings) => { + console.log('info', '(maybe) ended meetings:', endedMeetings) + }) + .catch((err) => { + console.log('info', 'oops:', err) + }) } var startMonitoringMeetings = function (app) { diff --git a/src/jobs/turn-job/turn-analytics.js b/src/jobs/turn-job/turn-analytics.js index 5a7cb50..3440769 100644 --- a/src/jobs/turn-job/turn-analytics.js +++ b/src/jobs/turn-job/turn-analytics.js @@ -34,69 +34,81 @@ function computeTurns (app, meeting, from, to) { to = new Date(to) winston.log('info', 'getting turn data for hangout', meeting._id, from, to) - app.service('utterances').find({ - query: { - meeting: meeting._id, - // TODO: date stuff here isn't working all of a sudden. - // should be able to do meeting AND start time. - $and: [ - {startTime: {$gte: from.toISOString()}}, - {endTime: {$lte: to.toISOString()}} - ], - $select: ['participant', 'meeting', 'startTime', 'endTime'] - } - }).then((utterances) => { - // {'participant': [utteranceObj, ...]} - var participantUtterances = _.groupBy(utterances, 'participant') - - // {'participant': # of utterances} - var numUtterances = _.mapObject(participantUtterances, (val, key) => { - return val.length + app.service('utterances') + .find({ + query: { + meeting: meeting._id, + // TODO: date stuff here isn't working all of a sudden. + // should be able to do meeting AND start time. + $and: [ + { startTime: { $gte: from.toISOString() } }, + { endTime: { $lte: to.toISOString() } } + ], + $select: [ 'participant', 'meeting', 'startTime', 'endTime' ] + } }) + .then((utterances) => { + // {'participant': [utteranceObj, ...]} + var participantUtterances = _.groupBy(utterances, 'participant') - // total number of utterances by all participants - var totalUtterances = _.reduce(_.pairs(numUtterances), (memo, val) => { - return memo + val[1] - }, 0) - - // distribution / "share" of utterances by participant - var utteranceDistribution = [] - _.mapObject(numUtterances, (val, key) => { - utteranceDistribution.push({ - participant: key, - turns: val / totalUtterances // percentage of your total number of utterances relative to convo's total utterances. viz uses this to measure "contributions" to conversation with the ball + // {'participant': # of utterances} + var numUtterances = _.mapObject(participantUtterances, (val, key) => { + return val.length }) - }) - var transitions = getTurnTransitions(utterances) + // total number of utterances by all participants + var totalUtterances = _.reduce(_.pairs(numUtterances), (memo, val) => { + return memo + val[1] + }, 0) - var turnObj = { - _id: meeting._id, - meeting: meeting._id, - room: meeting.room, - turns: utteranceDistribution, // patch instead of update - transitions: transitions, // patch instead of update - timestamp: new Date(), - from: from, // update, to make meetings.turn be the most updated turn in the last 5 min of that meeting (this is computed every 5 seconds) - to: to // update - } - app.service('turns').get(meeting._id, {}).then((turn) => { - app.service('turns').update(meeting._id, turnObj, {}).then((newTurn) => { - winston.log('info', 'updated turns for meeting:', meeting._id) - }).catch((err) => { - winston.log('error', 'could not save turns for meeting:', turnObj, 'error:', err) - }) - }).catch((err) => { - winston.log('error', 'could not get turn', err) - app.service('turns').create(turnObj, {}).then((newTurn) => { - winston.log('info', 'created turns for meeting:', meeting._id) - }).catch((err) => { - winston.log('error', 'could not create turns for meeting:', turnObj, 'error:', err) + // distribution / "share" of utterances by participant + var utteranceDistribution = [] + _.mapObject(numUtterances, (val, key) => { + utteranceDistribution.push({ + participant: key, + turns: val / totalUtterances // percentage of your total number of utterances relative to convo's total utterances. viz uses this to measure "contributions" to conversation with the ball + }) }) + + var transitions = getTurnTransitions(utterances) + + var turnObj = { + _id: meeting._id, + meeting: meeting._id, + room: meeting.room, + turns: utteranceDistribution, // patch instead of update + transitions: transitions, // patch instead of update + timestamp: new Date(), + from: from, // update, to make meetings.turn be the most updated turn in the last 5 min of that meeting (this is computed every 5 seconds) + to: to // update + } + app.service('turns') + .get(meeting._id, {}) + .then((turn) => { + app.service('turns') + .update(meeting._id, turnObj, {}) + .then((newTurn) => { + winston.log('info', 'updated turns for meeting:', meeting._id) + }) + .catch((err) => { + winston.log('error', 'could not save turns for meeting:', turnObj, 'error:', err) + }) + }) + .catch((err) => { + winston.log('error', 'could not get turn', err) + app.service('turns') + .create(turnObj, {}) + .then((newTurn) => { + winston.log('info', 'created turns for meeting:', meeting._id) + }) + .catch((err) => { + winston.log('error', 'could not create turns for meeting:', turnObj, 'error:', err) + }) + }) + }) + .catch((err) => { + winston.log('error', 'couldnt get utterances...', err) }) - }).catch((err) => { - winston.log('error', 'couldnt get utterances...', err) - }) } module.exports = { diff --git a/src/middleware/index.js b/src/middleware/index.js index 72ef066..1796ccf 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -8,7 +8,7 @@ module.exports = function () { // Add your custom middleware here. Remember, that // just like Express the order matters, so error // handling middleware should go last. - const app = this + const app = this // eslint-disable-line consistent-this app.use(notFound()) app.use(logger(app)) diff --git a/src/scripts/create-default-user.js b/src/scripts/create-default-user.js index 13cd93c..39ee21b 100644 --- a/src/scripts/create-default-user.js +++ b/src/scripts/create-default-user.js @@ -7,17 +7,17 @@ const socketio = require('@feathersjs/socketio-client') const auth = require('@feathersjs/authentication-client') var socket = io.connect('http://localhost:3000', { - 'transports': [ + transports: [ 'websocket', 'flashsocket', 'jsonp-polling', 'xhr-polling', - 'htmlfile' + 'htmlfile', ] }) module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this winston.info('in create default user') // TODO: this is now in 3 places, it really should be somewhere common like a config file -mjl 2018-04-24 @@ -35,46 +35,52 @@ module.exports = function () { const DEFAULT_USER_EMAIL = process.env.DEFAULT_USER_EMAIL const DEFAULT_USER_PASSWORD = process.env.DEFAULT_USER_PASSWORD - return app.service('users').find({ - email: DEFAULT_USER_EMAIL - }).then(function (users) { - winston.debug(`found user w/ email: ${DEFAULT_USER_EMAIL}: ${JSON.stringify(users.data)}`) - return users.data.length > 0 - }).then(function (foundUser) { - winston.debug(`found user ${foundUser}`) - if (!foundUser) { - return app.service('users').create({ + return app.service('users') + .find({ + email: DEFAULT_USER_EMAIL + }) + .then(function (users) { + winston.debug(`found user w/ email: ${DEFAULT_USER_EMAIL}: ${JSON.stringify(users.data)}`) + return users.data.length > 0 + }) + .then(function (foundUser) { + winston.debug(`found user ${foundUser}`) + if (!foundUser) { + return app.service('users').create({ + email: DEFAULT_USER_EMAIL, + password: DEFAULT_USER_PASSWORD + }) + } else { + return true + } + }) + .then(function (userOrTrue) { + return client.authenticate({ + strategy: 'local', email: DEFAULT_USER_EMAIL, password: DEFAULT_USER_PASSWORD }) - } else { - return true - } - }).then(function (userOrTrue) { - return client.authenticate({ - strategy: 'local', - email: DEFAULT_USER_EMAIL, - password: DEFAULT_USER_PASSWORD }) - }).then(function (authResult) { - winston.debug(`client authentication: ${JSON.stringify(authResult)}`) - if (authResult !== undefined) { - fs.writeFile(path.join(__dirname, 'DEFAULT_USER_TOKEN.txt'), authResult.accessToken, function (err) { - if (err) { - winston.error('error saving user token', err) - return false - } - }) - socket.disconnect() - return true - } else { - winston.error('auth error') + .then(function (authResult) { + winston.debug(`client authentication: ${JSON.stringify(authResult)}`) + if (authResult !== undefined) { + fs.writeFile(path.join(__dirname, 'DEFAULT_USER_TOKEN.txt'), authResult.accessToken, function (err) { + if (err) { + winston.error('error saving user token', err) + return false + } + }) + socket.disconnect() + return true + } else { + winston.error('auth error') + socket.disconnect() + return false + } + }) + .catch(function (err) { + winston.error('could not connect to app', err) socket.disconnect() return false - } - }).catch(function (err) { - winston.error('could not connect to app', err) - socket.disconnect() - return false - }) + }) } diff --git a/src/scripts/index.js b/src/scripts/index.js index 87ba372..dd7a244 100644 --- a/src/scripts/index.js +++ b/src/scripts/index.js @@ -1,6 +1,6 @@ const createDefaultUser = require('./create-default-user') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this app.configure(createDefaultUser) } diff --git a/src/services/authentication/index.js b/src/services/authentication/index.js index a0a6eae..afb59e3 100644 --- a/src/services/authentication/index.js +++ b/src/services/authentication/index.js @@ -6,7 +6,7 @@ const local = require('@feathersjs/authentication-local') const jwt = require('@feathersjs/authentication-jwt') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this let config = { jwt: {}, @@ -27,7 +27,7 @@ module.exports = function () { app.service('authentication').hooks({ before: { create: [ - auth.hooks.authenticate(['jwt', 'local']) + auth.hooks.authenticate([ 'jwt', 'local' ]) ] } }) diff --git a/src/services/face/face-model.js b/src/services/face/face-model.js index c53e8cd..29426a8 100644 --- a/src/services/face/face-model.js +++ b/src/services/face/face-model.js @@ -8,16 +8,18 @@ const mongoose = require('mongoose') const Schema = mongoose.Schema +/* eslint-disable camelcase */ const faceSchema = new Schema({ - participant: {type: String, ref: 'Participant'}, - meeting: {type: String, ref: 'Meeting'}, + participant: { type: String, ref: 'Participant' }, + meeting: { type: String, ref: 'Meeting' }, timestamp: Date, face_delta: Number, norm_smile: Number, - delta_array: [Number], - x_array: [Number], - y_array: [Number] + delta_array: [ Number ], + x_array: [ Number ], + y_array: [ Number ] }) +/* eslint-enable camelcase */ const faceModel = mongoose.model('face', faceSchema) diff --git a/src/services/face/hooks/index.js b/src/services/face/hooks/index.js index a88b888..4b67cd4 100644 --- a/src/services/face/hooks/index.js +++ b/src/services/face/hooks/index.js @@ -4,10 +4,10 @@ const auth = require('@feathersjs/authentication') const roomHook = require('../../../hooks/roomHook').hook exports.before = { - all: [auth.hooks.authenticate('jwt')], + all: [ auth.hooks.authenticate('jwt') ], find: [], get: [], - create: [roomHook], + create: [ roomHook ], update: [], patch: [], remove: [] diff --git a/src/services/face/index.js b/src/services/face/index.js index 19f774a..b4c89a0 100644 --- a/src/services/face/index.js +++ b/src/services/face/index.js @@ -5,7 +5,7 @@ const face = require('./face-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: face diff --git a/src/services/index.js b/src/services/index.js index 10e8aed..6c470e4 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -14,13 +14,15 @@ const face = require('./face') const mongoose = require('mongoose') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this + /* eslint-disable camelcase */ let options = { - server: {sslCA: process.env.MONGO_CERT, - auto_reconnect: true, - poolSize: 5} + server: { sslCA: process.env.MONGO_CERT, + auto_reconnect: true, + poolSize: 5 } } + /* eslint-enable camelcase */ mongoose.connect(process.env.MONGODB_URI, options) mongoose.Promise = global.Promise diff --git a/src/services/meeting/hooks/add-participant-hook.js b/src/services/meeting/hooks/add-participant-hook.js index 2d732a0..89724cb 100644 --- a/src/services/meeting/hooks/add-participant-hook.js +++ b/src/services/meeting/hooks/add-participant-hook.js @@ -10,20 +10,22 @@ const winston = require('winston') module.exports = function (hook) { if (hook.data.add_participant) { winston.log('info', 'adding participant:', hook.data.add_participant) - return hook.app.service('meetings').get(hook.id) - .then((meeting) => { - var oldParticipants = meeting.participants - if (_.contains(oldParticipants, hook.data.add_participant)) { - return hook - } else { - hook.data.participants = _.union(oldParticipants, [hook.data.add_participant]) - delete hook.data.add_participant - return hook - } - }).catch((err) => { - winston.log('error', 'couldnt add given participant', err) + return hook.app.service('meetings') + .get(hook.id) + .then((meeting) => { + var oldParticipants = meeting.participants + if (_.contains(oldParticipants, hook.data.add_participant)) { return hook - }) + } else { + hook.data.participants = _.union(oldParticipants, [ hook.data.add_participant ]) + delete hook.data.add_participant + return hook + } + }) + .catch((err) => { + winston.log('error', 'couldnt add given participant', err) + return hook + }) } else { winston.log('info', 'not adding participant:') return hook diff --git a/src/services/meeting/hooks/apply_unstructured_query-hook.js b/src/services/meeting/hooks/apply_unstructured_query-hook.js index f1fafd3..87f4db3 100644 --- a/src/services/meeting/hooks/apply_unstructured_query-hook.js +++ b/src/services/meeting/hooks/apply_unstructured_query-hook.js @@ -12,7 +12,7 @@ function applyUnstructuredQuery (hook) { if (current.meta !== undefined) { var match = true _.each(_.keys(hook.params.meta), function (key) { - if (current.meta == null || current.meta[key] !== decodeURI(hook.params.meta[key])) { + if (current.meta === null || current.meta[key] !== decodeURI(hook.params.meta[key])) { match = false } }) diff --git a/src/services/meeting/hooks/deactivate-meeting-hook.js b/src/services/meeting/hooks/deactivate-meeting-hook.js index 4f34c01..c70f366 100644 --- a/src/services/meeting/hooks/deactivate-meeting-hook.js +++ b/src/services/meeting/hooks/deactivate-meeting-hook.js @@ -52,7 +52,7 @@ function getReportData (hook, callback) { var validParticipants = _.filter(participants.data, (participant) => { return _.contains(participant.meetings, meetingId) }) - winston.log('info', 'generating report for participants', _.map(validParticipants, (part) => part._id)) + winston.log('info', 'generating report for participants', _.map(validParticipants, part => part._id)) // find utterances hook.app.service('utterances').find({ query: { @@ -76,11 +76,11 @@ function getReportData (hook, callback) { }) // [{'name': ..., 'numUtterances': ..., 'meanLengthUtterances': ...}, ...] var visualizationData = validParticipants.map((participant) => { - var participantId = participant[ '_id' ] + var participantId = participant['_id'] return { - name: participant[ 'name' ], - numUtterances: participantId in numUtterances ? numUtterances[ participantId ] : 0, - meanLengthUtterances: participantId in meanLengthUtterances ? meanLengthUtterances[ participantId ] : 0 + name: participant['name'], + numUtterances: participantId in numUtterances ? numUtterances[participantId] : 0, + meanLengthUtterances: participantId in meanLengthUtterances ? meanLengthUtterances[participantId] : 0 } }) winston.log('info', 'getting addresses...') @@ -158,7 +158,8 @@ function createVisualization (visualizationData) { var node = g.selectAll('scatter-dots') .data(visualizationData) - .enter().append('g') + .enter() + .append('g') node.append('svg:circle') .style('fill', function (d) { return color(d.name) }) @@ -267,7 +268,7 @@ function sendReport (visualization, addresses) { } function createMeetingEndEvent (hook) { - var meetingId = (hook.method === 'create') ? hook.data._id : hook.id + var meetingId = (hook.method === 'create') ? hook.data._id : hook.id // eslint-disable-line no-extra-parens return hook.app.service('meetingEvents').create({ meeting: meetingId, event: 'end', diff --git a/src/services/meeting/hooks/index.js b/src/services/meeting/hooks/index.js index 3fc0eb1..84a882d 100644 --- a/src/services/meeting/hooks/index.js +++ b/src/services/meeting/hooks/index.js @@ -11,7 +11,7 @@ const applyUnstructuredQueryHook = require('./apply_unstructured_query-hook') const auth = require('@feathersjs/authentication') function addStartTime (hook) { - hook.data.start_time = new Date() + hook.data.start_time = new Date() // eslint-disable-line camelcase return hook } @@ -21,20 +21,22 @@ function updateTime (hook) { } exports.before = { - all: [auth.hooks.authenticate('jwt')], - create: [addStartTime, activateMeetingHook], - find: [extractUnstructuredQueryHook], - update: [updateTime], - patch: [updateTime, activateMeetingHook, - deactivateMeetingHook, removeParticipantsHook, - addParticipantHook], + all: [ auth.hooks.authenticate('jwt') ], + create: [ addStartTime, activateMeetingHook ], + find: [ extractUnstructuredQueryHook ], + update: [ updateTime ], + patch: [ updateTime, + activateMeetingHook, + deactivateMeetingHook, + removeParticipantsHook, + addParticipantHook ], get: [] } exports.after = { - create: [computeTurnHook, participantsEventHook], - update: [computeTurnHook], - patch: [computeTurnHook, participantsEventHook], + create: [ computeTurnHook, participantsEventHook ], + update: [ computeTurnHook ], + patch: [ computeTurnHook, participantsEventHook ], all: [], - find: [applyUnstructuredQueryHook] + find: [ applyUnstructuredQueryHook ] } diff --git a/src/services/meeting/hooks/participants-event-hook.js b/src/services/meeting/hooks/participants-event-hook.js index ff1bb57..b562929 100644 --- a/src/services/meeting/hooks/participants-event-hook.js +++ b/src/services/meeting/hooks/participants-event-hook.js @@ -8,17 +8,20 @@ const winston = require('winston') module.exports = function (hook) { if (_.has(hook.data, 'participants')) { - hook.app.service('participantEvents').create({ - meeting: hook.result._id, - participants: hook.result.participants, - timestamp: new Date() - }).then((participantEvent) => { - winston.log('info', 'created participantEvent!') - return hook - }).catch(function (err) { - winston.log('info', 'error creating participantEvent!', err) - return hook - }) + hook.app.service('participantEvents') + .create({ + meeting: hook.result._id, + participants: hook.result.participants, + timestamp: new Date() + }) + .then((participantEvent) => { + winston.log('info', 'created participantEvent!') + return hook + }) + .catch(function (err) { + winston.log('info', 'error creating participantEvent!', err) + return hook + }) } else { winston.log('info', 'no participants in request, not creating event...') return hook diff --git a/src/services/meeting/hooks/remove-participants-hook.js b/src/services/meeting/hooks/remove-participants-hook.js index bfc736e..027820d 100644 --- a/src/services/meeting/hooks/remove-participants-hook.js +++ b/src/services/meeting/hooks/remove-participants-hook.js @@ -9,17 +9,19 @@ const winston = require('winston') module.exports = function (hook) { if (hook.data.remove_participants) { - return hook.app.service('meetings').get(hook.id) - .then((meeting) => { - var oldParticipants = meeting.participants - hook.data.participants = _.difference(oldParticipants, - hook.data.remove_participants) - delete hook.data.remove_participants - return hook - }).catch((err) => { - winston.log('error', 'couldnt remove given participants', err) - return hook - }) + return hook.app.service('meetings') + .get(hook.id) + .then((meeting) => { + var oldParticipants = meeting.participants + hook.data.participants = _.difference(oldParticipants, + hook.data.remove_participants) + delete hook.data.remove_participants + return hook + }) + .catch((err) => { + winston.log('error', 'couldnt remove given participants', err) + return hook + }) } else { return hook } diff --git a/src/services/meeting/index.js b/src/services/meeting/index.js index 661c996..530197e 100644 --- a/src/services/meeting/index.js +++ b/src/services/meeting/index.js @@ -5,7 +5,7 @@ const meeting = require('./meeting-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: meeting, diff --git a/src/services/meeting/meeting-model.js b/src/services/meeting/meeting-model.js index 12ee8b1..f16df8d 100644 --- a/src/services/meeting/meeting-model.js +++ b/src/services/meeting/meeting-model.js @@ -8,10 +8,10 @@ const mongoose = require('mongoose') const Schema = mongoose.Schema const meetingSchema = new Schema({ - _id: {type: String}, - participants: [{type: String, ref: 'Participant'}], + _id: { type: String }, + participants: [{ type: String, ref: 'Participant' }], room: String, - startTime: {type: Date, 'default': Date.now}, + startTime: { type: Date, 'default': Date.now }, endTime: Date, active: Boolean, meetingUrl: String, diff --git a/src/services/meetingEvent/hooks/index.js b/src/services/meetingEvent/hooks/index.js index c37a976..d12256a 100644 --- a/src/services/meetingEvent/hooks/index.js +++ b/src/services/meetingEvent/hooks/index.js @@ -3,7 +3,7 @@ const auth = require('@feathersjs/authentication') exports.before = { - all: [auth.hooks.authenticate('jwt')], + all: [ auth.hooks.authenticate('jwt') ], find: [], get: [], create: [], diff --git a/src/services/meetingEvent/index.js b/src/services/meetingEvent/index.js index 87bc58f..cb78b2c 100644 --- a/src/services/meetingEvent/index.js +++ b/src/services/meetingEvent/index.js @@ -5,7 +5,7 @@ const meetingEvent = require('./meetingEvent-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: meetingEvent diff --git a/src/services/meetingEvent/meetingEvent-model.js b/src/services/meetingEvent/meetingEvent-model.js index 0700684..c28af44 100644 --- a/src/services/meetingEvent/meetingEvent-model.js +++ b/src/services/meetingEvent/meetingEvent-model.js @@ -9,7 +9,7 @@ const mongoose = require('mongoose') const Schema = mongoose.Schema const meetingEventSchema = new Schema({ - meeting: {type: String, ref: 'Meeting'}, + meeting: { type: String, ref: 'Meeting' }, event: String, data: Object, timestamp: Date diff --git a/src/services/participant/hooks/index.js b/src/services/participant/hooks/index.js index c37a976..d12256a 100644 --- a/src/services/participant/hooks/index.js +++ b/src/services/participant/hooks/index.js @@ -3,7 +3,7 @@ const auth = require('@feathersjs/authentication') exports.before = { - all: [auth.hooks.authenticate('jwt')], + all: [ auth.hooks.authenticate('jwt') ], find: [], get: [], create: [], diff --git a/src/services/participant/index.js b/src/services/participant/index.js index 6c57ed6..323965c 100644 --- a/src/services/participant/index.js +++ b/src/services/participant/index.js @@ -5,11 +5,11 @@ const participant = require('./participant-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { paginate: { - default: 5, + 'default': 5, max: 1000 }, Model: participant diff --git a/src/services/participant/participant-model.js b/src/services/participant/participant-model.js index 12c0a3a..520e9e2 100644 --- a/src/services/participant/participant-model.js +++ b/src/services/participant/participant-model.js @@ -13,7 +13,7 @@ const participantSchema = new Schema({ _id: String, name: String, email: String, - meetings: [{type: String, ref: 'meeting'}], + meetings: [{ type: String, ref: 'meeting' }], consent: Boolean, consentDate: Date, createdAt: { type: Date, 'default': Date.now }, diff --git a/src/services/participantEvent/hooks/index.js b/src/services/participantEvent/hooks/index.js index c37a976..d12256a 100644 --- a/src/services/participantEvent/hooks/index.js +++ b/src/services/participantEvent/hooks/index.js @@ -3,7 +3,7 @@ const auth = require('@feathersjs/authentication') exports.before = { - all: [auth.hooks.authenticate('jwt')], + all: [ auth.hooks.authenticate('jwt') ], find: [], get: [], create: [], diff --git a/src/services/participantEvent/index.js b/src/services/participantEvent/index.js index 26d40f3..a565f2b 100644 --- a/src/services/participantEvent/index.js +++ b/src/services/participantEvent/index.js @@ -5,12 +5,12 @@ const participantEvent = require('./participantEvent-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: participantEvent, paginate: { - default: 5, + 'default': 5, max: 25 } } diff --git a/src/services/participantEvent/participantEvent-model.js b/src/services/participantEvent/participantEvent-model.js index 9f010ab..2b0fbdb 100644 --- a/src/services/participantEvent/participantEvent-model.js +++ b/src/services/participantEvent/participantEvent-model.js @@ -9,8 +9,8 @@ const mongoose = require('mongoose') const Schema = mongoose.Schema const participantEventSchema = new Schema({ - participants: [{type: String, ref: 'Participant'}], - meeting: {type: String, ref: 'Meeting'}, + participants: [{ type: String, ref: 'Participant' }], + meeting: { type: String, ref: 'Meeting' }, timestamp: Date }) diff --git a/src/services/turn/hooks/index.js b/src/services/turn/hooks/index.js index c37a976..d12256a 100644 --- a/src/services/turn/hooks/index.js +++ b/src/services/turn/hooks/index.js @@ -3,7 +3,7 @@ const auth = require('@feathersjs/authentication') exports.before = { - all: [auth.hooks.authenticate('jwt')], + all: [ auth.hooks.authenticate('jwt') ], find: [], get: [], create: [], diff --git a/src/services/turn/index.js b/src/services/turn/index.js index 2cef3c1..e8dce15 100644 --- a/src/services/turn/index.js +++ b/src/services/turn/index.js @@ -5,7 +5,7 @@ const turn = require('./turn-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: turn diff --git a/src/services/turn/turn-model.js b/src/services/turn/turn-model.js index ce10c52..aabbf0c 100644 --- a/src/services/turn/turn-model.js +++ b/src/services/turn/turn-model.js @@ -10,14 +10,14 @@ const Schema = mongoose.Schema const turnSchema = new Schema({ _id: String, - meeting: {type: String, ref: 'Meeting'}, + meeting: { type: String, ref: 'Meeting' }, timestamp: Date, from: Date, to: Date, room: String, transitions: Number, turns: [{ - participant: {type: String, ref: 'participant'}, + participant: { type: String, ref: 'participant' }, turns: Number }] }) diff --git a/src/services/user/hooks/index.js b/src/services/user/hooks/index.js index ccf4c54..d54ac57 100644 --- a/src/services/user/hooks/index.js +++ b/src/services/user/hooks/index.js @@ -36,7 +36,7 @@ exports.before = { exports.after = { // remove password field once authentication is done only for external calls // see https://github.com/feathers-plus/feathers-hooks-common/issues/139 - all: [iff(isProvider('external'), discard('password'))], + all: [ iff(isProvider('external'), discard('password')) ], find: [], get: [], create: [], diff --git a/src/services/user/index.js b/src/services/user/index.js index 6148751..9658489 100644 --- a/src/services/user/index.js +++ b/src/services/user/index.js @@ -5,12 +5,12 @@ const user = require('./user-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: user, paginate: { - default: 5, + 'default': 5, max: 25 } } diff --git a/src/services/user/user-model.js b/src/services/user/user-model.js index 98929e1..984b726 100644 --- a/src/services/user/user-model.js +++ b/src/services/user/user-model.js @@ -6,7 +6,7 @@ const mongoose = require('mongoose') const Schema = mongoose.Schema const userSchema = new Schema({ - email: {type: String, required: true, unique: true}, + email: { type: String, required: true, unique: true }, password: { type: String, required: true }, createdAt: { type: Date, 'default': Date.now }, diff --git a/src/services/utterance/hooks/index.js b/src/services/utterance/hooks/index.js index 2e05f04..979ce30 100644 --- a/src/services/utterance/hooks/index.js +++ b/src/services/utterance/hooks/index.js @@ -7,10 +7,10 @@ const participantConsentedHook = require('./participant-consented-hook') const auth = require('@feathersjs/authentication') exports.before = { - all: [auth.hooks.authenticate('jwt')], + all: [ auth.hooks.authenticate('jwt') ], find: [], get: [], - create: [participantConsentedHook, roomHook, mergeHook, repeatHook], + create: [ participantConsentedHook, roomHook, mergeHook, repeatHook ], update: [], patch: [], remove: [] diff --git a/src/services/utterance/hooks/mergeHook.js b/src/services/utterance/hooks/mergeHook.js index 307b8d5..300d618 100644 --- a/src/services/utterance/hooks/mergeHook.js +++ b/src/services/utterance/hooks/mergeHook.js @@ -7,7 +7,7 @@ exports.hook = function (hook) { query: { meeting: hook.data.meeting, participant: hook.data.participant, - $sort: {endTime: -1}, + $sort: { endTime: -1 }, $limit: 1 } }).then((lastUtterances) => { diff --git a/src/services/utterance/hooks/participant-consented-hook.js b/src/services/utterance/hooks/participant-consented-hook.js index 316daa5..2b44019 100644 --- a/src/services/utterance/hooks/participant-consented-hook.js +++ b/src/services/utterance/hooks/participant-consented-hook.js @@ -5,16 +5,18 @@ const winston = require('winston') module.exports = function (hook) { - return hook.app.service('participants').get(hook.data.participant) - .then((participant) => { - if (participant.consent === true) { - return hook - } else { - winston.log('info', 'NOT creating utterance, do not have consent') - hook.result = {'created': false} - } - }).catch((err) => { - winston.log('info', 'Unable to create utterance, participant does not exist yet', err) - hook.result = {'created': false} - }) + return hook.app.service('participants') + .get(hook.data.participant) + .then((participant) => { + if (participant.consent === true) { + return hook + } else { + winston.log('info', 'NOT creating utterance, do not have consent') + hook.result = { created: false } + } + }) + .catch((err) => { + winston.log('info', 'Unable to create utterance, participant does not exist yet', err) + hook.result = { created: false } + }) } diff --git a/src/services/utterance/hooks/repeatHook.js b/src/services/utterance/hooks/repeatHook.js index 6a497fa..a7753a5 100644 --- a/src/services/utterance/hooks/repeatHook.js +++ b/src/services/utterance/hooks/repeatHook.js @@ -6,13 +6,14 @@ function dateDiff (d1, d2) { } exports.hook = function (hook) { - hook.app.service('utterances').find( - { + hook.app.service('utterances') + .find({ query: { - $and: [{meeting: hook.data.meeting}, - {participant: hook.data.participant}] + $and: [{ meeting: hook.data.meeting }, + { participant: hook.data.participant }] } - }).then((foundUtterances) => { + }) + .then((foundUtterances) => { var timeMatchThreshold = 1.5 * 1000 // threshold for times being "matched", in ms // there are some talk events from this participant // filter them, find if any are very close: @@ -21,9 +22,9 @@ exports.hook = function (hook) { var matches = _.filter(foundUtterances, function (utterance) { var startDiff = dateDiff(utterance.startTime, - hook.data.startTime) + hook.data.startTime) var endDiff = dateDiff(utterance.endTime, - hook.data.endTime) + hook.data.endTime) return (startDiff < timeMatchThreshold || endDiff < timeMatchThreshold) }) diff --git a/src/services/utterance/index.js b/src/services/utterance/index.js index a4153d6..ded4226 100644 --- a/src/services/utterance/index.js +++ b/src/services/utterance/index.js @@ -5,7 +5,7 @@ const utterance = require('./utterance-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: utterance diff --git a/src/services/utterance/utterance-model.js b/src/services/utterance/utterance-model.js index a6b7c59..54c82a8 100644 --- a/src/services/utterance/utterance-model.js +++ b/src/services/utterance/utterance-model.js @@ -9,8 +9,8 @@ const mongoose = require('mongoose') const Schema = mongoose.Schema const utteranceSchema = new Schema({ - participant: {type: String, ref: 'Participant'}, - meeting: {type: String, ref: 'Meeting'}, + participant: { type: String, ref: 'Participant' }, + meeting: { type: String, ref: 'Meeting' }, startTime: Date, endTime: Date, volumes: [{ diff --git a/src/services/utteranceDistribution/hooks/index.js b/src/services/utteranceDistribution/hooks/index.js index c37a976..d12256a 100644 --- a/src/services/utteranceDistribution/hooks/index.js +++ b/src/services/utteranceDistribution/hooks/index.js @@ -3,7 +3,7 @@ const auth = require('@feathersjs/authentication') exports.before = { - all: [auth.hooks.authenticate('jwt')], + all: [ auth.hooks.authenticate('jwt') ], find: [], get: [], create: [], diff --git a/src/services/utteranceDistribution/index.js b/src/services/utteranceDistribution/index.js index 2c66672..410a189 100644 --- a/src/services/utteranceDistribution/index.js +++ b/src/services/utteranceDistribution/index.js @@ -5,12 +5,12 @@ const utteranceDistribution = require('./utteranceDistribution-model') const hooks = require('./hooks') module.exports = function () { - const app = this + const app = this // eslint-disable-line consistent-this const options = { Model: utteranceDistribution, paginate: { - default: 5, + 'default': 5, max: 25 } } diff --git a/src/services/utteranceDistribution/utteranceDistribution-model.js b/src/services/utteranceDistribution/utteranceDistribution-model.js index 6e0888f..84da458 100644 --- a/src/services/utteranceDistribution/utteranceDistribution-model.js +++ b/src/services/utteranceDistribution/utteranceDistribution-model.js @@ -9,9 +9,9 @@ const mongoose = require('mongoose') const Schema = mongoose.Schema const utteranceDistributionSchema = new Schema({ - meeting: {type: String, ref: 'Meeting'}, + meeting: { type: String, ref: 'Meeting' }, talkTimes: [{ - participant: {type: String, ref: 'Participant'}, + participant: { type: String, ref: 'Participant' }, seconds: Number }], timestamp: Date From 72e304d889db45609cc6e2acfcf268849a7d5a6e Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Sun, 13 May 2018 11:45:36 -0400 Subject: [PATCH 32/35] test file changes to pass eslint --- test/events/index.test.js | 92 ++++++++------- test/events/meetingEvent.test.js | 4 +- test/helpers/index.test.js | 14 +-- test/jobs/end-meeting-job.test.js | 110 ++++++++++-------- test/jobs/turn-job/index.test.js | 71 +++++------ test/load.test.js | 14 ++- test/services/face/index.test.js | 28 +++-- .../meeting/activate-meeting-hook.test.js | 55 +++++---- .../meeting/add-participants-hook.test.js | 93 ++++++++------- .../meeting/deactivate-meeting-hook-test.js | 103 +++++++++------- test/services/meeting/index.test.js | 17 +-- test/services/meeting/meeting-meta.test.js | 10 +- .../meeting/participant-changed.test.js | 8 +- .../meeting/participants-event-hook.test.js | 6 +- .../meeting/remove-participants-hook.test.js | 10 +- test/services/utterance/index.test.js | 2 +- test/shared/global-before.js | 2 +- 17 files changed, 358 insertions(+), 281 deletions(-) diff --git a/test/events/index.test.js b/test/events/index.test.js index b709b79..9d7e526 100644 --- a/test/events/index.test.js +++ b/test/events/index.test.js @@ -15,38 +15,45 @@ describe('meeting joined event', function (done) { } var socket = io.connect('http://localhost:3000', { - 'transports': [ + transports: [ 'websocket', 'flashsocket', 'jsonp-polling', 'xhr-polling', - 'htmlfile' + 'htmlfile', ] }) var deactivateMeetings = function (room) { - global.app.service('meetings').find({ query: { room: fakeJoinedEvent.room } }).then((meetings) => { - winston.log('info', 'deactivating meetings', meetings) - meetings.forEach((meeting) => { - let id = meeting._id - global.app.service('meetings').patch(id, { - active: false - }).then((meeting) => { - winston.log('info', 'meeting deactivated', meeting) - }).catch((err) => { - done(err) + global.app.service('meetings') + .find({ query: { room: fakeJoinedEvent.room } }) + .then((meetings) => { + winston.log('info', 'deactivating meetings', meetings) + meetings.forEach((meeting) => { + let id = meeting._id + global.app.service('meetings') + .patch(id, { + active: false + }) + .then((meeting) => { + winston.log('info', 'meeting deactivated', meeting) + }) + .catch((err) => { + done(err) + }) }) }) - }) } before(function (done) { - dropDatabase().then(() => { - socket.emit('meetingJoined', fakeJoinedEvent) - setTimeout(() => { deactivateMeetings(fakeJoinedEvent.room) }, 400) - setTimeout(() => { socket.emit('meetingJoined', fakeJoinedEvent) }, 800) - setTimeout(() => { done() }, 1200) - }).catch((err) => { done(err) }) + dropDatabase() + .then(() => { + socket.emit('meetingJoined', fakeJoinedEvent) + setTimeout(() => { deactivateMeetings(fakeJoinedEvent.room) }, 400) + setTimeout(() => { socket.emit('meetingJoined', fakeJoinedEvent) }, 800) + setTimeout(() => { done() }, 1200) + }) + .catch((err) => { done(err) }) }) after(function (done) { @@ -56,32 +63,37 @@ describe('meeting joined event', function (done) { it('creates a participant & meeting when they join for the first time', function (done) { setTimeout(function () { - global.app.service('participants').get(fakeJoinedEvent.participant) - .then(function (participant) { - winston.log('info', 'participant:', participant) - assert.strictEqual(participant._id, fakeJoinedEvent.participant) - socket.disconnect() - done() - }).catch(function (err) { - winston.log('info', 'errrrrred', err) - socket.disconnect() - done(err) - }) + global.app.service('participants') + .get(fakeJoinedEvent.participant) + .then(function (participant) { + winston.log('info', 'participant:', participant) + assert.strictEqual(participant._id, fakeJoinedEvent.participant) + socket.disconnect() + done() + }) + .catch(function (err) { + winston.log('info', 'errrrrred', err) + socket.disconnect() + done(err) + }) }, 1500) }) it('creates a meeting based on group name', function (done) { - global.app.service('meetings').find().then((meetings) => { - winston.log('info', 'mtgs: ', meetings) - assert.strictEqual(meetings.length, 2) - assert(meetings[0].active !== meetings[1].active) - meetings.forEach((meeting) => { - assert.strictEqual(meeting.room, fakeJoinedEvent.room) - assert(meeting._id.startsWith(fakeJoinedEvent.room), 'meeting id starts with room name') + global.app.service('meetings') + .find() + .then((meetings) => { + winston.log('info', 'mtgs: ', meetings) + assert.strictEqual(meetings.length, 2) + assert(meetings[0].active !== meetings[1].active) + meetings.forEach((meeting) => { + assert.strictEqual(meeting.room, fakeJoinedEvent.room) + assert(meeting._id.startsWith(fakeJoinedEvent.room), 'meeting id starts with room name') + }) + }) + .catch((err) => { + done(err) }) - }).catch((err) => { - done(err) - }) done() }) }) diff --git a/test/events/meetingEvent.test.js b/test/events/meetingEvent.test.js index 011e1ea..b11db7a 100644 --- a/test/events/meetingEvent.test.js +++ b/test/events/meetingEvent.test.js @@ -23,13 +23,13 @@ describe('Meeting event', function () { isMicrophoneMute: true } - var options = { 'transports': [ + var options = { transports: [ 'websocket', 'flashsocket', 'jsonp-polling', 'xhr-polling', 'htmlfile' - ]} + ] } var socket = io('http://localhost:3000', options) diff --git a/test/helpers/index.test.js b/test/helpers/index.test.js index 75c19f3..35d5d4c 100644 --- a/test/helpers/index.test.js +++ b/test/helpers/index.test.js @@ -12,7 +12,7 @@ describe('json transform', function () { b: 3, c: 4 } - var newObj = helpers.transformKeys(obj, ['a'], (val) => { return val + 1 }) + var newObj = helpers.transformKeys(obj, [ 'a' ], (val) => { return val + 1 }) assert(_.isEqual(newObj, { a: 3, b: 3, @@ -23,13 +23,13 @@ describe('json transform', function () { it('should transform nested values of a json object', function (done) { var obj = { - a: {d: 2}, + a: { d: 2 }, b: 3, c: 4 } - var newObj = helpers.transformKeys(obj, ['d'], (val) => { return val + 1 }) + var newObj = helpers.transformKeys(obj, [ 'd' ], (val) => { return val + 1 }) assert(_.isEqual(newObj, { - a: {d: 3}, + a: { d: 3 }, b: 3, c: 4 })) @@ -38,13 +38,13 @@ describe('json transform', function () { it('should transform array values of a json object', function (done) { var obj = { - a: [2, 3], + a: [ 2, 3 ], b: 3, c: 4 } - var newObj = helpers.transformKeys(obj, ['a'], (val) => { return val + 1 }) + var newObj = helpers.transformKeys(obj, [ 'a' ], (val) => { return val + 1 }) assert(_.isEqual(newObj, { - a: [3, 4], + a: [ 3, 4 ], b: 3, c: 4 })) diff --git a/test/jobs/end-meeting-job.test.js b/test/jobs/end-meeting-job.test.js index 8eb988b..0c20cea 100644 --- a/test/jobs/end-meeting-job.test.js +++ b/test/jobs/end-meeting-job.test.js @@ -42,7 +42,7 @@ function createMeetingAndUtterances (testName, ended, hasUtterances, done) { var testMeeting = { _id: testName + n, - participants: [testParticipants[0]._id, testParticipants[1]._id], + participants: [ testParticipants[0]._id, testParticipants[1]._id ], startTime: d1, endTime: null, active: true @@ -50,32 +50,36 @@ function createMeetingAndUtterances (testName, ended, hasUtterances, done) { meetingId = testName + n - global.app.service('meetings').create(testMeeting) - .then(function (meeting) { - _.each(testParticipants, function (participant, i, list) { - global.app.service('participants').create(participant).then(() => {}) - }) - return testParticipants - }).then(function (participants) { - if (!hasUtterances) { - return - } - return global.app.service('utterances').create({ - meeting: testMeeting._id, - startTime: d1, - endTime: d2, - participant: testParticipants[0]._id - }) - }).then(function (utterance) { - if (done !== undefined) { - done() - } - }).catch(function (err) { - winston.log('info', '[end-meeting-job] error: ', err) - if (done !== undefined) { - done(err) - } - }) + global.app.service('meetings') + .create(testMeeting) + .then(function (meeting) { + _.each(testParticipants, function (participant, i, list) { + global.app.service('participants').create(participant).then(() => {}) + }) + return testParticipants + }) + .then(function (participants) { + if (!hasUtterances) { + return + } + return global.app.service('utterances').create({ + meeting: testMeeting._id, + startTime: d1, + endTime: d2, + participant: testParticipants[0]._id + }) + }) + .then(function (utterance) { + if (done !== undefined) { + done() + } + }) + .catch(function (err) { + winston.log('info', '[end-meeting-job] error: ', err) + if (done !== undefined) { + done(err) + } + }) n += 1 } @@ -126,27 +130,33 @@ describe('end meeting job', function () { }) it('should change an inactive meetings ended state', function (done) { - endMeetingJob._isMeetingEnded(endedMeeting, global.app).then(function (res) { - assert(res.meetingShouldEnd) - return endMeetingJob._maybeEndMeeting(res, global.app) - }).then(function (didEndMeeting) { - assert(didEndMeeting) - done() - }).catch(function (err) { - done(err) - }) + endMeetingJob._isMeetingEnded(endedMeeting, global.app) + .then(function (res) { + assert(res.meetingShouldEnd) + return endMeetingJob._maybeEndMeeting(res, global.app) + }) + .then(function (didEndMeeting) { + assert(didEndMeeting) + done() + }) + .catch(function (err) { + done(err) + }) }) it('shouldnt change an active meetings end state', function (done) { - endMeetingJob._isMeetingEnded(aliveMeeting, global.app).then(function (res) { - assert(!res.meetingShouldEnd) - return endMeetingJob._maybeEndMeeting(res, global.app) - }).then(function (didEndMeeting) { - assert(!didEndMeeting) - done() - }).catch(function (err) { - done(err) - }) + endMeetingJob._isMeetingEnded(aliveMeeting, global.app) + .then(function (res) { + assert(!res.meetingShouldEnd) + return endMeetingJob._maybeEndMeeting(res, global.app) + }) + .then(function (didEndMeeting) { + assert(!didEndMeeting) + done() + }) + .catch(function (err) { + done(err) + }) }) }) @@ -167,25 +177,27 @@ describe('end meeting job', function () { }) it('should end all inactive meetings', function (done) { - endMeetingJob._endInactiveMeetings([endedMeeting, aliveMeeting], global.app) + endMeetingJob._endInactiveMeetings([ endedMeeting, aliveMeeting ], global.app) .then(function (endedMeetings) { winston.log('info', '[end-meeting-job] ended meetings:', endedMeetings) assert(endedMeetings[0]) assert(!endedMeetings[1]) done() - }).catch(function (err) { + }) + .catch(function (err) { done(err) }) }) it('should end inactive meetings without utterances', function (done) { - endMeetingJob._endInactiveMeetings([endedMeetingWithoutUtterances, aliveMeetingWithoutUtterances], global.app) + endMeetingJob._endInactiveMeetings([ endedMeetingWithoutUtterances, aliveMeetingWithoutUtterances ], global.app) .then(function (endedMeetings) { winston.log('info', '[end-meeting-job] ended meetings:', endedMeetings) assert(endedMeetings[0]) assert(!endedMeetings[1]) done() - }).catch(function (err) { + }) + .catch(function (err) { done(err) }) }) diff --git a/test/jobs/turn-job/index.test.js b/test/jobs/turn-job/index.test.js index aac3e9b..18b703a 100644 --- a/test/jobs/turn-job/index.test.js +++ b/test/jobs/turn-job/index.test.js @@ -33,7 +33,7 @@ var testParticipants = [ var testMeeting = { _id: 'turn-job-meeting-0', room: 'turn-job', - participants: ['p1a', 'p2a', 'p3a'], + participants: [ 'p1a', 'p2a', 'p3a' ], startTime: Faker.date.recent(), active: true } @@ -43,19 +43,19 @@ var testUtterances = [ participant: testMeeting.participants[0], startTime: new Date(startTime), endTime: new Date(startTime + 1 * 50), - volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.random.number(5) } }) + volumes: _(10).times((n) => { return { timestamp: '1', vol: Faker.random.number(5) } }) }, { meeting: testMeeting._id, participant: testMeeting.participants[0], startTime: new Date(startTime + 2 * 50), endTime: new Date(startTime + 3 * 50), - volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.random.number(5) } }) + volumes: _(10).times((n) => { return { timestamp: '1', vol: Faker.random.number(5) } }) }, { meeting: testMeeting._id, participant: testMeeting.participants[1], startTime: new Date(startTime + 3 * 50), endTime: new Date(startTime + 4 * 50), - volumes: _(10).times((n) => { return { 'timestamp': '1', 'vol': Faker.random.number(5) } }) + volumes: _(10).times((n) => { return { timestamp: '1', vol: Faker.random.number(5) } }) } ] @@ -85,7 +85,8 @@ describe('turn job hook', () => { winston.log('info', 'meeting compute created', meeting) assert(_.has(turnJob.processList, meeting._id)) done() - }).catch((err) => { + }) + .catch((err) => { done(err) }) }) @@ -102,42 +103,46 @@ describe('turn computation', function (done) { return global.app.service('utterances').create(utteranceObj, {}) }) Promise.all(testUtterancePromises) - .then((utterances) => { done() }) - .catch((err) => { done(err) }) + .then((utterances) => { done() }) + .catch((err) => { done(err) }) }) it('correctly computed turns from utterance data', function (done) { this.timeout(6000) turnAnalytics.computeTurns(global.app, testMeeting, startTime, new Date()) setTimeout(function () { - global.app.service('turns').find({ - query: { - meeting: testMeeting._id - } - }).then((turns) => { - // pull out just the turns - var turn = _.map(turns[0].turns, (t) => { return _.omit(t, '_id') }) - winston.log('info', JSON.stringify(turn), JSON.stringify(expectedTurnData), turns[0].transitions) - turn.sort((a, b) => { return a.turns < b.turns }) - assert.deepEqual(turn, expectedTurnData) - assert.equal(turns[0].transitions, 1) + global.app.service('turns') + .find({ + query: { + meeting: testMeeting._id + } + }) + .then((turns) => { + // pull out just the turns + var turn = _.map(turns[0].turns, (t) => { return _.omit(t, '_id') }) + winston.log('info', JSON.stringify(turn), JSON.stringify(expectedTurnData), turns[0].transitions) + turn.sort((a, b) => { return a.turns < b.turns }) + assert.deepEqual(turn, expectedTurnData) + assert.equal(turns[0].transitions, 1) + done() + }) + .catch((err) => { + done(err) + }) + }, 5000) + }) + + it('stopped computing turns when a meeting is changed to inactive', function (done) { + global.app.service('meetings') + .patch(testMeeting._id, { + active: false + }) + .then((meeting) => { + assert(_.has(turnJob.processList, meeting._id) === false) done() - }).catch((err) => { + }) + .catch((err) => { done(err) }) - } - , 5000) }) - - it('stopped computing turns when a meeting is changed to inactive', - function (done) { - global.app.service('meetings').patch(testMeeting._id, { - active: false - }).then((meeting) => { - assert(_.has(turnJob.processList, meeting._id) === false) - done() - }).catch((err) => { - done(err) - }) - }) }) diff --git a/test/load.test.js b/test/load.test.js index 40ae566..7ca8d78 100644 --- a/test/load.test.js +++ b/test/load.test.js @@ -17,7 +17,7 @@ describe('Load tests', function () { while (ioIndex < testUsers) { (function () { var socket = io.connect('http://localhost:3000', { - 'transports': [ + transports: [ 'websocket', 'flashsocket', 'jsonp-polling', @@ -42,6 +42,7 @@ describe('Load tests', function () { endTime: new Date((new Date()).getTime() + 50), volumes: _(10).times((n) => { return Faker.helpers.random.number(5) }) }) + /* eslint-disable camelcase */ socket.emit('face::create', { meeting: 'meeting' + ioIndex, participant: 'participant' + ioIndex, @@ -49,8 +50,9 @@ describe('Load tests', function () { end_time: new Date((new Date()).getTime() + 50), timestamp: new Date(), face_delta: Faker.random.number(5), - delta_array: _(71).times((n) => { return [Faker.random.number(5)] }) + delta_array: _(71).times((n) => { return [ Faker.random.number(5) ] }) }) + /* eslint-enable camelcase */ }, interval) setTimeout(function () { @@ -66,7 +68,7 @@ describe('Load tests', function () { it('receives turn events for each hangout', function (done) { var socket = io.connect('http://localhost:3000', { - 'transports': [ + transports: [ 'websocket', 'flashsocket', 'jsonp-polling', @@ -79,7 +81,9 @@ describe('Load tests', function () { .configure(socketio(socket)) var turns = client.service('turns') var recvdTurns = [] - for (var i = 0; i < testUsers; i++) { recvdTurns[i] = 0 } + for (let i = 0; i < testUsers; i++) { + recvdTurns[i] = 0 + } var isDone = false turns.on('created', function (turn) { @@ -88,7 +92,7 @@ describe('Load tests', function () { if (recvdTurns[meeting] >= 3) { if (!isDone) { isDone = true - for (var i = 0; i < testUsers; i++) { + for (let i = 0; i < testUsers; i++) { assert.equal(recvdTurns[i], 3) } done() diff --git a/test/services/face/index.test.js b/test/services/face/index.test.js index 91696ea..22d711d 100644 --- a/test/services/face/index.test.js +++ b/test/services/face/index.test.js @@ -12,6 +12,7 @@ describe('face service', () => { assert.ok(app.service('faces')) }) + /* eslint-disable camelcase */ var face = { participant: 'jordan', timestamp: new Date(), @@ -20,6 +21,7 @@ describe('face service', () => { delta_array: [], room: 'room' } + /* eslint-enable camelcase */ var fakeJoinedEvent = { participant: 'bob', @@ -31,7 +33,7 @@ describe('face service', () => { } var socket = io.connect('http://localhost:3000', { - 'transports': [ + transports: [ 'websocket', 'flashsocket', 'jsonp-polling', @@ -41,18 +43,22 @@ describe('face service', () => { }) before(function (done) { - dropDatabase().then(() => { - socket.emit('meetingJoined', fakeJoinedEvent) - socket.disconnect() - setTimeout(() => { done() }, 400) - }).catch((err) => { done(err) }) + dropDatabase() + .then(() => { + socket.emit('meetingJoined', fakeJoinedEvent) + socket.disconnect() + setTimeout(() => { done() }, 400) + }) + .catch((err) => { done(err) }) }) it('created a face', function (done) { - app.service('faces').create(face).then((created) => { - winston.log('info', 'created fcace', JSON.stringify(created)) - assert.equal(created.meeting, 'room-1') - done() - }).catch((err) => done(err)) + app.service('faces').create(face) + .then((created) => { + winston.log('info', 'created fcace', JSON.stringify(created)) + assert.equal(created.meeting, 'room-1') + done() + }) + .catch(err => done(err)) }) }) diff --git a/test/services/meeting/activate-meeting-hook.test.js b/test/services/meeting/activate-meeting-hook.test.js index c0bb890..8be0039 100644 --- a/test/services/meeting/activate-meeting-hook.test.js +++ b/test/services/meeting/activate-meeting-hook.test.js @@ -19,34 +19,43 @@ describe('activate meeting hook', function () { } before(function (done) { - dropDatabase().then(() => { - global.app.service('meetings').create(endedMeeting) - .then(function (meeting) { - assert(meeting.active === false) - done() - }) - }).catch((err) => { done(err) }) + dropDatabase() + .then(() => { + global.app.service('meetings') + .create(endedMeeting) + .then(function (meeting) { + assert(meeting.active === false) + done() + }) + }) + .catch((err) => { done(err) }) }) after(function (done) { - global.app.service('meetings').patch(endedMeeting._id, { - participants: [] - }).then((meeting) => { - done() - }).catch((err) => { - done(err) - }) + global.app.service('meetings') + .patch(endedMeeting._id, { + participants: [] + }) + .then((meeting) => { + done() + }) + .catch((err) => { + done(err) + }) }) it('sets an empty meeting active after a participant joins', function (done) { - global.app.service('meetings').patch(endedMeeting._id, { - participants: ['p1'] - }).then(function (meeting) { - assert(meeting.active === true) - assert(meeting.endTime === null) - done() - }).catch(function (err) { - done(err) - }) + global.app.service('meetings') + .patch(endedMeeting._id, { + participants: [ 'p1' ] + }) + .then(function (meeting) { + assert(meeting.active === true) + assert(meeting.endTime === null) + done() + }) + .catch(function (err) { + done(err) + }) }) }) diff --git a/test/services/meeting/add-participants-hook.test.js b/test/services/meeting/add-participants-hook.test.js index 4af7f99..570f07f 100644 --- a/test/services/meeting/add-participants-hook.test.js +++ b/test/services/meeting/add-participants-hook.test.js @@ -16,20 +16,22 @@ function createMeeting () { var activeMeeting = { _id: 'add-participants-hook' + n, - participants: ['p1', 'p2'], + participants: [ 'p1', 'p2' ], startTime: d2, endTime: null, active: true } - return global.app.service('meetings').create(activeMeeting) - .then(function (meeting) { - assert(meeting.active === true) - n += 1 - return meeting - }).catch(function (err) { - return err - }) + return global.app.service('meetings') + .create(activeMeeting) + .then(function (meeting) { + assert(meeting.active === true) + n += 1 + return meeting + }) + .catch(function (err) { + return err + }) } describe('add participants hook', function () { @@ -40,44 +42,57 @@ describe('add participants hook', function () { }) beforeEach(function (done) { - createMeeting().then(function (meeting) { - meetingId = meeting - done() - }).catch(function (err) { - done(err) - }) + createMeeting() + .then(function (meeting) { + meetingId = meeting + done() + }) + .catch(function (err) { + done(err) + }) }) afterEach(function (done) { - global.app.service('meetings').patch(meetingId, { - participants: [] - }).then((meeting) => { - done() - }).catch((err) => { - done(err) - }) + global.app.service('meetings') + .patch(meetingId, { + participants: [] + }) + .then((meeting) => { + done() + }) + .catch((err) => { + done(err) + }) }) it('adds a participant to a meeting when it receives an add_participants query ', function (done) { - global.app.service('meetings').patch(meetingId, { - add_participant: 'p3' - }, {}).then(function (meeting) { - winston.log('info', 'added participants? :', meeting) - assert(_.isEqual(meeting.participants, ['p1', 'p2', 'p3'])) - done() - }).catch(function (err) { - done(err) - }) + /* eslint-disable camelcase */ + global.app.service('meetings') + .patch(meetingId, { + add_participant: 'p3' + }, {}) + .then(function (meeting) { + winston.log('info', 'added participants? :', meeting) + assert(_.isEqual(meeting.participants, [ 'p1', 'p2', 'p3' ])) + done() + }) + .catch(function (err) { + done(err) + }) + /* eslint-enable camelcase */ }) it('patches without an add_participant query', function (done) { - global.app.service('meetings').patch(meetingId, { - participants: ['p1', 'p2', 'p3', 'p4'] - }).then(function (meeting) { - assert(_.isEqual(meeting.participants, ['p1', 'p2', 'p3', 'p4'])) - done() - }).catch(function (err) { - done(err) - }) + global.app.service('meetings') + .patch(meetingId, { + participants: [ 'p1', 'p2', 'p3', 'p4' ] + }) + .then(function (meeting) { + assert(_.isEqual(meeting.participants, [ 'p1', 'p2', 'p3', 'p4' ])) + done() + }) + .catch(function (err) { + done(err) + }) }) }) diff --git a/test/services/meeting/deactivate-meeting-hook-test.js b/test/services/meeting/deactivate-meeting-hook-test.js index 2e7b2c7..c13e164 100644 --- a/test/services/meeting/deactivate-meeting-hook-test.js +++ b/test/services/meeting/deactivate-meeting-hook-test.js @@ -37,7 +37,7 @@ function createMeetingAndUtterances (testName) { var testMeeting = { _id: testName + n, - participants: [testParticipants[0]._id, testParticipants[1]._id, testParticipants[2]._id], + participants: [ testParticipants[0]._id, testParticipants[1]._id, testParticipants[2]._id ], startTime: d2, endTime: null, active: true @@ -64,20 +64,22 @@ function createMeetingAndUtterances (testName) { } ] - return global.app.service('meetings').create(testMeeting) - .then(function (meeting) { - _.each(testParticipants, function (participant, i, list) { - global.app.service('participants').create(participant) - }) - _.each(testUtterances, function (utterance, i, list) { - global.app.service('utterances').create(utterance) - }) - assert(meeting.active === true) - n += 1 - return meeting - }).catch(function (err) { - return err - }) + return global.app.service('meetings') + .create(testMeeting) + .then(function (meeting) { + _.each(testParticipants, function (participant, i, list) { + global.app.service('participants').create(participant) + }) + _.each(testUtterances, function (utterance, i, list) { + global.app.service('utterances').create(utterance) + }) + assert(meeting.active === true) + n += 1 + return meeting + }) + .catch(function (err) { + return err + }) } describe('deactivate meeting hook', function () { @@ -89,43 +91,54 @@ describe('deactivate meeting hook', function () { }) beforeEach(function (done) { - createMeetingAndUtterances('deactivate-meeting-hook').then(function (meeting) { - meetingId = meeting - done() - }).catch(function (err) { - done(err) - }) + createMeetingAndUtterances('deactivate-meeting-hook') + .then(function (meeting) { + meetingId = meeting + done() + }) + .catch(function (err) { + done(err) + }) }) it('sets an empty meeting inactive after all participants leave', function (done) { - global.app.service('meetings').patch(meetingId, { - participants: [] - }).then(function (meeting) { - winston.log('info', 'deactivated meeting:', meeting) - assert(meeting.active === false) - assert(meeting.endTime !== null) - done() - }).catch(function (err) { - done(err) - }) + global.app.service('meetings') + .patch(meetingId, { + participants: [] + }) + .then(function (meeting) { + winston.log('info', 'deactivated meeting:', meeting) + assert(meeting.active === false) + assert(meeting.endTime !== null) + done() + }) + .catch(function (err) { + done(err) + }) }) it('creates a meeting end event successfully', function (done) { - global.app.service('meetings').patch(meetingId, { - participants: [] - }).then(function (meeting) { - global.app.service('meetingEvents').find({ - query: { $and: [{meeting: meetingId}, - {event: 'end'}] - } - }).then(function (meetingEvents) { - assert(meetingEvents.length > 0) - done() - }).catch(function (err) { + global.app.service('meetings') + .patch(meetingId, { + participants: [] + }) + .then(function (meeting) { + global.app.service('meetingEvents') + .find({ + query: { $and: [{ meeting: meetingId }, + { event: 'end' }] + } + }) + .then(function (meetingEvents) { + assert(meetingEvents.length > 0) + done() + }) + .catch(function (err) { + done(err) + }) + }) + .catch(function (err) { done(err) }) - }).catch(function (err) { - done(err) - }) }) }) diff --git a/test/services/meeting/index.test.js b/test/services/meeting/index.test.js index 3c4f0bd..bb5d87a 100644 --- a/test/services/meeting/index.test.js +++ b/test/services/meeting/index.test.js @@ -9,7 +9,7 @@ const app = require('../../../src/app') describe('meeting service', () => { var testMeeting = { _id: Faker.random.number(500).toString(), - participants: ['p1', 'p2', 'p3'], + participants: [ 'p1', 'p2', 'p3' ], startTime: Faker.date.recent(), active: false } @@ -22,12 +22,13 @@ describe('meeting service', () => { it('creates a new meeting', function (done) { app.service('meetings') - .create(testMeeting, {}) - .then((meeting) => { - assert(meeting._id === testMeeting._id) - done() - }).catch((err) => { - done(err) - }) + .create(testMeeting, {}) + .then((meeting) => { + assert(meeting._id === testMeeting._id) + done() + }) + .catch((err) => { + done(err) + }) }) }) diff --git a/test/services/meeting/meeting-meta.test.js b/test/services/meeting/meeting-meta.test.js index 2d8c8f1..3f6205b 100644 --- a/test/services/meeting/meeting-meta.test.js +++ b/test/services/meeting/meeting-meta.test.js @@ -30,7 +30,7 @@ describe('meta data in meeting', function () { startTime: d2, endTime: d1, active: false, - meta: {key: 'value'} + meta: { key: 'value' } } var m3 = { @@ -39,7 +39,7 @@ describe('meta data in meeting', function () { startTime: d2, endTime: d1, active: false, - meta: {key: 'value with spaces'} + meta: { key: 'value with spaces' } } it('successfully saves a meeting with no metadata', function (done) { @@ -65,7 +65,7 @@ describe('meta data in meeting', function () { }) it('successfully finds a meeting with meta filter', function (done) { - app.service('meetings').find({query: {meta: {key: 'value'}}}) + app.service('meetings').find({ query: { meta: { key: 'value' } } }) .then(function (meetings) { assert(meetings) assert(_.isEqual(meetings[0]._id, 'meeting-metadata-1')) @@ -78,7 +78,7 @@ describe('meta data in meeting', function () { it('successfully finds the meeting after url decoding the meta fields', function (done) { app.service('meetings').create(m3).then(function (meeting) { - app.service('meetings').find({query: {meta: {key: 'value%20with%20spaces'}}}) + app.service('meetings').find({ query: { meta: { key: 'value%20with%20spaces' } } }) .then(function (meetings) { assert(meetings[0]._id === 'meeting-metadata-3') done() @@ -89,7 +89,7 @@ describe('meta data in meeting', function () { }) it('doesnt find a meeting with meta when there isnt one', function (done) { - app.service('meetings').find({query: {meta: {key: 'not value'}}}) + app.service('meetings').find({ query: { meta: { key: 'not value' } } }) .then(function (meetings) { assert(_.isEmpty(meetings)) done() diff --git a/test/services/meeting/participant-changed.test.js b/test/services/meeting/participant-changed.test.js index ece4fa9..8b96285 100644 --- a/test/services/meeting/participant-changed.test.js +++ b/test/services/meeting/participant-changed.test.js @@ -16,10 +16,10 @@ describe('meeting participants change', function () { const meetingService = global.app.service('meetings') var testMeeting = { _id: 'participants-patched-1', - participants: ['p1', 'p2', 'p3'], + participants: [ 'p1', 'p2', 'p3' ], startTime: new Date() } - var endParticipants = ['p1', 'p2'] + var endParticipants = [ 'p1', 'p2' ] meetingService.on('patched', function (meeting) { if (meeting._id === testMeeting._id) { @@ -44,10 +44,10 @@ describe('meeting participants change', function () { const meetingService = global.app.service('meetings') var testMeeting = { _id: 'participants-patched-2', - participants: ['p1', 'p2'], + participants: [ 'p1', 'p2' ], startTime: new Date() } - var endParticipants = ['p1', 'p2', 'p3'] + var endParticipants = [ 'p1', 'p2', 'p3' ] meetingService.on('patched', function (meeting) { if (meeting._id === testMeeting._id) { diff --git a/test/services/meeting/participants-event-hook.test.js b/test/services/meeting/participants-event-hook.test.js index c2b6f8c..79c3674 100644 --- a/test/services/meeting/participants-event-hook.test.js +++ b/test/services/meeting/participants-event-hook.test.js @@ -51,7 +51,7 @@ describe('participants event hook', function () { global.app.service('participantEvents').find({ query: { meeting: meetingId, - $sort: {timestamp: -1} + $sort: { timestamp: -1 } } }).then(function (participantEvents) { var participants = participantEvents.data[0].participants @@ -65,13 +65,13 @@ describe('participants event hook', function () { it('creates a participantEvent when a meeting is changed', function (done) { this.timeout = 3000 global.app.service('meetings').patch(meetingId, { - participants: ['p1', 'p2'] + participants: [ 'p1', 'p2' ] }).then(function (meeting) { setTimeout(function () { global.app.service('participantEvents').find({ query: { meeting: meetingId, - $sort: {timestamp: -1} + $sort: { timestamp: -1 } } }).then(function (participantEvents) { var participants = participantEvents.data[0].participants diff --git a/test/services/meeting/remove-participants-hook.test.js b/test/services/meeting/remove-participants-hook.test.js index 61929df..4edfacc 100644 --- a/test/services/meeting/remove-participants-hook.test.js +++ b/test/services/meeting/remove-participants-hook.test.js @@ -16,7 +16,7 @@ function createMeeting () { var activeMeeting = { _id: 'remove-participants-hook' + n, - participants: ['p1', 'p2', 'p3'], + participants: [ 'p1', 'p2', 'p3' ], startTime: d2, endTime: null, active: true @@ -61,10 +61,10 @@ describe('remove participants hook', function () { it('removes a participant when it receives a remove_participants query ', function (done) { global.app.service('meetings').patch(meetingId, { - remove_participants: ['p1', 'p2'] + remove_participants: [ 'p1', 'p2' ] }, {}).then(function (meeting) { winston.log('info', 'removed participants? :', meeting) - assert(_.isEqual(meeting.participants, ['p3'])) + assert(_.isEqual(meeting.participants, [ 'p3' ])) done() }).catch(function (err) { done(err) @@ -73,9 +73,9 @@ describe('remove participants hook', function () { it('patches without a remove_participant query', function (done) { global.app.service('meetings').patch(meetingId, { - participants: ['p1', 'p2', 'p3', 'p4'] + participants: [ 'p1', 'p2', 'p3', 'p4' ] }).then(function (meeting) { - assert(_.isEqual(meeting.participants, ['p1', 'p2', 'p3', 'p4'])) + assert(_.isEqual(meeting.participants, [ 'p1', 'p2', 'p3', 'p4' ])) done() }).catch(function (err) { done(err) diff --git a/test/services/utterance/index.test.js b/test/services/utterance/index.test.js index 022f0c9..f7d9fb2 100644 --- a/test/services/utterance/index.test.js +++ b/test/services/utterance/index.test.js @@ -18,7 +18,7 @@ describe('utterance service', () => { } var socket = io.connect('http://localhost:3000', { - 'transports': [ + transports: [ 'websocket', 'flashsocket', 'jsonp-polling', diff --git a/test/shared/global-before.js b/test/shared/global-before.js index b301ad0..57120d8 100644 --- a/test/shared/global-before.js +++ b/test/shared/global-before.js @@ -16,7 +16,7 @@ const user = require('../../src/services/user') // winston.level = 'debug' global.socket = io.connect('http://localhost:' + process.env.PORT, { - 'transports': [ + transports: [ 'websocket', 'flashsocket', 'jsonp-polling', From 880fb6b41530079ca4ec8cb3da79181179bb9884 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 14 May 2018 13:34:20 -0400 Subject: [PATCH 33/35] test file changes to pass eslint --- test/services/meeting/meeting-meta.test.js | 94 ++++++++------- .../meeting/participants-event-hook.test.js | 109 ++++++++++-------- .../meeting/remove-participants-hook.test.js | 91 +++++++++------ test/services/participant/index.test.js | 34 +++--- test/services/utterance/index.test.js | 100 +++++++++------- test/shared/global-before.js | 56 +++++---- 6 files changed, 275 insertions(+), 209 deletions(-) diff --git a/test/services/meeting/meeting-meta.test.js b/test/services/meeting/meeting-meta.test.js index 3f6205b..0c0742c 100644 --- a/test/services/meeting/meeting-meta.test.js +++ b/test/services/meeting/meeting-meta.test.js @@ -43,58 +43,70 @@ describe('meta data in meeting', function () { } it('successfully saves a meeting with no metadata', function (done) { - app.service('meetings').create(m1) - .then(function (meeting) { - assert(meeting) - assert(_.isEqual(meeting._id, m1._id)) - done() - }).catch(function (err) { - done(err) - }) + app.service('meetings') + .create(m1) + .then(function (meeting) { + assert(meeting) + assert(_.isEqual(meeting._id, m1._id)) + done() + }) + .catch(function (err) { + done(err) + }) }) it('successfully saves a meeting that has metadata', function (done) { - app.service('meetings').create(m2) - .then(function (meeting) { - assert(_.isEqual(meeting._id, m2._id)) - assert(_.isEqual(meeting.meta, m2.meta)) - done() - }).catch(function (err) { - done(err) - }) + app.service('meetings') + .create(m2) + .then(function (meeting) { + assert(_.isEqual(meeting._id, m2._id)) + assert(_.isEqual(meeting.meta, m2.meta)) + done() + }) + .catch(function (err) { + done(err) + }) }) it('successfully finds a meeting with meta filter', function (done) { - app.service('meetings').find({ query: { meta: { key: 'value' } } }) - .then(function (meetings) { - assert(meetings) - assert(_.isEqual(meetings[0]._id, 'meeting-metadata-1')) - assert(_.isEqual(meetings[0].meta, m2.meta)) - done() - }).catch(function (err) { - done(err) - }) + app.service('meetings') + .find({ query: { meta: { key: 'value' } } }) + .then(function (meetings) { + assert(meetings) + assert(_.isEqual(meetings[0]._id, 'meeting-metadata-1')) + assert(_.isEqual(meetings[0].meta, m2.meta)) + done() + }) + .catch(function (err) { + done(err) + }) }) it('successfully finds the meeting after url decoding the meta fields', function (done) { - app.service('meetings').create(m3).then(function (meeting) { - app.service('meetings').find({ query: { meta: { key: 'value%20with%20spaces' } } }) - .then(function (meetings) { - assert(meetings[0]._id === 'meeting-metadata-3') - done() - }).catch(function (err) { - done(err) - }) - }) + app.service('meetings') + .create(m3) + .then(function (meeting) { + app.service('meetings') + .find({ query: { meta: { key: 'value%20with%20spaces' } } }) + .then(function (meetings) { + assert(meetings[0]._id === 'meeting-metadata-3') + done() + }) + .catch(function (err) { + done(err) + }) + }) }) it('doesnt find a meeting with meta when there isnt one', function (done) { - app.service('meetings').find({ query: { meta: { key: 'not value' } } }) - .then(function (meetings) { - assert(_.isEmpty(meetings)) - done() - }).catch(function (err) { - done(err) - }) + app.service('meetings') + .find({ query: { meta: { key: 'not value' } } }) + .then(function (meetings) { + assert(_.isEmpty(meetings)) + done() + }) + .catch(function (err) { + done(err) + }) }) }) diff --git a/test/services/meeting/participants-event-hook.test.js b/test/services/meeting/participants-event-hook.test.js index 79c3674..e3bd79e 100644 --- a/test/services/meeting/participants-event-hook.test.js +++ b/test/services/meeting/participants-event-hook.test.js @@ -21,14 +21,16 @@ function createMeeting () { active: false } - return global.app.service('meetings').create(activeMeeting) - .then(function (meeting) { - assert(meeting.active === false) - n += 1 - return meeting - }).catch(function (err) { - return err - }) + return global.app.service('meetings') + .create(activeMeeting) + .then(function (meeting) { + assert(meeting.active === false) + n += 1 + return meeting + }) + .catch(function (err) { + return err + }) } describe('participants event hook', function () { @@ -39,52 +41,63 @@ describe('participants event hook', function () { var meetingId = null beforeEach(function (done) { - createMeeting().then(function (meeting) { - meetingId = meeting - done() - }).catch(function (err) { - done(err) - }) + createMeeting() + .then(function (meeting) { + meetingId = meeting + done() + }) + .catch(function (err) { + done(err) + }) }) it('creates a participantEvent when a meeting is created', function (done) { - global.app.service('participantEvents').find({ - query: { - meeting: meetingId, - $sort: { timestamp: -1 } - } - }).then(function (participantEvents) { - var participants = participantEvents.data[0].participants - assert(participants.length === 0) - done() - }).catch(function (err) { - done(err) - }) + global.app.service('participantEvents') + .find({ + query: { + meeting: meetingId, + $sort: { timestamp: -1 } + } + }) + .then(function (participantEvents) { + var participants = participantEvents.data[0].participants + assert(participants.length === 0) + done() + }) + .catch(function (err) { + done(err) + }) }) it('creates a participantEvent when a meeting is changed', function (done) { this.timeout = 3000 - global.app.service('meetings').patch(meetingId, { - participants: [ 'p1', 'p2' ] - }).then(function (meeting) { - setTimeout(function () { - global.app.service('participantEvents').find({ - query: { - meeting: meetingId, - $sort: { timestamp: -1 } - } - }).then(function (participantEvents) { - var participants = participantEvents.data[0].participants - assert(_.contains(participants, 'p1')) - assert(_.contains(participants, 'p2')) - assert(participants.length === 2) - done() - }).catch(function (err) { - done(err) - }) - }, 1000) - }).catch(function (err) { - done(err) - }) + global.app.service('meetings') + .patch(meetingId, { + participants: [ 'p1', 'p2' ] + }) + .then(function (meeting) { + setTimeout(function () { + global.app.service('participantEvents') + .find({ + query: { + meeting: meetingId, + $sort: { timestamp: -1 } + } + }) + .then(function (participantEvents) { + var participants = participantEvents.data[0].participants + assert(_.contains(participants, 'p1')) + assert(_.contains(participants, 'p2')) + assert(participants.length === 2) + done() + }) + .catch(function (err) { + done(err) + }) + }, 1000) + }) + .catch(function (err) { + done(err) + }) }) }) diff --git a/test/services/meeting/remove-participants-hook.test.js b/test/services/meeting/remove-participants-hook.test.js index 4edfacc..75964aa 100644 --- a/test/services/meeting/remove-participants-hook.test.js +++ b/test/services/meeting/remove-participants-hook.test.js @@ -22,14 +22,16 @@ function createMeeting () { active: true } - return global.app.service('meetings').create(activeMeeting) - .then(function (meeting) { - assert(meeting.active === true) - n += 1 - return meeting - }).catch(function (err) { - return err - }) + return global.app.service('meetings') + .create(activeMeeting) + .then(function (meeting) { + assert(meeting.active === true) + n += 1 + return meeting + }) + .catch(function (err) { + return err + }) } describe('remove participants hook', function () { @@ -41,44 +43,57 @@ describe('remove participants hook', function () { var meetingId = null beforeEach(function (done) { - createMeeting().then(function (meeting) { - meetingId = meeting - done() - }).catch(function (err) { - done(err) - }) + createMeeting() + .then(function (meeting) { + meetingId = meeting + done() + }) + .catch(function (err) { + done(err) + }) }) afterEach(function (done) { - global.global.app.service('meetings').patch(meetingId, { - participants: [] - }).then((meeting) => { - done() - }).catch((err) => { - done(err) - }) + global.global.app.service('meetings') + .patch(meetingId, { + participants: [] + }) + .then((meeting) => { + done() + }) + .catch((err) => { + done(err) + }) }) it('removes a participant when it receives a remove_participants query ', function (done) { - global.app.service('meetings').patch(meetingId, { - remove_participants: [ 'p1', 'p2' ] - }, {}).then(function (meeting) { - winston.log('info', 'removed participants? :', meeting) - assert(_.isEqual(meeting.participants, [ 'p3' ])) - done() - }).catch(function (err) { - done(err) - }) + /* eslint-disable camelcase */ + global.app.service('meetings') + .patch(meetingId, { + remove_participants: [ 'p1', 'p2' ] + }, {}) + .then(function (meeting) { + winston.log('info', 'removed participants? :', meeting) + assert(_.isEqual(meeting.participants, [ 'p3' ])) + done() + }) + .catch(function (err) { + done(err) + }) + /* eslint-enable camelcase */ }) it('patches without a remove_participant query', function (done) { - global.app.service('meetings').patch(meetingId, { - participants: [ 'p1', 'p2', 'p3', 'p4' ] - }).then(function (meeting) { - assert(_.isEqual(meeting.participants, [ 'p1', 'p2', 'p3', 'p4' ])) - done() - }).catch(function (err) { - done(err) - }) + global.app.service('meetings') + .patch(meetingId, { + participants: [ 'p1', 'p2', 'p3', 'p4' ] + }) + .then(function (meeting) { + assert(_.isEqual(meeting.participants, [ 'p1', 'p2', 'p3', 'p4' ])) + done() + }) + .catch(function (err) { + done(err) + }) }) }) diff --git a/test/services/participant/index.test.js b/test/services/participant/index.test.js index bd02a88..8eb65da 100644 --- a/test/services/participant/index.test.js +++ b/test/services/participant/index.test.js @@ -19,23 +19,27 @@ describe('participant service', () => { it('creates a new participant', function (done) { app.service('participants') - .create(testParticipant, {}) - .then((participant) => { - assert(testParticipant._id === participant._id) - done() - }).catch((err) => { - done(err) - }) + .create(testParticipant, {}) + .then((participant) => { + assert(testParticipant._id === participant._id) + done() + }) + .catch((err) => { + done(err) + }) }) it('patches a participant', function (done) { - app.service('participants').patch(testParticipant._id, { - consent: true - }).then((participant) => { - assert(participant.consent === true) - done() - }).catch((err) => { - done(err) - }) + app.service('participants') + .patch(testParticipant._id, { + consent: true + }) + .then((participant) => { + assert(participant.consent === true) + done() + }) + .catch((err) => { + done(err) + }) }) }) diff --git a/test/services/utterance/index.test.js b/test/services/utterance/index.test.js index f7d9fb2..2a52fee 100644 --- a/test/services/utterance/index.test.js +++ b/test/services/utterance/index.test.js @@ -54,11 +54,13 @@ describe('utterance service', () => { ] before(function (done) { - dropDatabase().then(() => { - socket.emit('meetingJoined', fakeJoinedEvent) - socket.disconnect() - setTimeout(() => { done() }, 400) - }).catch((err) => { done(err) }) + dropDatabase() + .then(() => { + socket.emit('meetingJoined', fakeJoinedEvent) + socket.disconnect() + setTimeout(() => { done() }, 400) + }) + .catch((err) => { done(err) }) }) after(function (done) { @@ -71,51 +73,63 @@ describe('utterance service', () => { }) it('created an utterance', function (done) { - app.service('utterances').create(utterances[0]).then((utter) => { - winston.log('info', 'utterance created', JSON.stringify(utter)) - assert(utter.meeting !== undefined) - assert.equal(utter.startTime.getTime(), utterances[0].startTime) - assert.equal(utter.endTime.getTime(), utterances[0].endTime) - assert.equal(utter.participant, utterances[0].participant) - done() - }).catch((err) => { - done(err) - }) + app.service('utterances') + .create(utterances[0]) + .then((utter) => { + winston.log('info', 'utterance created', JSON.stringify(utter)) + assert(utter.meeting !== undefined) + assert.equal(utter.startTime.getTime(), utterances[0].startTime) + assert.equal(utter.endTime.getTime(), utterances[0].endTime) + assert.equal(utter.participant, utterances[0].participant) + done() + }) + .catch((err) => { + done(err) + }) }) it('created a second utterance', function (done) { - app.service('utterances').create(utterances[1]).then((utter) => { - winston.log('info', 'utterance created', JSON.stringify(utter)) - assert(utter.meeting !== undefined) - assert.equal(utter.startTime.getTime(), utterances[1].startTime) - assert.equal(utter.endTime.getTime(), utterances[1].endTime) - assert.equal(utter.participant, utterances[1].participant) - done() - }).catch((err) => { - done(err) - }) - }) - - it('merged the third utterance', function (done) { - app.service('utterances').create(utterances[2]).then((drop) => { - winston.log('info', 'third utt', JSON.stringify(drop)) - app.service('utterances').find().then((utts) => { - assert.equal(utts.length, 2) - let utter - if (utts[0].startTime === utterances[0].startTime) { - utter = utts[0] - } else { - utter = utts[1] - } + app.service('utterances') + .create(utterances[1]) + .then((utter) => { + winston.log('info', 'utterance created', JSON.stringify(utter)) + assert(utter.meeting !== undefined) assert.equal(utter.startTime.getTime(), utterances[1].startTime) - assert.equal(utter.endTime.getTime(), utterances[2].endTime.getTime()) + assert.equal(utter.endTime.getTime(), utterances[1].endTime) assert.equal(utter.participant, utterances[1].participant) done() - }).catch((err) => { + }) + .catch((err) => { + done(err) + }) + }) + + it('merged the third utterance', function (done) { + app.service('utterances') + .create(utterances[2]) + .then((drop) => { + winston.log('info', 'third utt', JSON.stringify(drop)) + app.service('utterances') + .find() + .then((utts) => { + assert.equal(utts.length, 2) + let utter + if (utts[0].startTime === utterances[0].startTime) { + utter = utts[0] + } else { + utter = utts[1] + } + assert.equal(utter.startTime.getTime(), utterances[1].startTime) + assert.equal(utter.endTime.getTime(), utterances[2].endTime.getTime()) + assert.equal(utter.participant, utterances[1].participant) + done() + }) + .catch((err) => { + done(err) + }) + }) + .catch((err) => { done(err) }) - }).catch((err) => { - done(err) - }) }) }) diff --git a/test/shared/global-before.js b/test/shared/global-before.js index 57120d8..ea308d8 100644 --- a/test/shared/global-before.js +++ b/test/shared/global-before.js @@ -41,23 +41,27 @@ function dropDatabase () { function createUser (mongoClient) { winston.log('info', 'creating user...') return new Promise(function (resolve, reject) { - mongoClient.close().then(function () { - mongoose.connect(mongoUrl) - mongoose.Promise = global.Promise - }) + mongoClient.close() + .then(function () { + mongoose.connect(mongoUrl) + mongoose.Promise = global.Promise + }) var serverNoAuth = feathers().configure(user) // serverNoAuth.listen(3000) - return serverNoAuth.service('users').create({ - email: 'hello', - password: 'password' - }).then((user) => { - winston.info('created user...') - winston.debug(user) - resolve(user) - }).catch((err) => { - winston.log('info', 'error creating user:', err) - reject(err) - }) + return serverNoAuth.service('users') + .create({ + email: 'hello', + password: 'password' + }) + .then((user) => { + winston.info('created user...') + winston.debug(user) + resolve(user) + }) + .catch((err) => { + winston.log('info', 'error creating user:', err) + reject(err) + }) }) } @@ -72,13 +76,15 @@ function authenticate () { client .configure(socketio(global.socket)) .configure(auth(config)) - return client.authenticate({ - strategy: 'local', - email: 'hello', - password: 'password' - }).then((res) => { - return client - }) + return client + .authenticate({ + strategy: 'local', + email: 'hello', + password: 'password' + }) + .then((res) => { + return client + }) } before(function (done) { @@ -87,14 +93,16 @@ before(function (done) { .then((app) => { global.app = app done() - }).catch((err) => { + }) + .catch((err) => { done(err) winston.log('info', '[pre-test] error creating test app:', err) }) }) after(function (done) { - dropDatabase().then(() => { done() }).catch((err) => { done(err) }) + dropDatabase().then(() => { done() }) + .catch((err) => { done(err) }) }) module.exports.dropDatabase = dropDatabase From 4666fe61150747e05a1858c0619b6266d377f588 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Mon, 14 May 2018 14:23:12 -0400 Subject: [PATCH 34/35] updated lint.log w/ report after changes to address easy lint errors What remains needs more review examining the code more closely to see how it should be written. The errors are potentially a source of bugs, the warnings are merely informative for good code style but individual cases may have good reasons and need an eslint override in the file. --- logs/lint.log | 814 ++++++++++++++------------------------------------ 1 file changed, 223 insertions(+), 591 deletions(-) diff --git a/logs/lint.log b/logs/lint.log index 49fee82..30e963c 100644 --- a/logs/lint.log +++ b/logs/lint.log @@ -1,355 +1,106 @@ -/app/src/app.js:19:13: Unexpected chained assignment. [Error/no-multi-assign] -/app/src/app.js:43:8: Unexpected console statement. [Warning/no-console] -/app/src/channels.js:23:24: Expected parentheses around arrow function argument having a body with curly braces. [Error/arrow-parens] -/app/src/events/meetingJoinedEvent.js:9:53: 'meeting' is already declared in the upper scope. [Error/no-shadow] -/app/src/events/meetingJoinedEvent.js:15:41: A space is required after '['. [Error/array-bracket-spacing] -/app/src/events/meetingJoinedEvent.js:15:57: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/events/meetingJoinedEvent.js:16:14: 'meeting' is already declared in the upper scope. [Error/no-shadow] -/app/src/events/meetingJoinedEvent.js:33:56: A space is required after '['. [Error/array-bracket-spacing] -/app/src/events/meetingJoinedEvent.js:33:69: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/events/meetingJoinedEvent.js:35:18: 'participant' is already declared in the upper scope. [Error/no-shadow] -/app/src/events/meetingJoinedEvent.js:38:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/events/meetingJoinedEvent.js:46:19: A space is required after '['. [Error/array-bracket-spacing] -/app/src/events/meetingJoinedEvent.js:46:32: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/events/meetingJoinedEvent.js:50:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/events/meetingJoinedEvent.js:50:17: 'err' is already declared in the upper scope. [Error/no-shadow] -/app/src/events/meetingJoinedEvent.js:60:14: Gratuitous parentheses around expression. [Warning/no-extra-parens] -/app/src/events/meetingJoinedEvent.js:91:20: 'meeting' is already declared in the upper scope. [Error/no-shadow] -/app/src/events/meetingJoinedEvent.js:95:14: Expected line break before `.catch`. [Error/newline-per-chained-call] +/app/src/app.js:44:8: Unexpected console statement. [Warning/no-console] +/app/src/events/meetingJoinedEvent.js:11:12: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:18:16: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:38:16: 'participant' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:57:17: 'err' is already declared in the upper scope. [Error/no-shadow] +/app/src/events/meetingJoinedEvent.js:67:14: Gratuitous parentheses around expression. [Warning/no-extra-parens] +/app/src/events/meetingJoinedEvent.js:100:20: 'meeting' is already declared in the upper scope. [Error/no-shadow] /app/src/index.js:8:3: Unexpected console statement. [Warning/no-console] -/app/src/jobs/end-meeting-job.js:23:6: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/jobs/end-meeting-job.js:37:14: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:37:26: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:44:16: Gratuitous parentheses around expression. [Warning/no-extra-parens] -/app/src/jobs/end-meeting-job.js:53:14: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:54:1: Expected indentation of 14 spaces but found 8. [Error/indent] -/app/src/jobs/end-meeting-job.js:54:25: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:56:6: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/jobs/end-meeting-job.js:60:12: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:61:1: Expected indentation of 12 spaces but found 6. [Error/indent] -/app/src/jobs/end-meeting-job.js:61:23: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:69:59: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:69:91: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/end-meeting-job.js:74:18: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/jobs/end-meeting-job.js:100:54: Each then() should return a value or throw [Error/promise/always-return] -/app/src/jobs/end-meeting-job.js:101:5: Unexpected console statement. [Warning/no-console] -/app/src/jobs/end-meeting-job.js:102:6: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/jobs/end-meeting-job.js:103:5: Unexpected console statement. [Warning/no-console] -/app/src/jobs/end-meeting-job.js:107:31: Expected to return a value at the end of function. [Error/consistent-return] +/app/src/jobs/end-meeting-job.js:108:11: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/end-meeting-job.js:109:7: Unexpected console statement. [Warning/no-console] +/app/src/jobs/end-meeting-job.js:112:7: Unexpected console statement. [Warning/no-console] +/app/src/jobs/end-meeting-job.js:116:31: Expected to return a value at the end of function. [Error/consistent-return] /app/src/jobs/turn-job/turn-analytics.js:17:46: 'turns' is already declared in the upper scope. [Error/no-shadow] -/app/src/jobs/turn-job/turn-analytics.js:43:9: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:43:21: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:43:46: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:43:47: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:44:9: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:44:19: A space is required after '{'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:44:42: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:44:43: A space is required before '}'. [Error/object-curly-spacing] -/app/src/jobs/turn-job/turn-analytics.js:46:16: A space is required after '['. [Error/array-bracket-spacing] -/app/src/jobs/turn-job/turn-analytics.js:46:65: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/jobs/turn-job/turn-analytics.js:48:11: Each then() should return a value or throw [Error/promise/always-return] -/app/src/jobs/turn-job/turn-analytics.js:53:66: 'key' is defined but never used. [Warning/no-unused-vars] -/app/src/jobs/turn-job/turn-analytics.js:83:52: Each then() should return a value or throw [Error/promise/always-return] -/app/src/jobs/turn-job/turn-analytics.js:83:53: 'turn' is defined but never used. [Warning/no-unused-vars] -/app/src/jobs/turn-job/turn-analytics.js:84:66: Each then() should return a value or throw [Error/promise/always-return] -/app/src/jobs/turn-job/turn-analytics.js:84:67: 'newTurn' is defined but never used. [Warning/no-unused-vars] -/app/src/jobs/turn-job/turn-analytics.js:86:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/jobs/turn-job/turn-analytics.js:89:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/jobs/turn-job/turn-analytics.js:91:53: Each then() should return a value or throw [Error/promise/always-return] -/app/src/jobs/turn-job/turn-analytics.js:91:54: 'newTurn' is defined but never used. [Warning/no-unused-vars] -/app/src/jobs/turn-job/turn-analytics.js:93:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/jobs/turn-job/turn-analytics.js:93:17: 'err' is already declared in the upper scope. [Error/no-shadow] -/app/src/jobs/turn-job/turn-analytics.js:97:6: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/middleware/index.js:11:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/scripts/create-default-user.js:10:3: Unnecessarily quoted property 'transports' found. [Error/quote-props] -/app/src/scripts/create-default-user.js:20:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/scripts/create-default-user.js:43:6: Expected line break before `.then`. [Error/newline-per-chained-call] -/app/src/scripts/create-default-user.js:53:6: Expected line break before `.then`. [Error/newline-per-chained-call] -/app/src/scripts/create-default-user.js:53:21: 'userOrTrue' is defined but never used. [Warning/no-unused-vars] -/app/src/scripts/create-default-user.js:59:6: Expected line break before `.then`. [Error/newline-per-chained-call] -/app/src/scripts/create-default-user.js:62:92: Expected to return a value at the end of function. [Error/consistent-return] -/app/src/scripts/create-default-user.js:75:6: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/scripts/index.js:4:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/authentication/index.js:9:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/authentication/index.js:30:35: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/authentication/index.js:30:50: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/face/face-model.js:12:16: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/face/face-model.js:12:49: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/face/face-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/face/face-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/face/face-model.js:15:3: Identifier 'face_delta' is not in camel case. [Error/camelcase] -/app/src/services/face/face-model.js:16:3: Identifier 'norm_smile' is not in camel case. [Error/camelcase] -/app/src/services/face/face-model.js:17:3: Identifier 'delta_array' is not in camel case. [Error/camelcase] -/app/src/services/face/face-model.js:17:16: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/face/face-model.js:17:23: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/face/face-model.js:18:3: Identifier 'x_array' is not in camel case. [Error/camelcase] -/app/src/services/face/face-model.js:18:12: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/face/face-model.js:18:19: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/face/face-model.js:19:3: Identifier 'y_array' is not in camel case. [Error/camelcase] -/app/src/services/face/face-model.js:19:12: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/face/face-model.js:19:19: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/face/hooks/index.js:7:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/face/hooks/index.js:7:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/face/hooks/index.js:10:11: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/face/hooks/index.js:10:20: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/face/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/index.js:17:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/index.js:20:13: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/index.js:21:1: Expected indentation of 13 spaces but found 6. [Error/indent] -/app/src/services/index.js:21:7: Identifier 'auto_reconnect' is not in camel case. [Error/camelcase] -/app/src/services/index.js:22:1: Expected indentation of 13 spaces but found 6. [Error/indent] -/app/src/services/index.js:22:18: A space is required before '}'. [Error/object-curly-spacing] +/app/src/jobs/turn-job/turn-analytics.js:50:11: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:55:68: 'key' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:87:15: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:87:16: 'turn' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:90:19: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:90:20: 'newTurn' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:101:19: Each then() should return a value or throw [Error/promise/always-return] +/app/src/jobs/turn-job/turn-analytics.js:101:20: 'newTurn' is defined but never used. [Warning/no-unused-vars] +/app/src/jobs/turn-job/turn-analytics.js:104:21: 'err' is already declared in the upper scope. [Error/no-shadow] +/app/src/scripts/create-default-user.js:57:21: 'userOrTrue' is defined but never used. [Warning/no-unused-vars] +/app/src/scripts/create-default-user.js:67:94: Expected to return a value at the end of function. [Error/consistent-return] /app/src/services/meeting/hooks/activate-meeting-hook.js:10:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/src/services/meeting/hooks/activate-meeting-hook.js:15:19: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/src/services/meeting/hooks/activate-meeting-hook.js:20:12: 'meetingEvent' is defined but never used. [Warning/no-unused-vars] -/app/src/services/meeting/hooks/add-participant-hook.js:19:63: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/add-participant-hook.js:19:89: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/add-participant-hook.js:23:12: Expected line break before `.catch`. [Error/newline-per-chained-call] /app/src/services/meeting/hooks/apply_unstructured_query-hook.js:11:48: Expected to return a value at the end of arrow function. [Error/consistent-return] -/app/src/services/meeting/hooks/apply_unstructured_query-hook.js:15:15: Use '===' to compare with null. [Error/no-eq-null] -/app/src/services/meeting/hooks/apply_unstructured_query-hook.js:15:28: Expected '===' and instead saw '=='. [Error/eqeqeq] /app/src/services/meeting/hooks/compute-turn-hook.js:11:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/src/services/meeting/hooks/compute-turn-hook.js:15:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:21:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:51:11: Each then() should return a value or throw [Error/promise/always-return] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:55:88: Unexpected parentheses around single function argument having a body with no curly braces. [Error/arrow-parens] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:57:5: Expected catch() or return [Error/promise/catch-or-return] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:62:13: Each then() should return a value or throw [Error/promise/always-return] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:66:68: 'key' is defined but never used. [Warning/no-unused-vars] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:70:75: 'key' is defined but never used. [Warning/no-unused-vars] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:79:40: There should be no space after '['. [Error/computed-property-spacing] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:79:48: There should be no space before ']'. [Error/computed-property-spacing] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:81:28: There should be no space after '['. [Error/computed-property-spacing] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:81:37: There should be no space before ']'. [Error/computed-property-spacing] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:82:72: There should be no space after '['. [Error/computed-property-spacing] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:82:88: There should be no space before ']'. [Error/computed-property-spacing] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:83:93: There should be no space after '['. [Error/computed-property-spacing] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:83:109: There should be no space before ']'. [Error/computed-property-spacing] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:92:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:161:14: Expected line break before `.append`. [Error/newline-per-chained-call] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:165:30: 'i' is defined but never used. [Warning/no-unused-vars] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:218:1: Line 218 exceeds the maximum line length of 120. [Warning/max-len] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:166:30: 'i' is defined but never used. [Warning/no-unused-vars] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:219:1: Line 219 exceeds the maximum line length of 120. [Warning/max-len] /app/src/services/meeting/hooks/deactivate-meeting-hook.js:220:1: Line 220 exceeds the maximum line length of 120. [Warning/max-len] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:262:14: Unexpected console statement. [Warning/no-console] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:265:12: Unexpected console statement. [Warning/no-console] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:270:19: Gratuitous parentheses around expression. [Warning/no-extra-parens] -/app/src/services/meeting/hooks/deactivate-meeting-hook.js:275:16: 'meetingEvent' is defined but never used. [Warning/no-unused-vars] -/app/src/services/meeting/hooks/index.js:14:13: Identifier 'start_time' is not in camel case. [Error/camelcase] -/app/src/services/meeting/hooks/index.js:24:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:24:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:25:11: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:25:45: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:26:9: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:26:38: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:27:11: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:27:22: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:28:10: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:29:1: Expected indentation of 10 spaces but found 4. [Error/indent] -/app/src/services/meeting/hooks/index.js:30:1: Expected indentation of 10 spaces but found 4. [Error/indent] -/app/src/services/meeting/hooks/index.js:30:23: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:35:11: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:35:50: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:36:11: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:36:27: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:37:10: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:37:49: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:39:9: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meeting/hooks/index.js:39:36: A space is required before ']'. [Error/array-bracket-spacing] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:221:1: Line 221 exceeds the maximum line length of 120. [Warning/max-len] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:263:14: Unexpected console statement. [Warning/no-console] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:266:12: Unexpected console statement. [Warning/no-console] +/app/src/services/meeting/hooks/deactivate-meeting-hook.js:276:16: 'meetingEvent' is defined but never used. [Warning/no-unused-vars] /app/src/services/meeting/hooks/participants-event-hook.js:9:18: Expected to return a value at the end of function. [Error/consistent-return] -/app/src/services/meeting/hooks/participants-event-hook.js:15:14: 'participantEvent' is defined but never used. [Warning/no-unused-vars] -/app/src/services/meeting/hooks/participants-event-hook.js:18:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/services/meeting/hooks/remove-participants-hook.js:19:12: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/services/meeting/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/meeting/meeting-model.js:11:8: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/meeting/meeting-model.js:11:21: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/meeting/meeting-model.js:12:18: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/meeting/meeting-model.js:12:51: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/meeting/meeting-model.js:14:14: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/meeting/meeting-model.js:14:46: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/meetingEvent/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/meetingEvent/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/meetingEvent/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/meetingEvent/meetingEvent-model.js:12:12: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/meetingEvent/meetingEvent-model.js:12:41: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/participant/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/participant/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/participant/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/participant/index.js:12:7: Unquoted reserved word 'default' used as key. [Error/quote-props] -/app/src/services/participant/participant-model.js:16:14: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/participant/participant-model.js:16:43: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/participantEvent/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/participantEvent/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/participantEvent/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/participantEvent/index.js:13:7: Unquoted reserved word 'default' used as key. [Error/quote-props] -/app/src/services/participantEvent/participantEvent-model.js:12:18: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/participantEvent/participantEvent-model.js:12:51: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/participantEvent/participantEvent-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/participantEvent/participantEvent-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/turn/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/turn/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/turn/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/turn/turn-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/turn/turn-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/turn/turn-model.js:20:18: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/turn/turn-model.js:20:51: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/user/hooks/index.js:39:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/user/hooks/index.js:39:57: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/user/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/user/index.js:13:7: Unquoted reserved word 'default' used as key. [Error/quote-props] -/app/src/services/user/user-model.js:9:10: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/user/user-model.js:9:53: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/index.js:10:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/utterance/hooks/index.js:10:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/utterance/hooks/index.js:13:11: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/utterance/hooks/index.js:13:69: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/utterance/hooks/mergeHook.js:10:14: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/mergeHook.js:10:26: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/meeting/hooks/participants-event-hook.js:17:14: 'participantEvent' is defined but never used. [Warning/no-unused-vars] /app/src/services/utterance/hooks/mergeHook.js:22:9: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/src/services/utterance/hooks/mergeHook.js:25:7: Expected catch() or return [Error/promise/catch-or-return] /app/src/services/utterance/hooks/mergeHook.js:28:15: Each then() should return a value or throw [Error/promise/always-return] -/app/src/services/utterance/hooks/participant-consented-hook.js:9:34: Expected to return a value at the end of arrow function. [Error/consistent-return] -/app/src/services/utterance/hooks/participant-consented-hook.js:10:16: Each then() should return a value or throw [Error/promise/always-return] -/app/src/services/utterance/hooks/participant-consented-hook.js:14:32: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/participant-consented-hook.js:14:33: Unnecessarily quoted property 'created' found. [Error/quote-props] -/app/src/services/utterance/hooks/participant-consented-hook.js:14:49: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/participant-consented-hook.js:16:17: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/src/services/utterance/hooks/participant-consented-hook.js:18:30: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/participant-consented-hook.js:18:31: Unnecessarily quoted property 'created' found. [Error/quote-props] -/app/src/services/utterance/hooks/participant-consented-hook.js:18:47: A space is required before '}'. [Error/object-curly-spacing] +/app/src/services/utterance/hooks/participant-consented-hook.js:10:25: Expected to return a value at the end of arrow function. [Error/consistent-return] +/app/src/services/utterance/hooks/participant-consented-hook.js:11:7: Each then() should return a value or throw [Error/promise/always-return] /app/src/services/utterance/hooks/repeatHook.js:9:3: Expected catch() or return [Error/promise/catch-or-return] -/app/src/services/utterance/hooks/repeatHook.js:12:16: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/repeatHook.js:12:43: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/repeatHook.js:13:16: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/repeatHook.js:13:51: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/utterance/hooks/repeatHook.js:16:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:17:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:18:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:19:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:20:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:21:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:22:1: Expected indentation of 27 spaces but found 29. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:23:1: Expected indentation of 29 spaces but found 31. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:24:1: Expected indentation of 54 spaces but found 58. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:25:1: Expected indentation of 29 spaces but found 31. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:26:1: Expected indentation of 52 spaces but found 56. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:27:1: Expected indentation of 29 spaces but found 31. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:27:39: Gratuitous parentheses around expression. [Warning/no-extra-parens] -/app/src/services/utterance/hooks/repeatHook.js:29:1: Expected indentation of 27 spaces but found 29. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:30:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:31:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:32:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:33:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:34:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:35:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:36:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:37:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:38:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:39:1: Expected indentation of 6 spaces but found 8. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:40:1: Expected indentation of 4 spaces but found 6. [Error/indent] -/app/src/services/utterance/hooks/repeatHook.js:41:1: Expected indentation of 2 spaces but found 4. [Error/indent] +/app/src/services/utterance/hooks/repeatHook.js:28:39: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/src/services/utterance/hooks/roomHook.js:3:16: Expected to return a value at the end of function. [Error/consistent-return] /app/src/services/utterance/hooks/roomHook.js:9:3: Expected catch() or return [Error/promise/catch-or-return] -/app/src/services/utterance/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/utterance/utterance-model.js:12:16: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utterance/utterance-model.js:12:49: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/utterance/utterance-model.js:13:12: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utterance/utterance-model.js:13:41: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/utteranceDistribution/hooks/index.js:6:8: A space is required after '['. [Error/array-bracket-spacing] -/app/src/services/utteranceDistribution/hooks/index.js:6:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/src/services/utteranceDistribution/index.js:8:9: Unexpected alias 'app' for 'this'. [Error/consistent-this] -/app/src/services/utteranceDistribution/index.js:13:7: Unquoted reserved word 'default' used as key. [Error/quote-props] -/app/src/services/utteranceDistribution/utteranceDistribution-model.js:12:12: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utteranceDistribution/utteranceDistribution-model.js:12:41: A space is required before '}'. [Error/object-curly-spacing] -/app/src/services/utteranceDistribution/utteranceDistribution-model.js:14:18: A space is required after '{'. [Error/object-curly-spacing] -/app/src/services/utteranceDistribution/utteranceDistribution-model.js:14:51: A space is required before '}'. [Error/object-curly-spacing] -/app/test/events/index.test.js:18:5: Unnecessarily quoted property 'transports' found. [Error/quote-props] /app/test/events/index.test.js:27:38: 'room' is defined but never used. [Warning/no-unused-vars] /app/test/events/index.test.js:28:5: Expected catch() or return [Error/promise/catch-or-return] -/app/test/events/index.test.js:28:89: Each then() should return a value or throw [Error/promise/always-return] -/app/test/events/index.test.js:34:17: Each then() should return a value or throw [Error/promise/always-return] -/app/test/events/index.test.js:34:18: 'meeting' is already declared in the upper scope. [Error/no-shadow] -/app/test/events/index.test.js:36:12: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/events/index.test.js:37:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/events/index.test.js:44:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/events/index.test.js:48:26: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/events/index.test.js:49:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/events/index.test.js:60:19: Each then() should return a value or throw [Error/promise/always-return] -/app/test/events/index.test.js:64:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/events/index.test.js:65:16: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/events/index.test.js:68:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/events/index.test.js:74:48: Each then() should return a value or throw [Error/promise/always-return] -/app/test/events/index.test.js:82:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/events/index.test.js:83:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:30:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:38:19: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:38:20: 'meeting' is already declared in the upper scope. [Error/no-shadow] +/app/test/events/index.test.js:42:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:50:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:54:28: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:56:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:68:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:72:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:77:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/events/index.test.js:85:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/events/index.test.js:95:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/events/meetingEvent.test.js:11:25: Each then() should return a value or throw [Error/promise/always-return] /app/test/events/meetingEvent.test.js:11:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/events/meetingEvent.test.js:12:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/events/meetingEvent.test.js:26:21: Unnecessarily quoted property 'transports' found. [Error/quote-props] -/app/test/events/meetingEvent.test.js:32:6: A space is required before '}'. [Error/object-curly-spacing] -/app/test/helpers/index.test.js:15:45: A space is required after '['. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:15:49: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:26:10: A space is required after '{'. [Error/object-curly-spacing] -/app/test/helpers/index.test.js:26:15: A space is required before '}'. [Error/object-curly-spacing] -/app/test/helpers/index.test.js:30:45: A space is required after '['. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:30:49: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:32:10: A space is required after '{'. [Error/object-curly-spacing] -/app/test/helpers/index.test.js:32:15: A space is required before '}'. [Error/object-curly-spacing] -/app/test/helpers/index.test.js:41:10: A space is required after '['. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:41:15: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:45:45: A space is required after '['. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:45:49: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:47:10: A space is required after '['. [Error/array-bracket-spacing] -/app/test/helpers/index.test.js:47:15: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/jobs/end-meeting-job.test.js:45:19: A space is required after '['. [Error/array-bracket-spacing] -/app/test/jobs/end-meeting-job.test.js:45:68: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/jobs/end-meeting-job.test.js:54:22: 'meeting' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/end-meeting-job.test.js:55:59: 'list' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/end-meeting-job.test.js:56:10: Expected catch() or return [Error/promise/catch-or-return] -/app/test/jobs/end-meeting-job.test.js:56:70: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:59:9: Expected line break before `.then`. [Error/newline-per-chained-call] -/app/test/jobs/end-meeting-job.test.js:59:24: 'participants' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/end-meeting-job.test.js:63:8: Function expected no return value. [Error/consistent-return] -/app/test/jobs/end-meeting-job.test.js:69:9: Expected line break before `.then`. [Error/newline-per-chained-call] -/app/test/jobs/end-meeting-job.test.js:69:24: 'utterance' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/end-meeting-job.test.js:70:8: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:71:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:73:9: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/jobs/end-meeting-job.test.js:76:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:98:68: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:100:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:103:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:108:68: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:110:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:113:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:132:15: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:134:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:135:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/jobs/end-meeting-job.test.js:136:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:144:15: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:146:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:147:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/jobs/end-meeting-job.test.js:148:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:170:42: A space is required after '['. [Error/array-bracket-spacing] -/app/test/jobs/end-meeting-job.test.js:170:69: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/jobs/end-meeting-job.test.js:171:26: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:175:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:177:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:182:42: A space is required after '['. [Error/array-bracket-spacing] -/app/test/jobs/end-meeting-job.test.js:182:103: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/jobs/end-meeting-job.test.js:183:26: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/end-meeting-job.test.js:187:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/end-meeting-job.test.js:189:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:36:17: A space is required after '['. [Error/array-bracket-spacing] -/app/test/jobs/turn-job/index.test.js:36:37: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/jobs/end-meeting-job.test.js:55:21: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:56:58: 'list' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:57:9: Expected catch() or return [Error/promise/catch-or-return] +/app/test/jobs/end-meeting-job.test.js:57:69: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:61:21: 'participants' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:65:7: Function expected no return value. [Error/consistent-return] +/app/test/jobs/end-meeting-job.test.js:72:21: 'utterance' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/end-meeting-job.test.js:73:7: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:74:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:80:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:102:68: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:104:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:107:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:112:68: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:114:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:117:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:138:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:140:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:143:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:153:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:155:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:158:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:181:26: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:185:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:188:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:194:26: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/end-meeting-job.test.js:198:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/end-meeting-job.test.js:201:22: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/jobs/turn-job/index.test.js:46:27: 'n' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/turn-job/index.test.js:46:44: Unnecessarily quoted property 'timestamp' found. [Error/quote-props] -/app/test/jobs/turn-job/index.test.js:46:62: Unnecessarily quoted property 'vol' found. [Error/quote-props] /app/test/jobs/turn-job/index.test.js:52:27: 'n' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/turn-job/index.test.js:52:44: Unnecessarily quoted property 'timestamp' found. [Error/quote-props] -/app/test/jobs/turn-job/index.test.js:52:62: Unnecessarily quoted property 'vol' found. [Error/quote-props] /app/test/jobs/turn-job/index.test.js:58:27: 'n' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/turn-job/index.test.js:58:44: Unnecessarily quoted property 'timestamp' found. [Error/quote-props] -/app/test/jobs/turn-job/index.test.js:58:62: Unnecessarily quoted property 'vol' found. [Error/quote-props] /app/test/jobs/turn-job/index.test.js:64:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/test/jobs/turn-job/index.test.js:67:10: Gratuitous parentheses around expression. [Warning/no-extra-parens] /app/test/jobs/turn-job/index.test.js:72:5: Expected catch() or return [Error/promise/catch-or-return] @@ -360,179 +111,99 @@ /app/test/jobs/turn-job/index.test.js:78:27: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/jobs/turn-job/index.test.js:84:17: Each then() should return a value or throw [Error/promise/always-return] /app/test/jobs/turn-job/index.test.js:87:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:88:14: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/jobs/turn-job/index.test.js:89:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:94:40: 'done' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/turn-job/index.test.js:105:40: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/turn-job/index.test.js:105:41: 'utterances' is defined but never used. [Warning/no-unused-vars] -/app/test/jobs/turn-job/index.test.js:105:58: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:106:52: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:117:15: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/turn-job/index.test.js:124:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:125:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/jobs/turn-job/index.test.js:126:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:129:1: Expected indentation of 6 spaces but found 13. [Error/indent] -/app/test/jobs/turn-job/index.test.js:136:16: Each then() should return a value or throw [Error/promise/always-return] -/app/test/jobs/turn-job/index.test.js:138:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/jobs/turn-job/index.test.js:139:11: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/jobs/turn-job/index.test.js:140:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/load.test.js:20:11: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/jobs/turn-job/index.test.js:90:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:95:40: 'done' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:106:18: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:106:19: 'utterances' is defined but never used. [Warning/no-unused-vars] +/app/test/jobs/turn-job/index.test.js:106:36: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:107:30: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:120:15: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:127:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:130:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:140:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/jobs/turn-job/index.test.js:142:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/jobs/turn-job/index.test.js:145:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/load.test.js:43:35: 'n' is defined but never used. [Warning/no-unused-vars] -/app/test/load.test.js:48:13: Identifier 'start_time' is not in camel case. [Error/camelcase] -/app/test/load.test.js:49:13: Identifier 'end_time' is not in camel case. [Error/camelcase] -/app/test/load.test.js:51:13: Identifier 'face_delta' is not in camel case. [Error/camelcase] -/app/test/load.test.js:52:13: Identifier 'delta_array' is not in camel case. [Error/camelcase] -/app/test/load.test.js:52:39: 'n' is defined but never used. [Warning/no-unused-vars] -/app/test/load.test.js:52:54: A space is required after '['. [Error/array-bracket-spacing] -/app/test/load.test.js:52:77: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/load.test.js:69:7: Unnecessarily quoted property 'transports' found. [Error/quote-props] -/app/test/load.test.js:91:20: 'i' is already declared in the upper scope. [Error/no-shadow] -/app/test/services/face/index.test.js:18:5: Identifier 'y_array' is not in camel case. [Error/camelcase] -/app/test/services/face/index.test.js:19:5: Identifier 'x_array' is not in camel case. [Error/camelcase] -/app/test/services/face/index.test.js:20:5: Identifier 'delta_array' is not in camel case. [Error/camelcase] -/app/test/services/face/index.test.js:34:5: Unnecessarily quoted property 'transports' found. [Error/quote-props] -/app/test/services/face/index.test.js:44:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/face/index.test.js:47:26: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/face/index.test.js:48:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/face/index.test.js:52:44: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/face/index.test.js:55:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/face/index.test.js:56:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/face/index.test.js:56:14: Unexpected parentheses around single function argument having a body with no curly braces. [Error/arrow-parens] -/app/test/services/face/index.test.js:56:23: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/activate-meeting-hook.test.js:22:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/activate-meeting-hook.test.js:23:7: Expected catch() or return [Error/promise/catch-or-return] -/app/test/services/meeting/activate-meeting-hook.test.js:24:19: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/activate-meeting-hook.test.js:26:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/activate-meeting-hook.test.js:28:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/activate-meeting-hook.test.js:34:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/activate-meeting-hook.test.js:34:14: 'meeting' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/activate-meeting-hook.test.js:35:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/activate-meeting-hook.test.js:36:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/activate-meeting-hook.test.js:37:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/activate-meeting-hook.test.js:43:21: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/activate-meeting-hook.test.js:43:26: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/activate-meeting-hook.test.js:44:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/activate-meeting-hook.test.js:47:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/activate-meeting-hook.test.js:48:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/activate-meeting-hook.test.js:49:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:19:19: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:19:30: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:30:16: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/add-participants-hook.test.js:38:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/add-participants-hook.test.js:38:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:39:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:43:26: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/add-participants-hook.test.js:45:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:47:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:54:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/add-participants-hook.test.js:54:14: 'meeting' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/add-participants-hook.test.js:55:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:56:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/add-participants-hook.test.js:57:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:63:7: Identifier 'add_participant' is not in camel case. [Error/camelcase] -/app/test/services/meeting/add-participants-hook.test.js:64:17: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/add-participants-hook.test.js:66:46: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:66:63: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:67:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:68:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/add-participants-hook.test.js:69:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:75:21: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:75:44: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:76:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/add-participants-hook.test.js:77:46: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:77:69: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/add-participants-hook.test.js:78:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/add-participants-hook.test.js:79:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/add-participants-hook.test.js:80:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:40:19: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/deactivate-meeting-hook-test.js:40:93: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/deactivate-meeting-hook-test.js:69:59: 'list' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/deactivate-meeting-hook-test.js:72:55: 'list' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/deactivate-meeting-hook-test.js:78:9: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/deactivate-meeting-hook-test.js:87:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/deactivate-meeting-hook-test.js:87:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:88:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:92:64: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/deactivate-meeting-hook-test.js:94:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:96:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:103:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/deactivate-meeting-hook-test.js:107:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:108:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/deactivate-meeting-hook-test.js:109:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:116:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/deactivate-meeting-hook-test.js:116:23: 'meeting' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/deactivate-meeting-hook-test.js:118:25: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/deactivate-meeting-hook-test.js:118:44: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/deactivate-meeting-hook-test.js:119:25: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/deactivate-meeting-hook-test.js:119:38: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/deactivate-meeting-hook-test.js:121:15: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/deactivate-meeting-hook-test.js:123:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:124:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/deactivate-meeting-hook-test.js:125:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/deactivate-meeting-hook-test.js:127:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/deactivate-meeting-hook-test.js:128:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/index.test.js:12:19: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/index.test.js:12:36: A space is required before ']'. [Error/array-bracket-spacing] +/app/test/load.test.js:53:39: 'n' is defined but never used. [Warning/no-unused-vars] +/app/test/services/face/index.test.js:47:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/face/index.test.js:50:28: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/face/index.test.js:52:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/face/index.test.js:57:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/face/index.test.js:60:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/face/index.test.js:62:21: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:23:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:24:9: Expected catch() or return [Error/promise/catch-or-return] +/app/test/services/meeting/activate-meeting-hook.test.js:26:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:28:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:31:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:39:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:39:14: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/activate-meeting-hook.test.js:40:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:43:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:52:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/activate-meeting-hook.test.js:55:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/activate-meeting-hook.test.js:58:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:40:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:40:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:41:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:46:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:48:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:51:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:60:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:60:14: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/add-participants-hook.test.js:61:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:64:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:74:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:77:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:80:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:90:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/add-participants-hook.test.js:92:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/add-participants-hook.test.js:95:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:70:58: 'list' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/deactivate-meeting-hook-test.js:73:54: 'list' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/deactivate-meeting-hook-test.js:89:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:89:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:90:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:95:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:97:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:100:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:109:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:113:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:116:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:125:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:125:23: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/deactivate-meeting-hook-test.js:132:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/deactivate-meeting-hook-test.js:134:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:137:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/deactivate-meeting-hook-test.js:141:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/services/meeting/index.test.js:17:3: Unexpected console statement. [Warning/no-console] -/app/test/services/meeting/index.test.js:26:14: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/index.test.js:28:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/index.test.js:29:11: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/index.test.js:30:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/index.test.js:26:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/index.test.js:28:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/index.test.js:31:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/services/meeting/meeting-meta.test.js:12:25: Each then() should return a value or throw [Error/promise/always-return] /app/test/services/meeting/meeting-meta.test.js:12:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/services/meeting/meeting-meta.test.js:13:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:33:11: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:33:24: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:42:11: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:42:36: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:47:14: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/meeting-meta.test.js:50:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:51:11: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/meeting-meta.test.js:52:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:58:14: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/meeting-meta.test.js:61:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:62:11: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/meeting-meta.test.js:63:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:68:34: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:68:42: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:68:49: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:68:62: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:68:63: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:68:64: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:69:14: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/meeting-meta.test.js:73:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:74:11: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/meeting-meta.test.js:75:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:80:5: Expected catch() or return [Error/promise/catch-or-return] -/app/test/services/meeting/meeting-meta.test.js:80:45: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/meeting-meta.test.js:80:55: 'meeting' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/meeting-meta.test.js:81:36: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:81:44: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:81:51: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:81:80: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:81:81: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:81:82: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:82:14: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/meeting-meta.test.js:84:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:85:11: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/meeting-meta.test.js:86:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:92:34: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:92:42: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:92:49: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:92:66: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:92:67: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:92:68: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/meeting-meta.test.js:93:14: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/meeting-meta.test.js:95:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/meeting-meta.test.js:96:11: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/meeting-meta.test.js:97:10: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:48:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:51:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:54:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:61:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:64:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:67:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:74:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:78:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:81:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:86:5: Expected catch() or return [Error/promise/catch-or-return] +/app/test/services/meeting/meeting-meta.test.js:88:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:88:23: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/meeting-meta.test.js:91:17: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:93:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:96:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:104:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/meeting-meta.test.js:106:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/meeting-meta.test.js:109:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/services/meeting/participant-changed.test.js:11:25: Each then() should return a value or throw [Error/promise/always-return] /app/test/services/meeting/participant-changed.test.js:11:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/services/meeting/participant-changed.test.js:12:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participant-changed.test.js:19:21: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/participant-changed.test.js:19:38: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/participant-changed.test.js:22:27: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/participant-changed.test.js:22:38: A space is required before ']'. [Error/array-bracket-spacing] /app/test/services/meeting/participant-changed.test.js:31:45: Each then() should return a value or throw [Error/promise/always-return] /app/test/services/meeting/participant-changed.test.js:31:55: 'meeting' is defined but never used. [Warning/no-unused-vars] /app/test/services/meeting/participant-changed.test.js:34:15: Each then() should return a value or throw [Error/promise/always-return] @@ -540,10 +211,6 @@ /app/test/services/meeting/participant-changed.test.js:34:25: 'meeting' is already declared in the upper scope. [Error/no-shadow] /app/test/services/meeting/participant-changed.test.js:36:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/services/meeting/participant-changed.test.js:39:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participant-changed.test.js:47:21: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/participant-changed.test.js:47:32: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/participant-changed.test.js:50:27: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/participant-changed.test.js:50:44: A space is required before ']'. [Error/array-bracket-spacing] /app/test/services/meeting/participant-changed.test.js:59:45: Each then() should return a value or throw [Error/promise/always-return] /app/test/services/meeting/participant-changed.test.js:59:55: 'meeting' is defined but never used. [Warning/no-unused-vars] /app/test/services/meeting/participant-changed.test.js:62:15: Each then() should return a value or throw [Error/promise/always-return] @@ -551,110 +218,75 @@ /app/test/services/meeting/participant-changed.test.js:62:25: 'meeting' is defined but never used. [Warning/no-unused-vars] /app/test/services/meeting/participant-changed.test.js:65:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/services/meeting/participant-changed.test.js:68:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:29:16: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/participants-event-hook.test.js:36:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/participants-event-hook.test.js:36:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:37:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:42:26: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/participants-event-hook.test.js:44:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:46:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:54:16: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/participants-event-hook.test.js:54:30: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/participants-event-hook.test.js:56:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/participants-event-hook.test.js:59:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:60:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/participants-event-hook.test.js:61:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:68:21: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/participants-event-hook.test.js:68:32: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/participants-event-hook.test.js:69:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/participants-event-hook.test.js:69:23: 'meeting' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/participants-event-hook.test.js:74:20: A space is required after '{'. [Error/object-curly-spacing] -/app/test/services/meeting/participants-event-hook.test.js:74:34: A space is required before '}'. [Error/object-curly-spacing] -/app/test/services/meeting/participants-event-hook.test.js:76:17: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/participants-event-hook.test.js:81:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:82:12: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/participants-event-hook.test.js:83:11: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/participants-event-hook.test.js:86:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/participants-event-hook.test.js:87:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:19:19: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:19:36: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:30:16: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/remove-participants-hook.test.js:37:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/remove-participants-hook.test.js:37:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:38:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:44:26: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/remove-participants-hook.test.js:46:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:48:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:55:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/remove-participants-hook.test.js:55:14: 'meeting' is defined but never used. [Warning/no-unused-vars] -/app/test/services/meeting/remove-participants-hook.test.js:56:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:57:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/remove-participants-hook.test.js:58:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:64:7: Identifier 'remove_participants' is not in camel case. [Error/camelcase] -/app/test/services/meeting/remove-participants-hook.test.js:64:28: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:64:39: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:65:17: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/remove-participants-hook.test.js:67:46: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:67:51: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:68:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:69:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/remove-participants-hook.test.js:70:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:76:21: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:76:44: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:77:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/meeting/remove-participants-hook.test.js:78:46: A space is required after '['. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:78:69: A space is required before ']'. [Error/array-bracket-spacing] -/app/test/services/meeting/remove-participants-hook.test.js:79:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/meeting/remove-participants-hook.test.js:80:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/meeting/remove-participants-hook.test.js:81:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/participant/index.test.js:23:11: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/participant/index.test.js:25:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/participant/index.test.js:26:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/participant/index.test.js:27:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/participant/index.test.js:34:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/participant/index.test.js:36:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/participant/index.test.js:37:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/participant/index.test.js:38:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:21:5: Unnecessarily quoted property 'transports' found. [Error/quote-props] -/app/test/services/utterance/index.test.js:57:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/utterance/index.test.js:60:26: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:61:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:65:5: Expected catch() or return [Error/promise/catch-or-return] -/app/test/services/utterance/index.test.js:65:25: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/utterance/index.test.js:65:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:74:58: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/utterance/index.test.js:80:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:81:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/utterance/index.test.js:82:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:87:58: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/utterance/index.test.js:93:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:94:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/utterance/index.test.js:95:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:100:58: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/utterance/index.test.js:105:9: Each then() should return a value or throw [Error/promise/always-return] -/app/test/services/utterance/index.test.js:113:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:114:10: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/utterance/index.test.js:115:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/services/utterance/index.test.js:117:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/services/utterance/index.test.js:118:7: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/shared/global-before.js:19:3: Unnecessarily quoted property 'transports' found. [Error/quote-props] +/app/test/services/meeting/participants-event-hook.test.js:38:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:38:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:39:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:45:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:47:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:50:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:62:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:65:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:68:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:78:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:78:23: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/participants-event-hook.test.js:87:19: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/participants-event-hook.test.js:92:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:95:15: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/participants-event-hook.test.js:100:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:39:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:39:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:40:37: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:47:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:49:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:52:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:61:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:61:14: 'meeting' is defined but never used. [Warning/no-unused-vars] +/app/test/services/meeting/remove-participants-hook.test.js:62:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:65:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:75:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:78:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:81:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:91:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/meeting/remove-participants-hook.test.js:93:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/meeting/remove-participants-hook.test.js:96:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:23:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/participant/index.test.js:25:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:28:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:37:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/participant/index.test.js:39:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/participant/index.test.js:42:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:58:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:61:28: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:63:25: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:67:5: Expected catch() or return [Error/promise/catch-or-return] +/app/test/services/utterance/index.test.js:67:25: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:67:33: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:78:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:84:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:87:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:94:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:100:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:103:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:110:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:117:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/services/utterance/index.test.js:125:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:128:13: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/services/utterance/index.test.js:132:9: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] /app/test/shared/global-before.js:43:10: Avoid creating new promises. [Warning/promise/avoid-new] /app/test/shared/global-before.js:44:5: Expected catch() or return [Error/promise/catch-or-return] -/app/test/shared/global-before.js:44:30: Each then() should return a value or throw [Error/promise/always-return] -/app/test/shared/global-before.js:53:13: Each then() should return a value or throw [Error/promise/always-return] -/app/test/shared/global-before.js:53:14: 'user' is already declared in the upper scope. [Error/no-shadow] -/app/test/shared/global-before.js:57:8: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/shared/global-before.js:79:12: 'res' is defined but never used. [Warning/no-unused-vars] -/app/test/shared/global-before.js:87:23: Each then() should return a value or throw [Error/promise/always-return] -/app/test/shared/global-before.js:89:19: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/shared/global-before.js:90:20: Expected line break before `.catch`. [Error/newline-per-chained-call] -/app/test/shared/global-before.js:91:19: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/shared/global-before.js:97:23: Each then() should return a value or throw [Error/promise/always-return] -/app/test/shared/global-before.js:97:31: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -/app/test/shared/global-before.js:97:58: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:45:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:56:13: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:56:14: 'user' is already declared in the upper scope. [Error/no-shadow] +/app/test/shared/global-before.js:85:19: 'res' is defined but never used. [Warning/no-unused-vars] +/app/test/shared/global-before.js:93:23: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:95:19: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:98:19: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:104:23: Each then() should return a value or throw [Error/promise/always-return] +/app/test/shared/global-before.js:104:31: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] +/app/test/shared/global-before.js:105:35: Avoid calling back inside of a promise. [Warning/promise/no-callback-in-promise] -654 problems +286 problems ---- Added manually (from the console report) -✖ 654 problems (475 errors, 179 warnings) - 332 errors, 12 warnings potentially fixable with the `--fix` option. +✖ 286 problems (109 errors, 177 warnings) + 0 errors, 10 warnings potentially fixable with the `--fix` option. From 73272f2cc1a294469256e855e1276381ba167db9 Mon Sep 17 00:00:00 2001 From: Mike Lippert Date: Thu, 17 May 2018 11:08:11 -0400 Subject: [PATCH 35/35] Bump pre-release version number to 0.4.0-dev.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 456d986..a78ff1b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "rhythm-server", "description": "server for breakout, a measurement and feedback framework for human communication", - "version": "0.4.0-dev.1", + "version": "0.4.0-dev.2", "homepage": "", "main": "src/", "keywords": [