From 8431e52e0acd90f942ea78a524110d3f4fea6d99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2020 11:01:41 +0000 Subject: [PATCH 01/26] Bump elliptic from 6.5.2 to 6.5.3 Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3. - [Release notes](https://github.com/indutny/elliptic/releases) - [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +- yarn.lock | 1272 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 1229 insertions(+), 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fad270..529a32c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3770,9 +3770,9 @@ "dev": true }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", diff --git a/yarn.lock b/yarn.lock index db7095f..0fc54d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -591,10 +591,99 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@opencensus/core@0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.9.tgz#b16f775435ee309433e4126af194d37313fc93b3" + dependencies: + continuation-local-storage "^3.2.1" + log-driver "^1.2.7" + semver "^5.5.0" + shimmer "^1.2.0" + uuid "^3.2.1" + +"@opencensus/core@^0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.8.tgz#df01f200c2d2fbfe14dae129a1a86fb87286db92" + dependencies: + continuation-local-storage "^3.2.1" + log-driver "^1.2.7" + semver "^5.5.0" + shimmer "^1.2.0" + uuid "^3.2.1" + +"@opencensus/propagation-b3@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@opencensus/propagation-b3/-/propagation-b3-0.0.8.tgz#0751e6fd75f09400d9d3c419001e9e15a0df68e9" + dependencies: + "@opencensus/core" "^0.0.8" + uuid "^3.2.1" + +"@pm2/agent-node@^1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@pm2/agent-node/-/agent-node-1.1.10.tgz#29fafc9d1b75288dec87b6af1216ddfab8ea9b06" + dependencies: + debug "^3.1.0" + eventemitter2 "^5.0.1" + proxy-agent "^3.0.3" + ws "^6.0.0" + +"@pm2/agent@~1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@pm2/agent/-/agent-1.0.4.tgz#1a7275e1415cd26a530405816ff5e453abb8fd8c" + dependencies: + async "~3.2.0" + chalk "~3.0.0" + dayjs "~1.8.24" + debug "~4.1.1" + eventemitter2 "~5.0.1" + fclone "~1.0.11" + nssocket "0.6.0" + pm2-axon "^3.2.0" + pm2-axon-rpc "^0.5.0" + proxy-agent "~3.1.1" + semver "~7.2.0" + ws "~7.2.0" + +"@pm2/io@~4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@pm2/io/-/io-4.3.5.tgz#57025ab821fd09d2afe6d0ab981f8a39ccec8860" + dependencies: + "@opencensus/core" "0.0.9" + "@opencensus/propagation-b3" "0.0.8" + "@pm2/agent-node" "^1.1.10" + async "~2.6.1" + debug "4.1.1" + eventemitter2 "^6.3.1" + require-in-the-middle "^5.0.0" + semver "6.3.0" + shimmer "^1.2.0" + signal-exit "^3.0.3" + tslib "1.9.3" + +"@pm2/js-api@~0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@pm2/js-api/-/js-api-0.6.0.tgz#6c549e4579b5004e685cf727b4eaa41cf3cfbfe9" + dependencies: + async "^2.6.3" + axios "^0.19.0" + debug "~3.2.6" + eventemitter2 "^6.3.1" + ws "^7.0.0" + +"@pm2/pm2-version-check@latest": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@pm2/pm2-version-check/-/pm2-version-check-1.0.3.tgz#4ec5abaeee45c98dce3640f13861058c29f312c5" + dependencies: + debug "^4.1.1" + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -802,6 +891,14 @@ version "4.2.2" resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" +"@zxing/library@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@zxing/library/-/library-0.15.2.tgz#3026071aca80a84af09706dffa1d386053e11efc" + dependencies: + ts-custom-error "^3.0.0" + optionalDependencies: + text-encoding "^0.7.0" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -821,6 +918,28 @@ acorn@^6.0.7, acorn@^6.2.1: version "6.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + +agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + dependencies: + es6-promisify "^5.0.0" + +agent-base@6: + version "6.0.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" + dependencies: + debug "4" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + dependencies: + es6-promisify "^5.0.0" + aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" @@ -854,6 +973,15 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -862,7 +990,17 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-colors@^3.0.0: +amp-message@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45" + dependencies: + amp "0.3.1" + +amp@0.3.1, amp@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" + +ansi-colors@^3.0.0, ansi-colors@^3.2.1: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -892,6 +1030,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -899,6 +1044,13 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -954,6 +1106,10 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -962,6 +1118,15 @@ asn1.js@^4.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +asn1.js@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -983,6 +1148,10 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" +ast-types@0.x.x: + version "0.13.3" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -995,12 +1164,27 @@ async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" -async@^2.4.1, async@^2.6.2: +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + +async@1.5: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.4.1, async@^2.6.2, async@^2.6.3, async@~2.6.1: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" dependencies: lodash "^4.17.14" +async@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1017,6 +1201,12 @@ aws4@^1.8.0: version "1.9.1" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + dependencies: + follow-redirects "1.5.10" + babel-loader@~8.0: version "8.0.6" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" @@ -1032,14 +1222,26 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.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.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1062,6 +1264,12 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +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" + bfj@^6.1.1: version "6.1.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" @@ -1083,6 +1291,10 @@ binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1096,6 +1308,14 @@ bl@^2.2.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +blessed@0.1.81: + version "0.1.81" + resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1111,8 +1331,8 @@ bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" body-parser@1.19.0, body-parser@^1.19.0: version "1.19.0" @@ -1144,6 +1364,10 @@ boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" +bowser@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.9.0.tgz#3bed854233b419b9a7422d9ee3e85504373821c9" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1166,6 +1390,12 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1246,6 +1476,10 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" +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-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -1376,6 +1610,10 @@ caller-path@^2.0.0: dependencies: caller-callsite "^2.0.0" +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -1410,6 +1648,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" +camelize@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -1427,6 +1669,13 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" +chalk@3.0.0, chalk@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.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" @@ -1445,6 +1694,10 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +charm@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" + chart.js@^2.9.3: version "2.9.3" resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.3.tgz#ae3884114dafd381bc600f5b35a189138aac1ef7" @@ -1487,6 +1740,20 @@ chokidar@^2.0.0, chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.3.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.0.1, chownr@^1.1.1, chownr@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" @@ -1530,6 +1797,12 @@ clean-webpack-plugin@^3.0.0: "@types/webpack" "^4.4.31" del "^4.1.1" +cli-tableau@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/cli-tableau/-/cli-tableau-2.0.1.tgz#baa78d83e08a2d7ab79b7dad9406f0254977053f" + dependencies: + chalk "3.0.0" + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -1592,11 +1865,17 @@ color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -1620,6 +1899,10 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -1640,10 +1923,22 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" -component-emitter@^1.2.1: +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.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" +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.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -1661,7 +1956,7 @@ compression-webpack-plugin@^3.1.0: serialize-javascript "^2.1.2" webpack-sources "^1.0.1" -compression@^1.5.2: +compression@^1.5.2, compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" dependencies: @@ -1720,10 +2015,21 @@ content-disposition@0.5.3: dependencies: safe-buffer "5.1.2" +content-security-policy-builder@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz#0a2364d769a3d7014eec79ff7699804deb8cfcbb" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" +continuation-local-storage@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + convert-source-map@^1.1.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -1734,6 +2040,10 @@ 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" + cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" @@ -1805,6 +2115,19 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +cron-parser@^2.7.3: + version "2.15.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.15.0.tgz#04803cd51d8efcfcc6f83ac08e60f3f8c40c7ec5" + dependencies: + is-nan "^1.3.0" + moment-timezone "^0.5.31" + +cron@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" + dependencies: + moment-timezone "^0.5.x" + cross-env@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" @@ -2013,31 +2336,43 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +dasherize@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz#6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308" + +data-uri-to-buffer@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" + +dayjs@~1.8.24, dayjs@~1.8.25: + version "1.8.31" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.31.tgz#0cd1114c2539dd5ad9428be0c38df6d4bb40b9d3" + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@3.1.0: +debug@3.1.0, debug@=3.1.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" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" +debug@4, debug@4.1.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0, debug@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: ms "^2.1.1" -debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" +debug@^3.0, debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6, debug@~3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" dependencies: ms "^2.1.1" @@ -2066,6 +2401,10 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + default-gateway@^2.6.0: version "2.7.2" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f" @@ -2098,6 +2437,14 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +degenerator@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" + dependencies: + ast-types "0.x.x" + escodegen "1.x.x" + esprima "3.x.x" + del@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" @@ -2133,14 +2480,14 @@ denque@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" -depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -2234,6 +2581,10 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +dont-sniff-mimetype@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz#c7d0427f8bcb095762751252af59d148b0a623b2" + dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" @@ -2260,6 +2611,12 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + dependencies: + 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" @@ -2273,8 +2630,8 @@ electron-to-chromium@^1.3.338: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2284,6 +2641,12 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + dependencies: + shimmer "^1.2.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2302,6 +2665,43 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" +engine.io-client@~3.4.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.3.tgz#192d09865403e3097e3575ebfeb3861c4d01a66c" + dependencies: + component-emitter "~1.3.0" + component-inherit "0.0.3" + debug "~4.1.0" + engine.io-parser "~2.2.0" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.2.tgz#8fc84ee00388e3e228645e0a7d3dfaeed5bd122c" + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "0.3.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "^7.1.2" + enhanced-resolve@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" @@ -2310,6 +2710,12 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +enquirer@2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.5.tgz#3ab2b838df0a9d8ab9e7dff235b0e8712ef92381" + dependencies: + ansi-colors "^3.2.1" + entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -2360,18 +2766,39 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.0.5: +es6-promise@^4.0.3, es6-promise@^4.0.5: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + dependencies: + es6-promise "^4.0.3" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" +escape-regexp@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/escape-regexp/-/escape-regexp-0.0.1.tgz#f44bda12d45bbdf9cb7f862ee7e4827b3dd32254" + 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.x.x: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -2379,7 +2806,11 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^4.0.0: +esprima@3.x.x: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -2389,7 +2820,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -2401,6 +2832,18 @@ etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" +eventemitter2@5.0.1, eventemitter2@^5.0.1, eventemitter2@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" + +eventemitter2@^6.3.1: + version "6.4.3" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.3.tgz#35c563619b13f3681e7eb05cbdaf50f56ba58820" + +eventemitter2@~0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -2571,6 +3014,10 @@ fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -2583,6 +3030,18 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" +fclone@1.0.11, fclone@~1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640" + +feature-policy@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.3.0.tgz#7430e8e54a40da01156ca30aaec1a381ce536069" + +feature-policy@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.4.0.tgz#85a3a44f77f41b5535f30117ba8aa99b80a08b4c" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -2594,7 +3053,7 @@ file-loader@^4.2.0: loader-utils "^1.2.3" schema-utils "^2.5.0" -file-uri-to-path@1.0.0: +file-uri-to-path@1, file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -2611,6 +3070,12 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -2689,6 +3154,12 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" @@ -2776,6 +3247,10 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" @@ -2785,6 +3260,13 @@ fstream@^1.0.0, fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" +ftp@~0.3.10: + version "0.3.10" + resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2834,6 +3316,17 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-uri@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" + dependencies: + data-uri-to-buffer "1" + debug "2" + extend "~3.0.2" + file-uri-to-path "1" + ftp "~0.3.10" + readable-stream "2" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -2851,7 +3344,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" dependencies: @@ -2934,16 +3433,37 @@ har-validator@~5.1.0: ajv "^6.5.5" har-schema "^2.0.0" +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + dependencies: + ajv "^6.12.3" + 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-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + dependencies: + isarray "2.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@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -3007,10 +3527,43 @@ he@1.2.x, he@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" +helmet-crossdomain@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e" + +helmet-csp@2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.10.0.tgz#685dde1747bc16c5e28ad9d91e229a69f0a85e84" + dependencies: + bowser "2.9.0" + camelize "1.0.0" + content-security-policy-builder "2.1.0" + dasherize "2.0.0" + +helmet@^3.21.2: + version "3.23.3" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.23.3.tgz#5ba30209c5f73ded4ab65746a3a11bedd4579ab7" + dependencies: + depd "2.0.0" + dont-sniff-mimetype "1.1.0" + feature-policy "0.3.0" + helmet-crossdomain "0.4.0" + helmet-csp "2.10.0" + hide-powered-by "1.1.0" + hpkp "2.0.0" + hsts "2.2.0" + nocache "2.1.0" + referrer-policy "1.2.0" + x-xss-protection "1.3.0" + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" +hide-powered-by@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.1.0.tgz#be3ea9cab4bdb16f8744be873755ca663383fa7a" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -3042,6 +3595,10 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +hpkp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hpkp/-/hpkp-2.0.0.tgz#10e142264e76215a5d30c44ec43de64dee6d1672" + hsl-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" @@ -3050,6 +3607,12 @@ hsla-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" +hsts@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hsts/-/hsts-2.2.0.tgz#09119d42f7a8587035d027dda4522366fe75d964" + dependencies: + depd "2.0.0" + html-comment-regex@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" @@ -3107,16 +3670,7 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: +http-errors@1.7.3, http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" dependencies: @@ -3126,10 +3680,26 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + "http-parser-js@>=0.4.0 <0.4.11": version "0.4.10" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + dependencies: + agent-base "4" + debug "3.1.0" + http-proxy-middleware@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" @@ -3155,11 +3725,31 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +http_ece@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/http_ece/-/http_ece-1.1.0.tgz#74780c6eb32d8ddfe9e36a83abcd81fe0cd4fb75" + dependencies: + urlsafe-base64 "~1.0.0" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -iconv-lite@0.4.24: +https-proxy-agent@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: @@ -3215,6 +3805,10 @@ indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -3271,7 +3865,7 @@ ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" -ip@^1.1.0, ip@^1.1.5: +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -3317,6 +3911,12 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3408,18 +4008,28 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" dependencies: is-extglob "^2.1.1" +is-nan@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.0.tgz#85d1f5482f7051c2019f5673ccebdb06f3b0db03" + dependencies: + define-properties "^1.1.3" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -3504,10 +4114,18 @@ is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" +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, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + isarray@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -3610,6 +4228,21 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + kareem@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.1.tgz#def12d9c941017fabfb00f873af95e9c99e1be87" @@ -3645,6 +4278,10 @@ last-call-webpack-plugin@^2.1.2: lodash "^4.17.4" webpack-sources "^1.0.1" +lazy@~1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -3657,6 +4294,13 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.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" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -3724,10 +4368,18 @@ lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.1 version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + loglevel@^1.4.1: version "1.6.6" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" +long-timeout@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -3949,6 +4601,10 @@ minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -4017,12 +4673,30 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" +mkdirp@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, 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" +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + +moment-timezone@^0.5.31, moment-timezone@^0.5.x: + version "0.5.31" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.31.tgz#9c40d8c5026f0c7ab46eda3d63e49c155148de05" + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0": + version "2.27.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" + moment@^2.10.2, moment@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" @@ -4117,6 +4791,10 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + nan@^2.12.1, nan@^2.13.2: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -4137,6 +4815,14 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +needle@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -4145,6 +4831,10 @@ neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" +netmask@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -4155,6 +4845,10 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +nocache@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" + node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" @@ -4236,6 +4930,14 @@ node-sass@^4.13.0: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" +node-schedule@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-1.3.2.tgz#d774b383e2a6f6ade59eecc62254aea07cd758cb" + dependencies: + cron-parser "^2.7.3" + long-timeout "0.1.1" + sorted-array-functions "^1.0.0" + "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -4257,7 +4959,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -4280,6 +4982,13 @@ npm-run-path@^2.0.0: gauge "~2.7.3" set-blocking "~2.0.0" +nssocket@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa" + dependencies: + eventemitter2 "~0.4.14" + lazy "~1.0.11" + nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -4298,6 +5007,10 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1 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-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -4392,6 +5105,17 @@ optimize-css-assets-webpack-plugin@~3.2: cssnano "^4.1.10" last-call-webpack-plugin "^2.1.2" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -4495,6 +5219,29 @@ p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" +pac-proxy-agent@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" + dependencies: + agent-base "^4.2.0" + debug "^4.1.1" + get-uri "^2.0.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^3.0.0" + pac-resolver "^3.0.0" + raw-body "^2.2.0" + socks-proxy-agent "^4.0.1" + +pac-resolver@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" + dependencies: + co "^4.6.0" + degenerator "^1.0.4" + ip "^1.1.5" + netmask "^1.0.6" + thunkify "^2.1.2" + pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -4541,6 +5288,18 @@ parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" +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.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, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4647,6 +5406,16 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + +pidusage@2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-2.0.18.tgz#9ccef35df5508a5a4b0838c712ea9b79609aff34" + dependencies: + safe-buffer "^5.1.2" + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4687,6 +5456,71 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" +pm2-axon-rpc@0.5.1, pm2-axon-rpc@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/pm2-axon-rpc/-/pm2-axon-rpc-0.5.1.tgz#ad3c43c43811c71f13e5eee2821194d03ceb03fe" + dependencies: + debug "^3.0" + +pm2-axon@3.3.0, pm2-axon@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/pm2-axon/-/pm2-axon-3.3.0.tgz#a9badfdb8e083fbd5d7d24317b4a21eb708f0735" + dependencies: + amp "~0.3.1" + amp-message "~0.1.1" + debug "^3.0" + escape-regexp "0.0.1" + +pm2-deploy@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pm2-deploy/-/pm2-deploy-1.0.2.tgz#98d8385553a3a4dca11c7b3116deb519bc5961a7" + dependencies: + run-series "^1.1.8" + tv4 "^1.3.0" + +pm2-multimeter@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace" + dependencies: + charm "~0.1.1" + +pm2@^4.2.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/pm2/-/pm2-4.4.0.tgz#85ad86da2d3c6618881714e885c85a96d77ee379" + dependencies: + "@pm2/agent" "~1.0.2" + "@pm2/io" "~4.3.5" + "@pm2/js-api" "~0.6.0" + "@pm2/pm2-version-check" latest + async "~3.2.0" + blessed "0.1.81" + chalk "3.0.0" + chokidar "^3.3.0" + cli-tableau "^2.0.0" + commander "2.15.1" + cron "1.8.2" + dayjs "~1.8.25" + debug "4.1.1" + enquirer "2.3.5" + eventemitter2 "5.0.1" + fclone "1.0.11" + mkdirp "1.0.4" + needle "2.4.0" + pidusage "2.0.18" + pm2-axon "3.3.0" + pm2-axon-rpc "0.5.1" + pm2-deploy "~1.0.2" + pm2-multimeter "^0.1.2" + promptly "^2" + ps-list "6.3.0" + semver "^7.2" + source-map-support "0.5.16" + sprintf-js "1.1.2" + vizion "0.2.13" + yamljs "0.3.0" + optionalDependencies: + systeminformation "^4.23.3" + pngjs@^3.3.0: version "3.4.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" @@ -4993,6 +5827,10 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + prettier@1.16.3: version "1.16.3" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" @@ -5020,6 +5858,12 @@ promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" +promptly@^2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" + dependencies: + read "^1.0.4" + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -5027,10 +5871,31 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.0" +proxy-agent@^3.0.3, proxy-agent@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" + dependencies: + agent-base "^4.2.0" + debug "4" + http-proxy-agent "^2.1.0" + https-proxy-agent "^3.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^3.0.1" + proxy-from-env "^1.0.0" + socks-proxy-agent "^4.0.1" + +proxy-from-env@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" +ps-list@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5039,6 +5904,10 @@ psl@^1.1.24: version "1.7.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -5080,7 +5949,7 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -5150,6 +6019,15 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -5165,7 +6043,13 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +read@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" dependencies: @@ -5177,6 +6061,15 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@1.1.x: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.5.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606" @@ -5193,6 +6086,12 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + dependencies: + picomatch "^2.2.1" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -5200,6 +6099,33 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +redis-commands@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.6.0.tgz#36d4ca42ae9ed29815cdb30ad9f97982eba1ce23" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + dependencies: + redis-errors "^1.0.0" + +redis@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/redis/-/redis-3.0.2.tgz#bd47067b8a4a3e6a2e556e57f71cc82c7360150a" + dependencies: + denque "^1.4.1" + redis-commands "^1.5.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + +referrer-policy@1.2.0, referrer-policy@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.2.0.tgz#b99cfb8b57090dc454895ef897a4cc35ef67a98e" + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -5316,10 +6242,43 @@ request@^2.87.0, request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-in-the-middle@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-5.0.3.tgz#ef8bfd771760db573bc86d1341d8ae411a04c600" + dependencies: + debug "^4.1.1" + module-details-from-path "^1.0.3" + resolve "^1.12.0" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -5370,6 +6329,12 @@ resolve@^1.10.0, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +resolve@^1.12.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + dependencies: + path-parse "^1.0.6" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -5401,6 +6366,10 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +run-series@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.8.tgz#2c4558f49221e01cd6371ff4e0a1e203e460fc36" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -5445,7 +6414,7 @@ sass-loader@~7.1: pify "^3.0.0" semver "^5.5.0" -sax@~1.2.4: +sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -5502,7 +6471,7 @@ selfsigned@^1.9.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" -semver@^6.0.0, semver@^6.3.0: +semver@6.3.0, semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -5510,10 +6479,18 @@ semver@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.1.tgz#29104598a197d6cbe4733eeecbe968f7b43a9667" +semver@^7.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@~7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.2.3.tgz#3641217233c6382173c76bf2c7ecd1e1c16b0d8a" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -5621,6 +6598,10 @@ shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" +shimmer@^1.1.0, shimmer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + sift@7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08" @@ -5629,6 +6610,10 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -5639,6 +6624,10 @@ sliced@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -5666,6 +6655,56 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + +socket.io-client@2.3.0, socket.io-client@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~4.1.0" + engine.io-client "~3.4.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.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + +socket.io@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" + dependencies: + debug "~4.1.0" + engine.io "~3.4.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.3.0" + socket.io-parser "~3.4.0" + sockjs-client@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" @@ -5684,6 +6723,24 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +socks-proxy-agent@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sorted-array-functions@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.2.0.tgz#43265b21d6e985b7df31621b1c11cc68d8efc7c3" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -5698,7 +6755,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@~0.5.12: +source-map-support@0.5.16, source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" dependencies: @@ -5778,6 +6835,10 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +sprintf-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -5911,6 +6972,10 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.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.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -5975,6 +7040,12 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + dependencies: + has-flag "^4.0.0" + svgo@^1.0.0: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -5993,6 +7064,10 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" +systeminformation@^4.23.3: + version "4.26.10" + resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-4.26.10.tgz#2244e7529ca9e7b8ecd6941e19fe7df7e3da9146" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -6027,6 +7102,10 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" +text-encoding@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.7.0.tgz#f895e836e45990624086601798ea98e8f36ee643" + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -6034,6 +7113,10 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +thunkify@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -6048,6 +7131,10 @@ timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -6069,6 +7156,12 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -6093,6 +7186,13 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -6107,6 +7207,14 @@ tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" +ts-custom-error@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/ts-custom-error/-/ts-custom-error-3.1.1.tgz#d30c7415461dac93dc2cc9e9eb2dae92e6423901" + +tslib@1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -6121,10 +7229,20 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tv4@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" + 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.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -6272,6 +7390,10 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +urlsafe-base64@^1.0.0, urlsafe-base64@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz#23f89069a6c62f46cf3a1d3b00169cefb90be0c6" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -6316,7 +7438,7 @@ 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.1, uuid@^3.3.2: +uuid@^3.0.1, uuid@^3.2.1, uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -6347,6 +7469,12 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vizion@0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/vizion/-/vizion-0.2.13.tgz#1314cdee2b34116f9f5b1248536f95dbfcd6ef5f" + dependencies: + async "1.5" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -6413,6 +7541,17 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +web-push@^3.4.3: + version "3.4.4" + resolved "https://registry.yarnpkg.com/web-push/-/web-push-3.4.4.tgz#b11523ada0f4b8c2481f65d1d059acd45ba27ca0" + dependencies: + asn1.js "^5.3.0" + http_ece "1.1.0" + https-proxy-agent "^5.0.0" + jws "^4.0.0" + minimist "^1.2.5" + urlsafe-base64 "^1.0.0" + webpack-bundle-analyzer@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz#39b3a8f829ca044682bc6f9e011c95deb554aefd" @@ -6586,6 +7725,10 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + worker-farm@^1.5.2, worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -6617,6 +7760,32 @@ ws@^6.0.0: dependencies: async-limiter "~1.0.0" +ws@^7.0.0, ws@^7.1.2: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + dependencies: + async-limiter "~1.0.0" + +ws@~7.2.0: + version "7.2.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" + +x-xss-protection@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.3.0.tgz#3e3a8dd638da80421b0e9fff11a2dbe168f6d52c" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + +xregexp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + xregexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" @@ -6645,6 +7814,13 @@ yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" +yamljs@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + dependencies: + argparse "^1.0.7" + glob "^7.0.5" + yargs-parser@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" @@ -6737,3 +7913,7 @@ yargs@^7.0.0: which-module "^1.0.0" y18n "^3.2.1" yargs-parser "^5.0.0" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From 262efa03807bc69b398855964d74551ee8291a4a Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Thu, 27 Aug 2020 00:27:39 +0200 Subject: [PATCH 02/26] All api endpoints are moved to apiRouter. --- server.js | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/server.js b/server.js index e0fef6f..2bbb639 100644 --- a/server.js +++ b/server.js @@ -6,16 +6,11 @@ const path = require("path"); const session = require("express-session"); const User = require(path.join(__dirname + "/schemas/User")); -const updateApi = require(path.join(__dirname + "/api/update")); -const retrieveApi = require(path.join(__dirname + "/api/retrieve")); -const subscriptionApi = require(path.join(__dirname + "/api/subscriptions")); +const apiRouter = require(path.join(__dirname + "/api/app")); + const loginApi = require(path.join(__dirname + "/api/login")); -const wineinfoApi = require(path.join(__dirname + "/api/wineinfo")); const virtualApi = require(path.join(__dirname + "/api/virtualLottery")); -const virtualRegistrationApi = require(path.join( - __dirname + "/api/virtualRegistration" -)); -const lottery = require(path.join(__dirname + "/api/lottery")); +const subscriptionApi = require(path.join(__dirname + "/api/subscriptions")); //This is required for the chat to work const chat = require(path.join(__dirname + "/api/chat"))(io); @@ -91,13 +86,9 @@ passport.deserializeUser(User.deserializeUser()); app.use("/public", express.static(path.join(__dirname, "public"))); app.use("/dist", express.static(path.join(__dirname, "public/dist"))); app.use("/", loginApi); -app.use("/api/", updateApi); -app.use("/api/", retrieveApi); -app.use("/api/", wineinfoApi); app.use("/api/", chatHistory); -app.use("/api/lottery", lottery); app.use("/api/virtual/", virtualApi(io)); -app.use("/api/virtual-registration/", virtualRegistrationApi); +app.use("/api/", apiRouter); app.use("/subscription", subscriptionApi); app.get("/dagens", function(req, res) { From ec80aa8bccdd9c83cb941af358160233b70240eb Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Thu, 27 Aug 2020 00:29:01 +0200 Subject: [PATCH 03/26] All api routes & their respective functions. --- api/app.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 api/app.js diff --git a/api/app.js b/api/app.js new file mode 100644 index 0000000..6b15e65 --- /dev/null +++ b/api/app.js @@ -0,0 +1,45 @@ +const express = require("express"); +const path = require("path"); + +// Middleware +const mustBeAuthenticated = require(__dirname + "/../middleware/mustBeAuthenticated"); + +const update = require(path.join(__dirname + "/update")); +const retrieve = require(path.join(__dirname + "/retrieve")); +const subscriptionApi = require(path.join(__dirname + "/subscriptions")); +const loginApi = require(path.join(__dirname + "/login")); +const wineinfo = require(path.join(__dirname + "/wineinfo")); +const virtualApi = require(path.join(__dirname + "/virtualLottery")); +const virtualRegistrationApi = require(path.join( + __dirname + "/virtualRegistration" +)); +const lottery = require(path.join(__dirname + "/lottery")); + + +const router = express.Router(); + +router.get("/wineinfo/:ean", wineinfo.byEAN); + +router.post("/log/wines", mustBeAuthenticated, update.submitWines); +router.get("/wineinfo/schema", update.schema); +router.post("/log", mustBeAuthenticated, update.submitLottery); + +router.get("wines/prelottery", retrieve.prelotteryWines); +router.get("/purchases/statistics", retrieve.allPurchase); +router.get("/purchases/statistics/color", retrieve.purchaseByColor); +router.get("/highscore/statistics", retrieve.highscore) +router.get("/wines/statistics", retrieve.allWines); +router.get("/wines/statistics/overall", retrieve.allWinesSummary); + +router.get("/lottery/all", lottery.all); +router.get("/lottery/latest", lottery.latest); +router.get("/lottery/by-date/:date", lottery.byEpochDate); +router.get("/lottery/by-name/:name", lottery.byName); + +// router.use("/api/", updateApi); +// router.use("/api/", retrieveApi); +// router.use("/api/", wineinfoApi); +// router.use("/api/lottery", lottery); +router.use("/api/virtual-registration/", virtualRegistrationApi); + +module.exports = router; From a6a84e4b293c9b2fda4af95f1834dc0479ca0285 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Thu, 27 Aug 2020 00:31:01 +0200 Subject: [PATCH 04/26] Api files no longer return router, exports usable functions. --- api/lottery.js | 39 +++++++++++++++++++++++---------------- api/retrieve.js | 49 ++++++++++++++++++++++++++----------------------- api/update.js | 34 +++++++++++++++------------------- api/wineinfo.js | 20 +++++++------------- 4 files changed, 71 insertions(+), 71 deletions(-) diff --git a/api/lottery.js b/api/lottery.js index 9d192f3..17d8e29 100644 --- a/api/lottery.js +++ b/api/lottery.js @@ -1,21 +1,13 @@ -const express = require('express'); const path = require('path'); -const router = express.Router(); const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/vinlottis', { useNewUrlParser: true }) -const mustBeAuthenticated = require(path.join( - __dirname + '/../middleware/mustBeAuthenticated' -)); -const config = require(path.join(__dirname + '/../config/defaults/lottery')); - const Highscore = require(path.join(__dirname + '/../schemas/Highscore')); const Wine = require(path.join(__dirname + '/../schemas/Wine')); - // Utils const epochToDateString = date => new Date(parseInt(date)).toDateString(); @@ -62,7 +54,7 @@ const resolveWineReferences = listWithWines => { } // Routes -router.route('/all').get((req, res) => { +const all = (req, res) => { return Highscore.find() .then(highscore => getHighscoreByDates(highscore)) .then(groupedLotteries => groupedHighscoreToSortedList(groupedLotteries)) @@ -70,9 +62,19 @@ router.route('/all').get((req, res) => { message: "Lotteries by date!", lotteries })) -}) +} -router.route('/by-date/:date').get((req, res) => { +const latest = (req, res) => { + return Highscore.find() + .then(highscore => getHighscoreByDates(highscore)) + .then(groupedLotteries => groupedHighscoreToSortedList(groupedLotteries)) + .then(lotteries => res.send({ + message: "Latest lottery!", + lottery: lotteries.slice(-1).pop() + })) +} + +const byEpochDate = (req, res) => { const { date } = req.params; const dateString = epochToDateString(date); @@ -92,10 +94,10 @@ router.route('/by-date/:date').get((req, res) => { }) } }) -}) +} -router.route("/by-name").get((req, res) => { - const { name } = req.query; +const byName = (req, res) => { + const { name } = req.params; return Highscore.find({ name }) .then(async (highscore) => { @@ -113,6 +115,11 @@ router.route("/by-name").get((req, res) => { }) } }) -}) +} -module.exports = router; +module.exports = { + all, + latest, + byEpochDate, + byName +}; diff --git a/api/retrieve.js b/api/retrieve.js index c7577b8..b6b62f4 100644 --- a/api/retrieve.js +++ b/api/retrieve.js @@ -13,23 +13,19 @@ const PreLotteryWine = require(path.join( __dirname + "/../schemas/PreLotteryWine" )); -router.use((req, res, next) => { - next(); -}); - -router.route("/wines/prelottery").get(async (req, res) => { +const prelotteryWines = async (req, res) => { let wines = await PreLotteryWine.find(); - res.json(wines); -}); + return res.json(wines); +}; -router.route("/purchase/statistics").get(async (req, res) => { +const allPurchase = async (req, res) => { let purchases = await Purchase.find() .populate("wines") .sort({ date: 1 }); - res.json(purchases); -}); + return res.json(purchases); +}; -router.route("/purchase/statistics/color").get(async (req, res) => { +const purchaseByColor = async (req, res) => { const countColor = await Purchase.find(); let red = 0; let blue = 0; @@ -75,7 +71,7 @@ router.route("/purchase/statistics/color").get(async (req, res) => { const total = red + yellow + blue + green; - res.json({ + return res.json({ red: { total: red, win: redWin @@ -95,21 +91,21 @@ router.route("/purchase/statistics/color").get(async (req, res) => { stolen: stolen, total: total }); -}); +}; -router.route("/highscore/statistics").get(async (req, res) => { +const highscore = async (req, res) => { const highscore = await Highscore.find().populate("wins.wine"); - res.json(highscore); -}); + return res.json(highscore); +}; -router.route("/wines/statistics").get(async (req, res) => { +const allWines = async (req, res) => { const wines = await Wine.find(); - res.json(wines); -}); + return res.json(wines); +}; -router.route("/wines/statistics/overall").get(async (req, res) => { +const allWinesSummary = async (req, res) => { const highscore = await Highscore.find().populate("wins.wine"); let wines = {}; @@ -149,7 +145,14 @@ router.route("/wines/statistics/overall").get(async (req, res) => { } } - res.json(Object.values(wines)); -}); + return res.json(Object.values(wines)); +}; -module.exports = router; +module.exports = { + prelotteryWines, + allPurchase, + purchaseByColor, + highscore, + allWines, + allWinesSummary +}; diff --git a/api/update.js b/api/update.js index 5fd2c12..fe4ec17 100644 --- a/api/update.js +++ b/api/update.js @@ -1,15 +1,11 @@ const express = require("express"); const path = require("path"); -const router = express.Router(); const mongoose = require("mongoose"); mongoose.connect("mongodb://localhost:27017/vinlottis", { useNewUrlParser: true }); const sub = require(path.join(__dirname + "/../api/subscriptions")); -const mustBeAuthenticated = require(path.join( - __dirname + "/../middleware/mustBeAuthenticated" -)); const _wineFunctions = require(path.join(__dirname + "/../api/wine")); const _personFunctions = require(path.join(__dirname + "/../api/person")); @@ -19,11 +15,7 @@ const PreLotteryWine = require(path.join( __dirname + "/../schemas/PreLotteryWine" )); -router.use((req, res, next) => { - next(); -}); - -router.route("/log/wines").post(mustBeAuthenticated, async (req, res) => { +const submitWines = async (req, res) => { const wines = req.body; for (let i = 0; i < wines.length; i++) { let wine = wines[i]; @@ -50,20 +42,20 @@ router.route("/log/wines").post(mustBeAuthenticated, async (req, res) => { sub.sendNotification(subscription, message); } - res.send(true); -}); + return res.send(true); +}; -router.route("/log/schema").get(mustBeAuthenticated, async (req, res) => { +const schema = async (req, res) => { let schema = { ...PreLotteryWine.schema.obj }; let nulledSchema = Object.keys(schema).reduce((accumulator, current) => { accumulator[current] = ""; - return accumulator; + return accumulator }, {}); - res.send(nulledSchema); -}); + return res.send(nulledSchema); +} -router.route("/log").post(mustBeAuthenticated, async (req, res) => { +const submitLottery = async (req, res) => { await PreLotteryWine.deleteMany(); const purchaseBody = req.body.purchase; @@ -102,7 +94,11 @@ router.route("/log").post(mustBeAuthenticated, async (req, res) => { await purchase.save(); - res.send(true); -}); + return res.send(true); +}; -module.exports = router; +module.exports = { + submitWines, + schema, + submitLottery +}; diff --git a/api/wineinfo.js b/api/wineinfo.js index 237de19..5a8de10 100644 --- a/api/wineinfo.js +++ b/api/wineinfo.js @@ -1,15 +1,7 @@ -const express = require("express"); -const path = require("path"); -const router = express.Router(); const fetch = require('node-fetch') +const path = require('path') -const mustBeAuthenticated = require(path.join(__dirname + "/../middleware/mustBeAuthenticated")) - -router.use((req, res, next) => { - next(); -}); - -router.route("/wineinfo/:ean").get(async (req, res) => { +const byEAN = async (req, res) => { const vinmonopoletResponse = await fetch("https://app.vinmonopolet.no/vmpws/v2/vmp/products/barCodeSearch/" + req.params.ean) .then(resp => resp.json()) @@ -25,7 +17,9 @@ router.route("/wineinfo/:ean").get(async (req, res) => { }) } - res.send(vinmonopoletResponse); -}); + return res.send(vinmonopoletResponse); +}; -module.exports = router; +module.exports = { + byEAN +}; From 827eb716d7c4136ee313839386b762aa9cbf96f8 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Thu, 27 Aug 2020 00:33:03 +0200 Subject: [PATCH 05/26] Define running port as var and log it. --- server.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index e0fef6f..8dc664d 100644 --- a/server.js +++ b/server.js @@ -108,4 +108,6 @@ app.use("/service-worker.js", function(req, res) { res.sendFile(path.join(__dirname, "public/sw/serviceWorker.js")); }); -server.listen(30030); +PORT = 30030 +console.log(`Running on port: ${PORT}`) +server.listen(PORT); From 51a7107802b263232d7b07cbceeb6af249a4bef7 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Fri, 28 Aug 2020 18:45:33 +0200 Subject: [PATCH 06/26] Endpoints defined and exported as functions. Changed all routes to functions and export them to app.js to handle the registration of route using the functions exported from this file. --- api/app.js | 11 +++++- api/virtualLottery.js | 81 +++++++++++++++++++++---------------------- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/api/app.js b/api/app.js index 6b15e65..41bf2b0 100644 --- a/api/app.js +++ b/api/app.js @@ -36,10 +36,19 @@ router.get("/lottery/latest", lottery.latest); router.get("/lottery/by-date/:date", lottery.byEpochDate); router.get("/lottery/by-name/:name", lottery.byName); +router.delete('/winners', mustBeAuthenticated, virtual.removeWinners); +router.delete('/attendees', mustBeAuthenticated, virtual.removeAttendees); +router.get('/winners', virtual.winners); +router.get('/winners/secure', mustBeAuthenticated, virtual.winnersSecure); +router.post('/finish', mustBeAuthenticated, virtual.finish); +router.get('/attendee/all', virtual.attendees); +router.get('/attendee/all/secure', mustBeAuthenticated, virtual.attendeesSecure); +router.post('attendee/add', mustBeAuthenticated, virtual.addAttendee); + // router.use("/api/", updateApi); // router.use("/api/", retrieveApi); // router.use("/api/", wineinfoApi); // router.use("/api/lottery", lottery); -router.use("/api/virtual-registration/", virtualRegistrationApi); +// router.use("/api/virtual-registration/", virtualRegistrationApi); module.exports = router; diff --git a/api/virtualLottery.js b/api/virtualLottery.js index 605ec76..2a655e2 100644 --- a/api/virtualLottery.js +++ b/api/virtualLottery.js @@ -22,23 +22,19 @@ const PreLotteryWine = require(path.join( const Message = require(path.join(__dirname + "/../api/message")); -router.use((req, res, next) => { - next(); -}); - -router.route("/winners").delete(mustBeAuthenticated, async (req, res) => { +const removeWinners = async (req, res) => { await VirtualWinner.deleteMany(); io.emit("refresh_data", {}); - res.json(true); -}); + return res.json(true); +}; -router.route("/attendees").delete(mustBeAuthenticated, async (req, res) => { +const deleteAttendees = req, res) => { await Attendee.deleteMany(); io.emit("refresh_data", {}); - res.json(true); -}); + return res.json(true); +}; -router.route("/winners").get(async (req, res) => { +const winners = async (req, res) => { let winners = await VirtualWinner.find(); let winnersRedacted = []; let winner; @@ -50,18 +46,18 @@ router.route("/winners").get(async (req, res) => { }); } res.json(winnersRedacted); -}); +}; -router.route("/winners/secure").get(mustBeAuthenticated, async (req, res) => { +const winnersSecure = async (req, res) => { let winners = await VirtualWinner.find(); - res.json(winners); + return res.json(winners); }); -router.route("/winner").get(mustBeAuthenticated, async (req, res) => { +const winner = async (req, res) => { let allContestants = await Attendee.find({ winner: false }); if (allContestants.length == 0) { - res.json(false); + return res.json(false); return; } let ballotColors = []; @@ -151,8 +147,8 @@ router.route("/winner").get(mustBeAuthenticated, async (req, res) => { ); await newWinnerElement.save(); - res.json(winner); -}); + return res.json(winner); +}; const genRandomString = function(length) { return crypto @@ -168,18 +164,16 @@ const sha512 = function(password, salt) { return value; }; -router.route("/finish").get(mustBeAuthenticated, async (req, res) => { +const finish = async (req, res) => { if (!config.gatewayToken) { - res.json(false); - return; + return res.json(false); } let winners = await VirtualWinner.find({ timestamp_sent: undefined }).sort({ timestamp_drawn: 1 }); if (winners.length == 0) { - res.json(false); - return; + return res.json(false); } let firstWinner = winners[0]; @@ -188,12 +182,10 @@ router.route("/finish").get(mustBeAuthenticated, async (req, res) => { let messageSent = await Message.sendMessage(firstWinner); Message.sendUpdate(winners.slice(1)); if (!messageSent) { - res.json(false); - return; + return res.json(false); } } catch (e) { - res.json(false); - return; + return res.json(false); } firstWinner.timestamp_sent = new Date().getTime(); @@ -201,11 +193,10 @@ router.route("/finish").get(mustBeAuthenticated, async (req, res) => { await firstWinner.save(); startTimeout(firstWinner.id); - res.json(true); - return; -}); + return res.json(true); +}; -router.route("/attendees").get(async (req, res) => { +const attendees = async (req, res) => { let attendees = await Attendee.find(); let attendeesRedacted = []; let attendee; @@ -220,16 +211,16 @@ router.route("/attendees").get(async (req, res) => { yellow: attendee.yellow }); } - res.json(attendeesRedacted); -}); + return res.json(attendeesRedacted); +}; -router.route("/attendees/secure").get(mustBeAuthenticated, async (req, res) => { +const attendeesSecure = async (req, res) => { let attendees = await Attendee.find(); - res.json(attendees); + return res.json(attendees); }); -router.route("/attendee").post(mustBeAuthenticated, async (req, res) => { +return addAttendee = async (req, res) => { const attendee = req.body; const { red, blue, yellow, green } = attendee; @@ -246,7 +237,7 @@ router.route("/attendee").post(mustBeAuthenticated, async (req, res) => { io.emit("new_attendee", {}); - res.send(true); + return res.send(true); }); function shuffle(array) { @@ -305,7 +296,15 @@ function startTimeout(id) { }, 600000); } -module.exports = function(_io) { - io = _io; - return router; -}; +module.exports = { + removeWinners, + deleteAttendees, + winners, + winnersSecure, + winner, + finish, + attendees, + attendeesSecure, + addAttendee +} + From fd17e11e8703b9ea96464562b881282131fff6bb Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Fri, 28 Aug 2020 18:46:35 +0200 Subject: [PATCH 07/26] Register io to all req with app.set('socketio'). --- api/virtualLottery.js | 10 ++++++---- server.js | 2 ++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/api/virtualLottery.js b/api/virtualLottery.js index 2a655e2..9bde0d2 100644 --- a/api/virtualLottery.js +++ b/api/virtualLottery.js @@ -6,10 +6,7 @@ const mongoose = require("mongoose"); mongoose.connect("mongodb://localhost:27017/vinlottis", { useNewUrlParser: true }); -let io; -const mustBeAuthenticated = require(path.join( - __dirname + "/../middleware/mustBeAuthenticated" -)); + const config = require(path.join(__dirname + "/../config/defaults/lottery")); const Attendee = require(path.join(__dirname + "/../schemas/Attendee")); @@ -24,12 +21,14 @@ const Message = require(path.join(__dirname + "/../api/message")); const removeWinners = async (req, res) => { await VirtualWinner.deleteMany(); + var io = req.app.get('socketio'); io.emit("refresh_data", {}); return res.json(true); }; const deleteAttendees = req, res) => { await Attendee.deleteMany(); + var io = req.app.get('socketio'); io.emit("refresh_data", {}); return res.json(true); }; @@ -127,6 +126,7 @@ const winner = async (req, res) => { Math.floor(Math.random() * attendeeListDemocratic.length) ]; + var io = req.app.get('socketio'); io.emit("winner", { color: colorToChooseFrom, name: winner.name }); let newWinnerElement = new VirtualWinner({ @@ -235,6 +235,8 @@ return addAttendee = async (req, res) => { }); await newAttendee.save(); + + var io = req.app.get('socketio'); io.emit("new_attendee", {}); return res.send(true); diff --git a/server.js b/server.js index 2bbb639..dae5002 100644 --- a/server.js +++ b/server.js @@ -71,6 +71,8 @@ app.use( }) ); +app.set('socketio', io); + const passport = require("passport"); const LocalStrategy = require("passport-local"); From 1e5c1faa5b3f1afac54c869190c02693c7af9249 Mon Sep 17 00:00:00 2001 From: Adrian Thompson Date: Wed, 2 Sep 2020 09:51:11 +0200 Subject: [PATCH 08/26] quick css fix --- src/ui/Winners.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/Winners.vue b/src/ui/Winners.vue index f2d3764..fd101b8 100644 --- a/src/ui/Winners.vue +++ b/src/ui/Winners.vue @@ -34,6 +34,7 @@ h2 { .winners { display: flex; + flex-flow: wrap; justify-content: space-around; align-items: center; } From dde8fe1cbe71738b375138748c91a31193116ec1 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:07:18 +0200 Subject: [PATCH 09/26] Renamed app > router.js. VirtualLottery in router. --- api/app.js | 54 -------------------------------------------- api/router.js | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ server.js | 3 +-- 3 files changed, 63 insertions(+), 56 deletions(-) delete mode 100644 api/app.js create mode 100644 api/router.js diff --git a/api/app.js b/api/app.js deleted file mode 100644 index 41bf2b0..0000000 --- a/api/app.js +++ /dev/null @@ -1,54 +0,0 @@ -const express = require("express"); -const path = require("path"); - -// Middleware -const mustBeAuthenticated = require(__dirname + "/../middleware/mustBeAuthenticated"); - -const update = require(path.join(__dirname + "/update")); -const retrieve = require(path.join(__dirname + "/retrieve")); -const subscriptionApi = require(path.join(__dirname + "/subscriptions")); -const loginApi = require(path.join(__dirname + "/login")); -const wineinfo = require(path.join(__dirname + "/wineinfo")); -const virtualApi = require(path.join(__dirname + "/virtualLottery")); -const virtualRegistrationApi = require(path.join( - __dirname + "/virtualRegistration" -)); -const lottery = require(path.join(__dirname + "/lottery")); - - -const router = express.Router(); - -router.get("/wineinfo/:ean", wineinfo.byEAN); - -router.post("/log/wines", mustBeAuthenticated, update.submitWines); -router.get("/wineinfo/schema", update.schema); -router.post("/log", mustBeAuthenticated, update.submitLottery); - -router.get("wines/prelottery", retrieve.prelotteryWines); -router.get("/purchases/statistics", retrieve.allPurchase); -router.get("/purchases/statistics/color", retrieve.purchaseByColor); -router.get("/highscore/statistics", retrieve.highscore) -router.get("/wines/statistics", retrieve.allWines); -router.get("/wines/statistics/overall", retrieve.allWinesSummary); - -router.get("/lottery/all", lottery.all); -router.get("/lottery/latest", lottery.latest); -router.get("/lottery/by-date/:date", lottery.byEpochDate); -router.get("/lottery/by-name/:name", lottery.byName); - -router.delete('/winners', mustBeAuthenticated, virtual.removeWinners); -router.delete('/attendees', mustBeAuthenticated, virtual.removeAttendees); -router.get('/winners', virtual.winners); -router.get('/winners/secure', mustBeAuthenticated, virtual.winnersSecure); -router.post('/finish', mustBeAuthenticated, virtual.finish); -router.get('/attendee/all', virtual.attendees); -router.get('/attendee/all/secure', mustBeAuthenticated, virtual.attendeesSecure); -router.post('attendee/add', mustBeAuthenticated, virtual.addAttendee); - -// router.use("/api/", updateApi); -// router.use("/api/", retrieveApi); -// router.use("/api/", wineinfoApi); -// router.use("/api/lottery", lottery); -// router.use("/api/virtual-registration/", virtualRegistrationApi); - -module.exports = router; diff --git a/api/router.js b/api/router.js new file mode 100644 index 0000000..880f02f --- /dev/null +++ b/api/router.js @@ -0,0 +1,62 @@ +const express = require("express"); +const path = require("path"); + +// Middleware +const mustBeAuthenticated = require(__dirname + "/../middleware/mustBeAuthenticated"); + +const update = require(path.join(__dirname + "/update")); +const retrieve = require(path.join(__dirname + "/retrieve")); +const subscriptionApi = require(path.join(__dirname + "/subscriptions")); +const loginApi = require(path.join(__dirname + "/login")); +const wineinfo = require(path.join(__dirname + "/wineinfo")); +const virtualApi = require(path.join(__dirname + "/virtualLottery")); +const virtualRegistrationApi = require(path.join( + __dirname + "/virtualRegistration" +)); +const lottery = require(path.join(__dirname + "/lottery")); + + +const router = express.Router(); + +router.get("/wineinfo/schema", mustBeAuthenticated, update.schema); +router.get("/wineinfo/:ean", wineinfo.byEAN); + +router.post("/log/wines", mustBeAuthenticated, update.submitWines); +router.post("/lottery", update.submitLottery); +router.post("/lottery/wines", update.submitWinesToLottery); +// router.delete("/lottery/wine/:id", update.deleteWineFromLottery); +router.post("/lottery/winners", update.submitWinnersToLottery); + +router.get("/wines/prelottery", retrieve.prelotteryWines); +router.get("/purchase/statistics", retrieve.allPurchase); +router.get("/purchase/statistics/color", retrieve.purchaseByColor); +router.get("/highscore/statistics", retrieve.highscore) +router.get("/wines/statistics", retrieve.allWines); +router.get("/wines/statistics/overall", retrieve.allWinesSummary); + +router.get("/lottery/all", lottery.all); +router.get("/lottery/latest", lottery.latest); +router.get("/lottery/by-date/:date", lottery.byEpochDate); +router.get("/lottery/by-name/:name", lottery.byName); + +router.delete('/virtual/winner/all', mustBeAuthenticated, virtualApi.deleteWinners); +router.delete('/virtual/attendee/all', mustBeAuthenticated, virtualApi.deleteAttendees); +router.get('/virtual/winner/draw', virtualApi.drawWinner); +router.get('/virtual/winner/all', virtualApi.winners); +router.get('/virtual/winner/all/secure', mustBeAuthenticated, virtualApi.winnersSecure); +router.post('/virtual/finish', mustBeAuthenticated, virtualApi.finish); +router.get('/virtual/attendee/all', virtualApi.attendees); +router.get('/virtual/attendee/all/secure', mustBeAuthenticated, virtualApi.attendeesSecure); +router.post('/virtual/attendee/add', mustBeAuthenticated, virtualApi.addAttendee); + +router.post('/winner/notify/:id', virtualRegistrationApi.sendNotificationToWinnerById); +router.get('/winner/:id', virtualRegistrationApi.getWinesToWinnerById); +router.post('/winner/:id', virtualRegistrationApi.registerWinnerSelection); + +// router.use("/api/", updateApi); +// router.use("/api/", retrieveApi); +// router.use("/api/", wineinfoApi); +// router.use("/api/lottery", lottery); +// router.use("/virtual-registration/", virtualRegistrationApi); + +module.exports = router; diff --git a/server.js b/server.js index dae5002..4ab7946 100644 --- a/server.js +++ b/server.js @@ -6,7 +6,7 @@ const path = require("path"); const session = require("express-session"); const User = require(path.join(__dirname + "/schemas/User")); -const apiRouter = require(path.join(__dirname + "/api/app")); +const apiRouter = require(path.join(__dirname + "/api/router.js")); const loginApi = require(path.join(__dirname + "/api/login")); const virtualApi = require(path.join(__dirname + "/api/virtualLottery")); @@ -89,7 +89,6 @@ app.use("/public", express.static(path.join(__dirname, "public"))); app.use("/dist", express.static(path.join(__dirname, "public/dist"))); app.use("/", loginApi); app.use("/api/", chatHistory); -app.use("/api/virtual/", virtualApi(io)); app.use("/api/", apiRouter); app.use("/subscription", subscriptionApi); From 4f054a0437ac4c85f865b7525dba1694b5f7d219 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:09:10 +0200 Subject: [PATCH 10/26] Message uses node's https insteadof requests. Messages re-written to use nodes built in https over external requests package. Also updated message functions to always return promises and have clearer names for what their purpose is. --- api/message.js | 129 ++++++++++++++++++++++++++++--------------------- 1 file changed, 73 insertions(+), 56 deletions(-) diff --git a/api/message.js b/api/message.js index e8a1eec..a763a7b 100644 --- a/api/message.js +++ b/api/message.js @@ -1,92 +1,109 @@ -const request = require("request"); +const https = require("https"); const path = require("path"); const config = require(path.join(__dirname + "/../config/defaults/lottery")); -async function sendMessage(winnerObject) { +async function sendWineSelectMessage(winnerObject) { winnerObject.timestamp_sent = new Date().getTime(); winnerObject.timestamp_limit = new Date().getTime() * 600000; await winnerObject.save(); let url = new URL(`/#/winner/${winnerObject.id}`, "https://lottis.vin"); - await sendMessageToUser( + return sendMessageToUser( winnerObject.phoneNumber, `Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Her er linken for å velge hva slags vin du vil ha, du har 10 minutter på å velge ut noe før du blir lagt bakerst i køen. ${url.href}. (Hvis den siden kommer opp som tom må du prøve å refreshe siden noen ganger.)` - ); - - return true; + ) } -async function sendWonWineMessage(winnerObject, wineObject) { - console.log( - `User ${winnerObject.id} is only one left, chosing wine for him/her.` - ); +async function sendLastWinnerMessage(winnerObject, wineObject) { + console.log(`User ${winnerObject.id} is only one left, chosing wine for him/her.`); winnerObject.timestamp_sent = new Date().getTime(); winnerObject.timestamp_limit = new Date().getTime(); await winnerObject.save(); - await sendMessageToUser( + return sendMessageToUser( winnerObject.phoneNumber, `Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Du har vunnet vinen ${wineObject.name}, og vil få nærmere info om hvordan/hvor du kan hente vinen snarest. Ha en ellers fin helg!` ); - - return true; } -async function sendMessageTooLate(winnerObject) { - await sendMessageToUser( +async function sendWineSelectMessageTooLate(winnerObject) { + return sendMessageToUser( winnerObject.phoneNumber, `Hei ${winnerObject.name}, du har dessverre brukt mer enn 10 minutter på å velge premie og blir derfor puttet bakerst i køen. Du vil få en ny SMS når det er din tur igjen.` ); } async function sendMessageToUser(phoneNumber, message) { - try { - request.post( - { - url: `https://gatewayapi.com/rest/mtsms?token=${config.gatewayToken}`, - json: true, - body: { - sender: "Vinlottis", - message: message, - recipients: [{ msisdn: `47${phoneNumber}` }] - } - }, - function(err, r, body) { - console.log(err ? err : body); - if(err) { - console.log(phoneNumber, message); - } - } - ); - } catch(e) { - console.log(phoneNumber, message); - } + console.log(`Attempting to send message to ${ phoneNumber }.`) + + const body = { + sender: "Vinlottis", + message: message, + recipients: [{ msisdn: `47${ phoneNumber }`}] + }; + + return gatewayRequest(body); } -async function sendUpdate(winners) { + +async function sendInitialMessageToWinners(winners) { let numbers = []; for (let i = 0; i < winners.length; i++) { numbers.push({ msisdn: `47${winners[i].phoneNumber}` }); } - request.post( - { - url: `https://gatewayapi.com/rest/mtsms?token=${config.gatewayToken}`, - json: true, - body: { - sender: "Vinlottis", - message: - "Gratulerer som vinner av vinlottisen! Du vil snart få en SMS med oppdatering om hvordan gangen går!", - recipients: numbers - } - }, - function(err, r, body) { - console.log(err ? err : body); - } - ); + + const body = { + sender: "Vinlottis", + message: + "Gratulerer som vinner av vinlottisen! Du vil snart få en SMS med oppdatering om hvordan gangen går!", + recipients: numbers + } + + return gatewayRequest(body); } -module.exports.sendUpdate = sendUpdate; -module.exports.sendMessage = sendMessage; -module.exports.sendMessageTooLate = sendMessageTooLate; -module.exports.sendWonWineMessage = sendWonWineMessage; +async function gatewayRequest(body) { + return new Promise((resolve, reject) => { + const options = { + hostname: "gatewayapi.com", + post: 443, + path: `/rest/mtsms?token=${ config.gatewayToken }`, + method: "POST", + headers: { + "Content-Type": "application/json" + } + } + + const req = https.request(options, (res) => { + console.log(`statusCode: ${ res.statusCode }`); + console.log(`statusMessage: ${ res.statusMessage }`); + + res.setEncoding('utf8'); + + if (res.statusCode == 200) { + res.on("data", (d) => resolve(JSON.parse(d))); + } else { + res.on("data", (data) => { + data = JSON.parse(data); + return reject('Gateway error: ' + data['message'] || data) + }); + } + }) + + req.on("error", (error) => { + console.error(`Error from sms service: ${ error }`); + reject(`Error from sms service: ${ error }`); + }) + + req.write(JSON.stringify(body)); + req.end(); + }); +} + +module.exports = { + sendWineSelectMessage, + sendLastWinnerMessage, + sendWineSelectMessageTooLate, + sendInitialMessageToWinners +} From 1d714d1e5a62c9437a53645af722470c58438cc8 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:14:26 +0200 Subject: [PATCH 11/26] Removed router, refactored virtual functoinality. - Removed the router from virtualRegistration so router.js handles routing and virtualRegistration only exports functions. - Refactored what code is in each of the virtual(Lottery/Registration) files. /finish in Lottery now only sends update to all winners and delegates sending to next winner in line, and setting timeout to virtualRegistration. - Better error handling and all responses from virtualRegistration has message in json response. --- api/virtualLottery.js | 252 ++++++++++++++++--------------------- api/virtualRegistration.js | 175 ++++++++++++++++---------- 2 files changed, 212 insertions(+), 215 deletions(-) diff --git a/api/virtualLottery.js b/api/virtualLottery.js index 9bde0d2..81107dc 100644 --- a/api/virtualLottery.js +++ b/api/virtualLottery.js @@ -1,37 +1,14 @@ -const express = require("express"); const path = require("path"); -const router = express.Router(); const crypto = require("crypto"); -const mongoose = require("mongoose"); -mongoose.connect("mongodb://localhost:27017/vinlottis", { - useNewUrlParser: true -}); const config = require(path.join(__dirname + "/../config/defaults/lottery")); +const Message = require(path.join(__dirname + "/message")); +const { findAndNotifyNextWinner } = require(path.join(__dirname + "/virtualRegistration")); const Attendee = require(path.join(__dirname + "/../schemas/Attendee")); -const VirtualWinner = require(path.join( - __dirname + "/../schemas/VirtualWinner" -)); -const PreLotteryWine = require(path.join( - __dirname + "/../schemas/PreLotteryWine" -)); +const VirtualWinner = require(path.join(__dirname + "/../schemas/VirtualWinner")); +const PreLotteryWine = require(path.join(__dirname + "/../schemas/PreLotteryWine")); -const Message = require(path.join(__dirname + "/../api/message")); - -const removeWinners = async (req, res) => { - await VirtualWinner.deleteMany(); - var io = req.app.get('socketio'); - io.emit("refresh_data", {}); - return res.json(true); -}; - -const deleteAttendees = req, res) => { - await Attendee.deleteMany(); - var io = req.app.get('socketio'); - io.emit("refresh_data", {}); - return res.json(true); -}; const winners = async (req, res) => { let winners = await VirtualWinner.find(); @@ -51,13 +28,76 @@ const winnersSecure = async (req, res) => { let winners = await VirtualWinner.find(); return res.json(winners); -}); +}; -const winner = async (req, res) => { +const deleteWinners = async (req, res) => { + await VirtualWinner.deleteMany(); + var io = req.app.get('socketio'); + io.emit("refresh_data", {}); + return res.json(true); +}; + +const attendees = async (req, res) => { + let attendees = await Attendee.find(); + let attendeesRedacted = []; + let attendee; + for (let i = 0; i < attendees.length; i++) { + attendee = attendees[i]; + attendeesRedacted.push({ + name: attendee.name, + ballots: attendee.red + attendee.blue + attendee.yellow + attendee.green, + red: attendee.red, + blue: attendee.blue, + green: attendee.green, + yellow: attendee.yellow + }); + } + return res.json(attendeesRedacted); +}; + +const attendeesSecure = async (req, res) => { + let attendees = await Attendee.find(); + + return res.json(attendees); +}; + +const addAttendee = async (req, res) => { + const attendee = req.body; + const { red, blue, yellow, green } = attendee; + + let newAttendee = new Attendee({ + name: attendee.name, + red, + blue, + green, + yellow, + phoneNumber: attendee.phoneNumber, + winner: false + }); + await newAttendee.save(); + + + var io = req.app.get('socketio'); + io.emit("new_attendee", {}); + + return res.send(true); +}; + +const deleteAttendees = async (req, res) => { + await Attendee.deleteMany(); + var io = req.app.get('socketio'); + io.emit("refresh_data", {}); + return res.json(true); +}; + +const drawWinner = async (req, res) => { let allContestants = await Attendee.find({ winner: false }); + if (allContestants.length == 0) { - return res.json(false); - return; + return res.json({ + success: false, + message: "No attendees left that have not won." + }); } let ballotColors = []; for (let i = 0; i < allContestants.length; i++) { @@ -150,6 +190,38 @@ const winner = async (req, res) => { return res.json(winner); }; +const finish = async (req, res) => { + if (!config.gatewayToken) { + return res.json({ + message: "Missing api token for sms gateway.", + success: false + }); + } + + let winners = await VirtualWinner.find({ timestamp_sent: undefined }).sort({ + timestamp_drawn: 1 + }); + + if (winners.length == 0) { + return res.json({ + message: "No winners to draw from.", + success: false + }); + } + + Message.sendInitialMessageToWinners(winners.slice(1)); + + return findAndNotifyNextWinner() + .then(() => res.json({ + success: true, + message: "Sent wine select message to first winner and update message to rest of winners." + })) + .catch(error => res.json({ + message: error["message"] || "Unable to send message to first winner.", + success: false + })) +}; + const genRandomString = function(length) { return crypto .randomBytes(Math.ceil(length / 2)) @@ -164,84 +236,6 @@ const sha512 = function(password, salt) { return value; }; -const finish = async (req, res) => { - if (!config.gatewayToken) { - return res.json(false); - } - let winners = await VirtualWinner.find({ timestamp_sent: undefined }).sort({ - timestamp_drawn: 1 - }); - - if (winners.length == 0) { - return res.json(false); - } - - let firstWinner = winners[0]; - messageSent = false; - try { - let messageSent = await Message.sendMessage(firstWinner); - Message.sendUpdate(winners.slice(1)); - if (!messageSent) { - return res.json(false); - } - } catch (e) { - return res.json(false); - } - - firstWinner.timestamp_sent = new Date().getTime(); - firstWinner.timestamp_limit = new Date().getTime() + 600000; - - await firstWinner.save(); - startTimeout(firstWinner.id); - return res.json(true); -}; - -const attendees = async (req, res) => { - let attendees = await Attendee.find(); - let attendeesRedacted = []; - let attendee; - for (let i = 0; i < attendees.length; i++) { - attendee = attendees[i]; - attendeesRedacted.push({ - name: attendee.name, - ballots: attendee.red + attendee.blue + attendee.yellow + attendee.green, - red: attendee.red, - blue: attendee.blue, - green: attendee.green, - yellow: attendee.yellow - }); - } - return res.json(attendeesRedacted); -}; - -const attendeesSecure = async (req, res) => { - let attendees = await Attendee.find(); - - return res.json(attendees); -}); - -return addAttendee = async (req, res) => { - const attendee = req.body; - const { red, blue, yellow, green } = attendee; - - let newAttendee = new Attendee({ - name: attendee.name, - red, - blue, - green, - yellow, - phoneNumber: attendee.phoneNumber, - winner: false - }); - await newAttendee.save(); - - - var io = req.app.get('socketio'); - io.emit("new_attendee", {}); - - return res.send(true); -}); - function shuffle(array) { let currentIndex = array.length, temporaryValue, @@ -262,48 +256,12 @@ function shuffle(array) { return array; } - -function startTimeout(id) { - console.log(`Starting timeout for user ${id}.`); - setTimeout(async () => { - let virtualWinner = await VirtualWinner.findOne({ id: id }); - if (!virtualWinner) { - console.log( - `Timeout done for user ${id}, but user has already sent data.` - ); - return; - } - console.log(`Timeout done for user ${id}, sending update to user.`); - - Message.sendMessageTooLate(virtualWinner); - - virtualWinner.timestamp_drawn = new Date().getTime(); - virtualWinner.timestamp_limit = null; - virtualWinner.timestamp_sent = null; - - await virtualWinner.save(); - - let prelotteryWine = await PreLotteryWine.find(); - let nextWinner = await VirtualWinner.find().sort({ timestamp_drawn: 1 }); - if (nextWinner.length == 1 && prelotteryWine.length == 1) { - chooseForUser(nextWinner[0], prelotteryWine[0]); - } else { - nextWinner[0].timestamp_sent = new Date().getTime(); - nextWinner[0].timestamp_limit = new Date().getTime() + 600000; - await nextWinner[0].save(); - Message.sendMessage(nextWinner[0]); - startTimeout(nextWinner[0].id); - } - - }, 600000); -} - module.exports = { - removeWinners, + deleteWinners, deleteAttendees, winners, winnersSecure, - winner, + drawWinner, finish, attendees, attendeesSecure, diff --git a/api/virtualRegistration.js b/api/virtualRegistration.js index b3c128e..473d827 100644 --- a/api/virtualRegistration.js +++ b/api/virtualRegistration.js @@ -1,11 +1,4 @@ -const express = require("express"); const path = require("path"); -const router = express.Router(); -const mongoose = require("mongoose"); - -mongoose.connect("mongodb://localhost:27017/vinlottis", { - useNewUrlParser: true -}); const _wineFunctions = require(path.join(__dirname + "/../api/wine")); const _personFunctions = require(path.join(__dirname + "/../api/person")); @@ -17,72 +10,70 @@ const PreLotteryWine = require(path.join( __dirname + "/../schemas/PreLotteryWine" )); -router.use((req, res, next) => { - next(); -}); -router.route("/winner/:id").get((req, res) => { - res.redirect(`/#/winner/${req.params.id}`); -}); - -router.route("/:id").get(async (req, res) => { +const getWinesToWinnerById = async (req, res) => { let id = req.params.id; let foundWinner = await VirtualWinner.findOne({ id: id }); if (!foundWinner) { - res.json({ + return res.json({ + success: false, + message: "No winner with this id.", existing: false, turn: false }); - return; } let allWinners = await VirtualWinner.find().sort({ timestamp_drawn: 1 }); - if ( allWinners[0].id != foundWinner.id || foundWinner.timestamp_limit == undefined || foundWinner.timestamp_sent == undefined ) { - res.json({ existing: true, turn: false }); - return; + return res.json({ + success: false, + message: "Not the winner next in line!", + existing: true, + turn: false + }); } - res.json({ + return res.json({ + success: true, existing: true, turn: true, name: foundWinner.name, color: foundWinner.color }); - return; -}); +}; -router.route("/:id").post(async (req, res) => { +const registerWinnerSelection = async (req, res) => { let id = req.params.id; let wineName = req.body.wineName; let foundWinner = await VirtualWinner.findOne({ id: id }); if (!foundWinner) { - res.json(false); - return; + return res.json({ + success: false, + message: "No winner with this id." + }) + } else if (foundWinner.timestamp_limit < new Date().getTime()) { + return res.json({ + success: false, + message: "Timelimit expired, you will receive a wine after other users have chosen.", + limit: true + }) } - if (foundWinner.timestamp_limit < new Date().getTime()) { - res.json({ - success: false, - limit: true - }); - return; - } let date = new Date(); date.setHours(5, 0, 0, 0); - let prelotteryWine = await PreLotteryWine.findOne({ name: wineName }); if (!prelotteryWine) { - res.json({ + return res.json({ success: false, - wine: true + message: "No wine with this name.", + wine: false }); } @@ -91,31 +82,78 @@ router.route("/:id").post(async (req, res) => { await _personFunctions.findSavePerson(foundWinner, wonWine, date); await foundWinner.delete(); + console.info("Saved winners choice."); - let nextWineBottle = await PreLotteryWine.find(); - let nextWinner = await VirtualWinner.find().sort({ timestamp_drawn: 1 }); - if (nextWinner.length > 1 && nextWineBottle.length > 1) { - Message.sendMessage(nextWinner[0]); - startTimeout(id); - } else if (nextWinner.length == 1 && nextWineBottle.length == 1) { - chooseForUser(nextWinner[0], nextWineBottle[0]); - } + return findAndNotifyNextWinner() + .then(() => res.json({ + message: "Choice saved and next in line notified.", + success: true + })) + .catch(error => res.json({ + message: error["message"] || "Error when notifing next winner.", + success: false + })) +}; - res.json({ - success: true - }); - return; -}); - -async function chooseForUser(winner, prelotteryWine) { +const chooseLastWineForUser = (winner, prelotteryWine) => { let date = new Date(); date.setHours(5, 0, 0, 0); - let wonWine = await _wineFunctions.findSaveWine(prelotteryWine); - await _personFunctions.findSavePerson(winner, wonWine, date); - await prelotteryWine.delete(); - await Message.sendWonWineMessage(winner, prelotteryWine); - await winner.delete(); + return _wineFunctions.findSaveWine(preLotteryWine) + .then(wonWine => _personFunctions.findSavePerson(winner, wonWine, date)) + .then(() => prelotteryWine.delete()) + .then(() => Message.sendLastWinnerMessage(winner, preLotteryWine)) + .then(() => winner.delete()); +} + +const findAndNotifyNextWinner = async () => { + let nextWinner = undefined; + + let winnersLeft = await VirtualWinner.find().sort({ timestamp_drawn: 1 }); + let winesLeft = await PreLotteryWine.find(); + + if (winnersLeft.length > 1) { + nextWinner = winnersLeft[0]; // multiple winners left, choose next in line + } else if (winnersLeft.length == 1 && winesLeft.length > 1) { + nextWinner = winnersLeft[0] // one winner left, but multiple wines + } else if (winnersLeft.length == 1 && winesLeft.length == 1) { + nextWinner = winnersLeft[0] // one winner and one wine left, choose for user + wine = winesLeft[0] + return chooseLastWineForUser(nextWinner, wine); + } + + if (nextWinner) { + return Message.sendWineSelectMessage(nextWinner) + .then(messageResponse => startTimeout(nextWinner.id)) + } else { + console.info("All winners notified. Could start cleanup here."); + return Promise.resolve({ + message: "All winners notified." + }) + } +}; + +const sendNotificationToWinnerById = async (req, res) => { + const { id } = req.params; + let winner = await VirtualWinner.findOne({ id: id }); + + if (!winner) { + return res.json({ + message: "No winner with this id.", + success: false + }) + } + + return Message.sendWineSelectMessage(winner) + .then(success => res.json({ + success: success, + message: `Message sent to winner ${id} successfully!` + })) + .catch(err => res.json({ + success: false, + message: "Error while trying to send sms.", + error: err + })) } function startTimeout(id) { @@ -123,27 +161,28 @@ function startTimeout(id) { setTimeout(async () => { let virtualWinner = await VirtualWinner.findOne({ id: id }); if (!virtualWinner) { - console.log( - `Timeout done for user ${id}, but user has already sent data.` - ); + console.log(`Timeout done for user ${id}, but user has already sent data.`); return; } console.log(`Timeout done for user ${id}, sending update to user.`); - Message.sendMessageTooLate(virtualWinner); + Message.sendWineSelectMessageTooLate(virtualWinner); virtualWinner.timestamp_drawn = new Date().getTime(); virtualWinner.timestamp_limit = null; virtualWinner.timestamp_sent = null; - await virtualWinner.save(); - let prelotteryWine = await PreLotteryWine.find(); - let nextWinner = await VirtualWinner.find().sort({ timestamp_drawn: 1 }); - if (nextWinner.length == 1 && prelotteryWine.length == 1) { - chooseForUser(nextWinner[0], prelotteryWine[0]); - } - }, 600000); + findAndNotifyNextWinner(); + }, 60000); + + return Promise.resolve() } -module.exports = router; +module.exports = { + getWinesToWinnerById, + registerWinnerSelection, + findAndNotifyNextWinner, + + sendNotificationToWinnerById +}; From a30dc2a4195e64ae76ee48887a20af3c85c9292a Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:20:01 +0200 Subject: [PATCH 12/26] Renamed & moved frontend router. --- src/{routes/vinlottisRouter.js => router.js} | 0 src/vinlottis-init.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/{routes/vinlottisRouter.js => router.js} (100%) diff --git a/src/routes/vinlottisRouter.js b/src/router.js similarity index 100% rename from src/routes/vinlottisRouter.js rename to src/router.js diff --git a/src/vinlottis-init.js b/src/vinlottis-init.js index 545ff89..f362976 100644 --- a/src/vinlottis-init.js +++ b/src/vinlottis-init.js @@ -1,6 +1,6 @@ import Vue from "vue"; import VueRouter from "vue-router"; -import { routes } from "@/routes/vinlottisRouter"; +import { routes } from "@/router.js"; import Vinlottis from "@/Vinlottis"; import VueAnalytics from "vue-analytics"; From 8268efe62519b456f2e42c25c8d0b30968ba1c93 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:20:27 +0200 Subject: [PATCH 13/26] Include positioning stylesheet in root Vue comp. --- src/Vinlottis.vue | 1 + src/styles/positioning.scss | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 src/styles/positioning.scss diff --git a/src/Vinlottis.vue b/src/Vinlottis.vue index 23eb18e..00a0c4f 100644 --- a/src/Vinlottis.vue +++ b/src/Vinlottis.vue @@ -52,6 +52,7 @@ export default { \ No newline at end of file From 55b3552786fae2422f8c9565f61dfadf5905d7ef Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:32:29 +0200 Subject: [PATCH 18/26] Flex wrap winner raffles to not overflow vertical. --- src/ui/Winners.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/Winners.vue b/src/ui/Winners.vue index f2d3764..d498eae 100644 --- a/src/ui/Winners.vue +++ b/src/ui/Winners.vue @@ -36,6 +36,7 @@ h2 { display: flex; justify-content: space-around; align-items: center; + flex-wrap: wrap; } .ballot-element { From c1f0a1b7f38a581fe8b3ca9ff661c2f5a57d7f0b Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:33:45 +0200 Subject: [PATCH 19/26] Padding for air around elements. --- src/components/WinnerPage.vue | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/WinnerPage.vue b/src/components/WinnerPage.vue index 988f608..434f9d7 100644 --- a/src/components/WinnerPage.vue +++ b/src/components/WinnerPage.vue @@ -62,11 +62,9 @@ export default { this.name = winnerObject.name; const _wines = await fetch("/api/wines/prelottery"); this.wines = await _wines.json(); - console.log(this.wines); }, methods: { chosenWine: async function(name) { - console.log("chosen a wine"); let posted = await postWineChosen(this.id, name); console.log("response", posted); if (posted.success) { @@ -82,7 +80,8 @@ export default { .container { display: flex; justify-content: center; - margin-top: 4rem; + margin-top: 2rem; + padding: 2rem; } .sent-container { width: 100%; From f171853c22a02a675c0f708c60a8b08c203b4293 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 6 Sep 2020 14:34:43 +0200 Subject: [PATCH 20/26] Register wines, lottery and winners separatly. Register page now uses new /lottery, /lottery/wines and /lottery/winners endpoints for sending information separatly. This allows lottery (colors, bought total & stolen), lottery wines (prelottery wines) and lottery winners (wine mapped to winner) sent. Before /lottery/winners & /lottery was sent together to a single endpoint. --- src/components/RegisterPage.vue | 57 ++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/src/components/RegisterPage.vue b/src/components/RegisterPage.vue index 787ae74..933958a 100644 --- a/src/components/RegisterPage.vue +++ b/src/components/RegisterPage.vue @@ -78,6 +78,10 @@ +
+ +
+

Vinnere

Refresh data fra virtuelt lotteri
@@ -130,8 +134,8 @@
-
- +
+
@@ -142,9 +146,11 @@