From 030f0b7a902d925ee9d8c94012c5db5ddd31b710 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 13 Oct 2020 17:45:36 -0700 Subject: [PATCH] Initial database structure and migrations, login flow, refactor main page. --- .env.development | 4 +- .env.production | 4 +- firebase/.firebaserc | 5 + firebase/.gitignore | 65 + firebase/firebase.json | 7 + firebase/functions/.eslintrc.jsonx | 123 + firebase/functions/.gitignore | 1 + firebase/functions/index.js | 28 + firebase/functions/package-lock.json | 2790 +++++++++++++++++ firebase/functions/package.json | 25 + firebase/readme.md | 4 + hasura/config.yaml | 1 + .../down.yaml | 5 + .../up.yaml | 17 + .../down.yaml | 6 + .../up.yaml | 16 + .../down.yaml | 6 + .../up.yaml | 19 + .../down.yaml | 6 + .../up.yaml | 14 + .../down.yaml | 5 + .../up.yaml | 22 + .../down.yaml | 5 + .../up.yaml | 13 + .../down.yaml | 24 + .../up.yaml | 40 + .../down.yaml | 6 + .../up.yaml | 18 + .../down.yaml | 6 + .../up.yaml | 21 + .../down.yaml | 5 + .../up.yaml | 26 + .../down.yaml | 12 + .../up.yaml | 20 + .../down.yaml | 6 + .../up.yaml | 32 + .../down.yaml | 6 + .../up.yaml | 33 + .../down.yaml | 6 + .../up.yaml | 31 + .../down.yaml | 5 + .../up.yaml | 25 + .../down.yaml | 12 + .../up.yaml | 20 + .../down.yaml | 6 + .../up.yaml | 30 + .../down.yaml | 6 + .../up.yaml | 31 + .../down.yaml | 6 + .../up.yaml | 29 + hasura/migrations/metadata.yaml | 264 ++ package-lock.json | 1031 +++++- package.json | 6 +- src/App/App.jsx | 74 +- src/assets/ImEX Logo.png | Bin 0 -> 24647 bytes src/assets/logo1024.png | Bin 0 -> 87519 bytes src/assets/logo192.png | Bin 8581 -> 8881 bytes src/assets/logo512.png | Bin 0 -> 27744 bytes .../sider-sign-out.molecule.jsx | 17 + .../sider-menu/sider-menu.organism.jsx | 37 + src/components/pages/jobs/jobs.page.jsx | 50 + src/components/pages/routes/routes.page.jsx | 28 + src/components/pages/sign-in/sign-in.page.jsx | 59 + .../pages/sign-in/sign-in.page.styles.scss | 29 + .../templates/error-boundary.template.jsx | 64 + src/components/test.jsx | 55 + src/firebase/firebase.utils.js | 88 +- src/graphql/GraphQLClient.js | 130 + src/graphql/user.queries.js | 14 + src/redux/root.saga.js | 3 +- src/redux/user/user.sagas.js | 116 +- 71 files changed, 5331 insertions(+), 387 deletions(-) create mode 100644 firebase/.firebaserc create mode 100644 firebase/.gitignore create mode 100644 firebase/firebase.json create mode 100644 firebase/functions/.eslintrc.jsonx create mode 100644 firebase/functions/.gitignore create mode 100644 firebase/functions/index.js create mode 100644 firebase/functions/package-lock.json create mode 100644 firebase/functions/package.json create mode 100644 firebase/readme.md create mode 100644 hasura/config.yaml create mode 100644 hasura/migrations/1602633863978_create_table_public_users/down.yaml create mode 100644 hasura/migrations/1602633863978_create_table_public_users/up.yaml create mode 100644 hasura/migrations/1602633916489_update_permission_user_public_table_users/down.yaml create mode 100644 hasura/migrations/1602633916489_update_permission_user_public_table_users/up.yaml create mode 100644 hasura/migrations/1602633926494_update_permission_user_public_table_users/down.yaml create mode 100644 hasura/migrations/1602633926494_update_permission_user_public_table_users/up.yaml create mode 100644 hasura/migrations/1602633933824_update_permission_user_public_table_users/down.yaml create mode 100644 hasura/migrations/1602633933824_update_permission_user_public_table_users/up.yaml create mode 100644 hasura/migrations/1602634004830_create_table_public_bodyshops/down.yaml create mode 100644 hasura/migrations/1602634004830_create_table_public_bodyshops/up.yaml create mode 100644 hasura/migrations/1602634062624_create_table_public_associations/down.yaml create mode 100644 hasura/migrations/1602634062624_create_table_public_associations/up.yaml create mode 100644 hasura/migrations/1602634079354_track_all_relationships/down.yaml create mode 100644 hasura/migrations/1602634079354_track_all_relationships/up.yaml create mode 100644 hasura/migrations/1602634102716_update_permission_user_public_table_associations/down.yaml create mode 100644 hasura/migrations/1602634102716_update_permission_user_public_table_associations/up.yaml create mode 100644 hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/down.yaml create mode 100644 hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/up.yaml create mode 100644 hasura/migrations/1602634310021_create_table_public_jobs/down.yaml create mode 100644 hasura/migrations/1602634310021_create_table_public_jobs/up.yaml create mode 100644 hasura/migrations/1602634320838_track_all_relationships/down.yaml create mode 100644 hasura/migrations/1602634320838_track_all_relationships/up.yaml create mode 100644 hasura/migrations/1602634353429_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1602634353429_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1602634359789_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1602634359789_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1602634365537_update_permission_user_public_table_jobs/down.yaml create mode 100644 hasura/migrations/1602634365537_update_permission_user_public_table_jobs/up.yaml create mode 100644 hasura/migrations/1602634492124_create_table_public_joblines/down.yaml create mode 100644 hasura/migrations/1602634492124_create_table_public_joblines/up.yaml create mode 100644 hasura/migrations/1602634496799_track_all_relationships/down.yaml create mode 100644 hasura/migrations/1602634496799_track_all_relationships/up.yaml create mode 100644 hasura/migrations/1602634513418_update_permission_user_public_table_joblines/down.yaml create mode 100644 hasura/migrations/1602634513418_update_permission_user_public_table_joblines/up.yaml create mode 100644 hasura/migrations/1602634518515_update_permission_user_public_table_joblines/down.yaml create mode 100644 hasura/migrations/1602634518515_update_permission_user_public_table_joblines/up.yaml create mode 100644 hasura/migrations/1602634524485_update_permission_user_public_table_joblines/down.yaml create mode 100644 hasura/migrations/1602634524485_update_permission_user_public_table_joblines/up.yaml create mode 100644 hasura/migrations/metadata.yaml create mode 100644 src/assets/ImEX Logo.png create mode 100644 src/assets/logo1024.png create mode 100644 src/assets/logo512.png create mode 100644 src/components/molecules/sider-sign-out/sider-sign-out.molecule.jsx create mode 100644 src/components/organisms/sider-menu/sider-menu.organism.jsx create mode 100644 src/components/pages/jobs/jobs.page.jsx create mode 100644 src/components/pages/routes/routes.page.jsx create mode 100644 src/components/pages/sign-in/sign-in.page.jsx create mode 100644 src/components/pages/sign-in/sign-in.page.styles.scss create mode 100644 src/components/templates/error-boundary.template.jsx create mode 100644 src/components/test.jsx create mode 100644 src/graphql/GraphQLClient.js create mode 100644 src/graphql/user.queries.js diff --git a/.env.development b/.env.development index eaa4490..313cb63 100644 --- a/.env.development +++ b/.env.development @@ -1 +1,3 @@ -REACT_APP_FIREBASE_CONFIG={"apiKey":"AIzaSyDPLT8GiDHDR1R4nI66Qi0BY1aYviDPioc","authDomain":"imex-dev.firebaseapp.com","databaseURL":"https://imex-dev.firebaseio.com","projectId":"imex-dev","storageBucket":"imex-dev.appspot.com","messagingSenderId":"759548147434","appId":"1:759548147434:web:e8239868a48ceb36700993","measurementId":"G-K5XRBVVB4S"} \ No newline at end of file +REACT_APP_FIREBASE_CONFIG={ "apiKey": "AIzaSyCXg148Ma82Qa7dK-2EL4sE0tJhKVnh1rY", "authDomain": "rps-prod-b53c8.firebaseapp.com", "databaseURL": "https://rps-prod-b53c8.firebaseio.com", "projectId": "rps-prod-b53c8", "storageBucket": "rps-prod-b53c8.appspot.com", "messagingSenderId": "361220226954", "appId": "1:361220226954:web:bf3a38d196e4fd8c921273", "measurementId": "G-W3BHH420EC"} +REACT_APP_GRAPHQL_ENDPOINT=https://rps.bodyshop.app/v1/graphql +REACT_APP_GRAPHQL_ENDPOINT_WS=wss://rps.bodyshop.app/v1/graphql \ No newline at end of file diff --git a/.env.production b/.env.production index eaa4490..313cb63 100644 --- a/.env.production +++ b/.env.production @@ -1 +1,3 @@ -REACT_APP_FIREBASE_CONFIG={"apiKey":"AIzaSyDPLT8GiDHDR1R4nI66Qi0BY1aYviDPioc","authDomain":"imex-dev.firebaseapp.com","databaseURL":"https://imex-dev.firebaseio.com","projectId":"imex-dev","storageBucket":"imex-dev.appspot.com","messagingSenderId":"759548147434","appId":"1:759548147434:web:e8239868a48ceb36700993","measurementId":"G-K5XRBVVB4S"} \ No newline at end of file +REACT_APP_FIREBASE_CONFIG={ "apiKey": "AIzaSyCXg148Ma82Qa7dK-2EL4sE0tJhKVnh1rY", "authDomain": "rps-prod-b53c8.firebaseapp.com", "databaseURL": "https://rps-prod-b53c8.firebaseio.com", "projectId": "rps-prod-b53c8", "storageBucket": "rps-prod-b53c8.appspot.com", "messagingSenderId": "361220226954", "appId": "1:361220226954:web:bf3a38d196e4fd8c921273", "measurementId": "G-W3BHH420EC"} +REACT_APP_GRAPHQL_ENDPOINT=https://rps.bodyshop.app/v1/graphql +REACT_APP_GRAPHQL_ENDPOINT_WS=wss://rps.bodyshop.app/v1/graphql \ No newline at end of file diff --git a/firebase/.firebaserc b/firebase/.firebaserc new file mode 100644 index 0000000..104d237 --- /dev/null +++ b/firebase/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "bodyshop-dev-b1cb6" + } +} diff --git a/firebase/.gitignore b/firebase/.gitignore new file mode 100644 index 0000000..f626852 --- /dev/null +++ b/firebase/.gitignore @@ -0,0 +1,65 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +firebase-debug.log* + +# Firebase cache +.firebase/ + +# Firebase config + +# Uncomment this if you'd like others to create their own Firebase project. +# For a team working on the same Firebase project(s), it is recommended to leave +# it commented so all members can deploy to the same project(s) in .firebaserc. +# .firebaserc + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env diff --git a/firebase/firebase.json b/firebase/firebase.json new file mode 100644 index 0000000..a68a195 --- /dev/null +++ b/firebase/firebase.json @@ -0,0 +1,7 @@ +{ + "functions": { + "predeploy": [ + "npm --prefix \"$RESOURCE_DIR\" run lint" + ] + } +} diff --git a/firebase/functions/.eslintrc.jsonx b/firebase/functions/.eslintrc.jsonx new file mode 100644 index 0000000..5cb11cd --- /dev/null +++ b/firebase/functions/.eslintrc.jsonx @@ -0,0 +1,123 @@ +// { +// "parserOptions": { +// // Required for certain syntax usages +// "ecmaVersion": 2017 +// }, +// "plugins": [ +// "promise" +// ], +// "extends": "eslint:recommended", +// "rules": { +// // Removed rule "disallow the use of console" from recommended eslint rules +// "no-console": "off", + +// // Removed rule "disallow multiple spaces in regular expressions" from recommended eslint rules +// "no-regex-spaces": "off", + +// // Removed rule "disallow the use of debugger" from recommended eslint rules +// "no-debugger": "off", + +// // Removed rule "disallow unused variables" from recommended eslint rules +// "no-unused-vars": "off", + +// // Removed rule "disallow mixed spaces and tabs for indentation" from recommended eslint rules +// "no-mixed-spaces-and-tabs": "off", + +// // Removed rule "disallow the use of undeclared variables unless mentioned in /*global */ comments" from recommended eslint rules +// "no-undef": "off", + +// // Warn against template literal placeholder syntax in regular strings +// "no-template-curly-in-string": 1, + +// // Warn if return statements do not either always or never specify values +// "consistent-return": 1, + +// // Warn if no return statements in callbacks of array methods +// "array-callback-return": 1, + +// // Require the use of === and !== +// "eqeqeq": 2, + +// // Disallow the use of alert, confirm, and prompt +// "no-alert": 2, + +// // Disallow the use of arguments.caller or arguments.callee +// "no-caller": 2, + +// // Disallow null comparisons without type-checking operators +// "no-eq-null": 2, + +// // Disallow the use of eval() +// "no-eval": 2, + +// // Warn against extending native types +// "no-extend-native": 1, + +// // Warn against unnecessary calls to .bind() +// "no-extra-bind": 1, + +// // Warn against unnecessary labels +// "no-extra-label": 1, + +// // Disallow leading or trailing decimal points in numeric literals +// "no-floating-decimal": 2, + +// // Warn against shorthand type conversions +// "no-implicit-coercion": 1, + +// // Warn against function declarations and expressions inside loop statements +// "no-loop-func": 1, + +// // Disallow new operators with the Function object +// "no-new-func": 2, + +// // Warn against new operators with the String, Number, and Boolean objects +// "no-new-wrappers": 1, + +// // Disallow throwing literals as exceptions +// "no-throw-literal": 2, + +// // Require using Error objects as Promise rejection reasons +// "prefer-promise-reject-errors": 2, + +// // Enforce “for” loop update clause moving the counter in the right direction +// "for-direction": 2, + +// // Enforce return statements in getters +// "getter-return": 2, + +// // Disallow await inside of loops +// "no-await-in-loop": 2, + +// // Disallow comparing against -0 +// "no-compare-neg-zero": 2, + +// // Warn against catch clause parameters from shadowing variables in the outer scope +// "no-catch-shadow": 1, + +// // Disallow identifiers from shadowing restricted names +// "no-shadow-restricted-names": 2, + +// // Enforce return statements in callbacks of array methods +// "callback-return": 2, + +// // Require error handling in callbacks +// "handle-callback-err": 2, + +// // Warn against string concatenation with __dirname and __filename +// "no-path-concat": 1, + +// // Prefer using arrow functions for callbacks +// "prefer-arrow-callback": 1, + +// // Return inside each then() to create readable and reusable Promise chains. +// // Forces developers to return console logs and http calls in promises. +// "promise/always-return": 2, + +// //Enforces the use of catch() on un-returned promises +// "promise/catch-or-return": 2, + +// // Warn against nested then() or catch() statements +// "promise/no-nesting": 1 +// } +// } diff --git a/firebase/functions/.gitignore b/firebase/functions/.gitignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/firebase/functions/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/firebase/functions/index.js b/firebase/functions/index.js new file mode 100644 index 0000000..367f916 --- /dev/null +++ b/firebase/functions/index.js @@ -0,0 +1,28 @@ +const functions = require("firebase-functions"); +const admin = require("firebase-admin"); +admin.initializeApp(functions.config().firebase); + +// On sign up. +exports.processSignUp = functions.auth.user().onCreate((user) => { + // Check if user meets role criteria: + // Your custom logic here: to decide what roles and other `x-hasura-*` should the user get + let customClaims; + if (user.email && user.email.indexOf("@thinkimex.com") !== -1) { + customClaims = { + "https://hasura.io/jwt/claims": { + "x-hasura-default-role": "admin", + "x-hasura-allowed-roles": ["user", "admin"], + "x-hasura-user-id": user.uid, + }, + }; + } else { + customClaims = { + "https://hasura.io/jwt/claims": { + "x-hasura-default-role": "user", + "x-hasura-allowed-roles": ["user"], + "x-hasura-user-id": user.uid, + }, + }; + } + return admin.auth().setCustomUserClaims(user.uid, customClaims); +}); diff --git a/firebase/functions/package-lock.json b/firebase/functions/package-lock.json new file mode 100644 index 0000000..920cfca --- /dev/null +++ b/firebase/functions/package-lock.json @@ -0,0 +1,2790 @@ +{ + "name": "functions", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@firebase/app-types": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.4.8.tgz", + "integrity": "sha512-VTjWRooelMExK/rKArp6WqnWJJfi8Vs6VuDYDSeMcQ3NpSux2bW1dfJFuzYmiK1+37hEJP1F43DyUDv2lCJquw==" + }, + "@firebase/database": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.13.tgz", + "integrity": "sha512-B1+6Ns3jbpryDUi6ZohByXk8EPcuD5rUla1UchzdCjsU1waq06QyUrakow5Hr5RugqmziMAOfzpXid+wV4+bvw==", + "requires": { + "@firebase/database-types": "0.4.8", + "@firebase/logger": "0.1.31", + "@firebase/util": "0.2.34", + "faye-websocket": "0.11.3", + "tslib": "1.10.0" + } + }, + "@firebase/database-types": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.8.tgz", + "integrity": "sha512-bYGzvcwjGOSWuL43nldY3kD3ldPDLTiiOF0TItsJx2JdL58PzGiGaR71dvPJhueNBn+bwJ5KPJxpqTSVqM/j8w==", + "requires": { + "@firebase/app-types": "0.4.8" + } + }, + "@firebase/logger": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.31.tgz", + "integrity": "sha512-1OEJaCMMaaT0VleNwer3bocbd25beR6KZUaHBweLNHEFxaNvniSv+lm83g08dWLBml3ZVOb945hp6m8REFx6/Q==" + }, + "@firebase/util": { + "version": "0.2.34", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.34.tgz", + "integrity": "sha512-k8pNIzNLncvxDrqYVZN6/lnqZWy0OCJuZmK5urodARwdLy3sVLw5p9PWce0v9qzMO8tLdrBbCpnm1KJ8jg/kBQ==", + "requires": { + "tslib": "1.10.0" + } + }, + "@google-cloud/common": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.2.3.tgz", + "integrity": "sha512-lvw54mGKn8VqVIy2NzAk0l5fntBFX4UwQhHk6HaqkyCQ7WBl5oz4XhzKMtMilozF/3ObPcDogqwuyEWyZ6rnQQ==", + "optional": true, + "requires": { + "@google-cloud/projectify": "^1.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "duplexify": "^3.6.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^5.5.0", + "retry-request": "^4.0.0", + "teeny-request": "^5.2.1" + } + }, + "@google-cloud/firestore": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-2.6.0.tgz", + "integrity": "sha512-5bpC7KZA+dCc+4Byp9yA7uvmM1kmVaXm6QiSQbf2Zz/rWftTr0N23f+5BKe9OXyY/nT44l2ygZjmP4Aw3ngLFg==", + "optional": true, + "requires": { + "bun": "^0.0.12", + "deep-equal": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^1.7.5", + "through2": "^3.0.0" + } + }, + "@google-cloud/paginator": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.2.tgz", + "integrity": "sha512-PCddVtZWvw0iZ3BLIsCXMBQvxUcS9O5CgfHBu8Zd8T3DCiML+oQED1odsbl3CQ9d3RrvBaj+eIh7Dv12D15PbA==", + "optional": true, + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + } + }, + "@google-cloud/projectify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.2.tgz", + "integrity": "sha512-WnkGxvk4U1kAJpoS/Ehk+3MZXVW+XHHhwc/QyD6G8Za4xml3Fv+NRn/bYffl1TxSg+gE0N0mj9Shgc7e8+fl8A==", + "optional": true + }, + "@google-cloud/promisify": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.3.tgz", + "integrity": "sha512-Rufgfl3TnkIil3CjsH33Q6093zeoVqyqCdvtvgHuCqRJxCZYfaVPIyr8JViMeLTD4Ja630pRKKZVSjKggoVbNg==", + "optional": true + }, + "@google-cloud/storage": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.1.3.tgz", + "integrity": "sha512-79Ag+4eQq+KFJcKB85AimepoqTJOGuDLAmJd7JkLc8NM12a87JTCoGi65oi1eZ4H77AV0uUQxSS2Fo/hZL3+kQ==", + "optional": true, + "requires": { + "@google-cloud/common": "^2.1.1", + "@google-cloud/paginator": "^2.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "compressible": "^2.0.12", + "concat-stream": "^2.0.0", + "date-and-time": "^0.11.0", + "duplexify": "^3.5.0", + "extend": "^3.0.2", + "gaxios": "^2.0.1", + "gcs-resumable-upload": "^2.2.4", + "hash-stream-validation": "^0.2.2", + "mime": "^2.2.0", + "mime-types": "^2.0.8", + "onetime": "^5.1.0", + "p-limit": "^2.2.0", + "pumpify": "^2.0.0", + "readable-stream": "^3.4.0", + "snakeize": "^0.1.0", + "stream-events": "^1.0.1", + "through2": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "@grpc/grpc-js": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-0.6.13.tgz", + "integrity": "sha512-fxkxS+sEtYdfR0ifqgCTqBe4jZ5PvlvgcaYpzwgMqz+b18uUdPmp5eRQN+qbbJg2ZMUcgItA8OWIvAobW3PDng==", + "optional": true, + "requires": { + "semver": "^6.2.0" + } + }, + "@grpc/proto-loader": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.3.tgz", + "integrity": "sha512-8qvUtGg77G2ZT2HqdqYoM/OY97gQd/0crSG34xNmZ4ZOsv3aQT/FQV9QfZPazTGna6MIoyUd+u6AxsoZjJ/VMQ==", + "optional": true, + "requires": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", + "optional": true + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "optional": true + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "optional": true + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", + "optional": true + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", + "optional": true + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", + "optional": true + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", + "optional": true + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", + "optional": true + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "optional": true + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", + "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz", + "integrity": "sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/lodash": { + "version": "4.14.149", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", + "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", + "dev": true + }, + "@types/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", + "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==", + "optional": true + }, + "@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==" + }, + "@types/node": { + "version": "8.10.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz", + "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==" + }, + "@types/qs": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==" + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "@types/serve-static": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.5.tgz", + "integrity": "sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "optional": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "optional": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "optional": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "optional": true + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", + "optional": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "optional": true + }, + "bun": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/bun/-/bun-0.0.12.tgz", + "integrity": "sha512-Toms18J9DqnT+IfWkwxVTB2EaBprHvjlMWrTIsfX4xbu3ZBqVBwrERU0em1IgtRe04wT+wJxMlKHZok24hrcSQ==", + "optional": true, + "requires": { + "readable-stream": "~1.0.32" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "optional": true, + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "optional": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "configstore": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.0.tgz", + "integrity": "sha512-eE/hvMs7qw7DlcB5JPRnthmrITuHMmACUJAp89v6PT6iOqzoLS7HRWhBtuHMlhNHo2AhUSA/3Dh1bKNJHcublQ==", + "optional": true, + "requires": { + "dot-prop": "^5.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "optional": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "optional": true + }, + "date-and-time": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.11.0.tgz", + "integrity": "sha512-VyzhHurex4wlg9oMszn7O+kxHchphWjzDn7Mv0WfkFKI6hSNOQePpTBFGsnRakvLNzQKXqPBAVV8DOxUGtUxqA==", + "optional": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "optional": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "optional": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "requires": { + "streamsearch": "0.1.2" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "optional": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "optional": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "optional": true, + "requires": { + "once": "^1.4.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "optional": true + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "optional": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "optional": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "optional": true + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "optional": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-text-encoding": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz", + "integrity": "sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==", + "optional": true + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "firebase-admin": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-8.8.0.tgz", + "integrity": "sha512-IKtyL7doZu3Sh3pCz+O7vFWc/UwxEfXe263X/bPbucu/qEsM+5UdljIklnInSMunO+A1BUXKtsKkQf91iZQ2Ew==", + "requires": { + "@firebase/database": "^0.5.11", + "@google-cloud/firestore": "^2.6.0", + "@google-cloud/storage": "^4.1.2", + "@types/node": "^8.0.53", + "dicer": "^0.3.0", + "jsonwebtoken": "8.1.0", + "node-forge": "0.7.4" + } + }, + "firebase-functions": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.11.0.tgz", + "integrity": "sha512-i1uMhZ/M6i5SCI3ulKo7EWX0/LD+I5o6N+sk0HbOWfzyWfOl0iJTvQkR3BVDcjrlhPVC4xG1bDTLxd+DTkLqaw==", + "requires": { + "@types/express": "4.17.3", + "cors": "^2.8.5", + "express": "^4.17.1", + "lodash": "^4.17.14" + } + }, + "firebase-functions-test": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/firebase-functions-test/-/firebase-functions-test-0.1.7.tgz", + "integrity": "sha512-/zVQhaUZ+M7z25aUaZSIah0MIDZIfnRfQxtHYTE8hgUgODmKdaMX20vh5Gv23hnCPauIHuYb7XFTUOZiWU1udA==", + "dev": true, + "requires": { + "@types/lodash": "^4.14.104", + "lodash": "^4.17.5" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "optional": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "gaxios": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.1.0.tgz", + "integrity": "sha512-Gtpb5sdQmb82sgVkT2GnS2n+Kx4dlFwbeMYcDlD395aEvsLCSQXJJcHt7oJ2LrGxDEAeiOkK79Zv2A8Pzt6CFg==", + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^3.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + }, + "gcp-metadata": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.2.2.tgz", + "integrity": "sha512-vR7kcJMCYJG/mYWp/a1OszdOqnLB/XW1GorWW1hc1lWVNL26L497zypWb9cG0CYDQ4Bl1Wk0+fSZFFjwJlTQgQ==", + "optional": true, + "requires": { + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" + } + }, + "gcs-resumable-upload": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.1.tgz", + "integrity": "sha512-zEO7L+jz99VznQsbsF7vFTnIFbSu+CjdJqt5htnjIrfsp5j+QCVBvbbKdqpaTfCPzpUPYj1Q9O9DhIh/8newfA==", + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "configstore": "^5.0.0", + "gaxios": "^2.0.0", + "google-auth-library": "^5.0.0", + "pumpify": "^2.0.0", + "stream-events": "^1.0.4" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "google-auth-library": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.6.0.tgz", + "integrity": "sha512-/niyGtZWDA4LJcvrdmKsZa8a20yQxtOSUTRokyWfgOn8AiVLXY0Ef2WaE3I7fK37IghRmMFhuywGEEPGXyY8EA==", + "optional": true, + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "fast-text-encoding": "^1.0.0", + "gaxios": "^2.1.0", + "gcp-metadata": "^3.2.0", + "gtoken": "^4.1.0", + "jws": "^3.1.5", + "lru-cache": "^5.0.0" + } + }, + "google-gax": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.11.2.tgz", + "integrity": "sha512-NWdIenM/F/SLIaQLBP5Fxsva+vgZ38sO9KR/Vj36APQceTzAVimn7i0jYUrxBv77uov4xZzwcORzTuqp0eE4WQ==", + "optional": true, + "requires": { + "@grpc/grpc-js": "^0.6.12", + "@grpc/proto-loader": "^0.5.1", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^3.6.0", + "google-auth-library": "^5.0.0", + "is-stream-ended": "^0.1.4", + "lodash.at": "^4.6.0", + "lodash.has": "^4.5.2", + "node-fetch": "^2.6.0", + "protobufjs": "^6.8.8", + "retry-request": "^4.0.0", + "semver": "^6.0.0", + "walkdir": "^0.4.0" + } + }, + "google-p12-pem": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.3.tgz", + "integrity": "sha512-Tq2kBCANxYYPxaBpTgCpRfdoPs9+/lNzc/Iaee4kuMVW5ascD+HwhpBsTLwH85C9Ev4qfB8KKHmpPQYyD2vg2w==", + "optional": true, + "requires": { + "node-forge": "^0.9.0" + }, + "dependencies": { + "node-forge": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", + "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==", + "optional": true + } + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "optional": true + }, + "gtoken": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.3.tgz", + "integrity": "sha512-ofW+FiXjswyKdkjMcDbe6E4K7cDDdE82dGDhZIc++kUECqaE7MSErf6arJPAjcnYn1qxE1/Ti06qQuqgVusovQ==", + "optional": true, + "requires": { + "gaxios": "^2.1.0", + "google-p12-pem": "^2.0.0", + "jws": "^3.1.5", + "mime": "^2.2.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "optional": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hash-stream-validation": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.2.tgz", + "integrity": "sha512-cMlva5CxWZOrlS/cY0C+9qAzesn5srhFA8IT1VPiHc9bWWBLkJfEUIZr7MWoi89oOOGmpg8ymchaOjiArsGu5A==", + "optional": true, + "requires": { + "through2": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "optional": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "optional": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "optional": true + } + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "optional": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "optional": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "optional": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "optional": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "optional": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "optional": true + }, + "is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==", + "optional": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "optional": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-bigint": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", + "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=", + "optional": true, + "requires": { + "bignumber.js": "^7.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonwebtoken": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz", + "integrity": "sha1-xjl80uX9WD1lwAeoPce7eOaYK4M=", + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.at": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.at/-/lodash.at-4.6.0.tgz", + "integrity": "sha1-k83OZk8KGZTqM9181A4jr9EbD/g=", + "optional": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "optional": true + }, + "lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=", + "optional": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "optional": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "optional": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "optional": true, + "requires": { + "semver": "^6.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "optional": true + }, + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "requires": { + "mime-db": "1.42.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "optional": true + }, + "node-forge": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.4.tgz", + "integrity": "sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "optional": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "optional": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "optional": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "optional": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "optional": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "optional": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.17.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.6.tgz", + "integrity": "sha512-0a2X6cgN3RdPBL2MIlR6Lt0KlM7fOFsutuXcdglcOq6WvLnYXgPQSh0Mx6tO1KCAE8MxbHSOSTWDoUxRq+l3DA==", + "optional": true + } + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "optional": true, + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + }, + "dependencies": { + "duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", + "optional": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "optional": true, + "requires": { + "define-properties": "^1.1.2" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, + "retry-request": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.1.tgz", + "integrity": "sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ==", + "optional": true, + "requires": { + "debug": "^4.1.1", + "through2": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "optional": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "optional": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", + "optional": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "optional": true, + "requires": { + "stubs": "^3.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "optional": true + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "optional": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "teeny-request": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-5.3.1.tgz", + "integrity": "sha512-hnUeun3xryzv92FbrnprltcdeDfSVaGFBlFPRvKJ2fO/ioQx9N0aSUbbXSfTO+ArRXine1gSWdWFWcgfrggWXw==", + "optional": true, + "requires": { + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", + "uuid": "^3.3.2" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "optional": true, + "requires": { + "readable-stream": "2 || 3" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "optional": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "optional": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "optional": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "optional": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "optional": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "optional": true + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", + "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "optional": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "optional": true + } + } +} diff --git a/firebase/functions/package.json b/firebase/functions/package.json new file mode 100644 index 0000000..694dbcc --- /dev/null +++ b/firebase/functions/package.json @@ -0,0 +1,25 @@ +{ + "name": "functions", + "description": "Cloud Functions for Firebase", + "scripts": { + "lint": "eslint .", + "serve": "firebase serve --only functions", + "shell": "firebase functions:shell", + "start": "npm run shell", + "deploy": "firebase deploy --only functions", + "logs": "firebase functions:log" + }, + "engines": { + "node": "10" + }, + "dependencies": { + "firebase-admin": "^8.6.0", + "firebase-functions": "^3.11.0" + }, + "devDependencies": { + "eslint": "^5.12.0", + "eslint-plugin-promise": "^4.0.1", + "firebase-functions-test": "^0.1.6" + }, + "private": true +} diff --git a/firebase/readme.md b/firebase/readme.md new file mode 100644 index 0000000..fba8d7a --- /dev/null +++ b/firebase/readme.md @@ -0,0 +1,4 @@ + +Must set the environment variables using: + +firebase functions:config:set auth.graphql_endpoint="https://bodyshop-dev-db.herokuapp.com/v1/graphql" auth.hasura_secret_admin_key="Dev-BodyShopAppBySnaptSoftware!" \ No newline at end of file diff --git a/hasura/config.yaml b/hasura/config.yaml new file mode 100644 index 0000000..80a8d8e --- /dev/null +++ b/hasura/config.yaml @@ -0,0 +1 @@ +endpoint: https://rps.bodyshop.app \ No newline at end of file diff --git a/hasura/migrations/1602633863978_create_table_public_users/down.yaml b/hasura/migrations/1602633863978_create_table_public_users/down.yaml new file mode 100644 index 0000000..506cfeb --- /dev/null +++ b/hasura/migrations/1602633863978_create_table_public_users/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."users"; + type: run_sql diff --git a/hasura/migrations/1602633863978_create_table_public_users/up.yaml b/hasura/migrations/1602633863978_create_table_public_users/up.yaml new file mode 100644 index 0000000..f8c7bae --- /dev/null +++ b/hasura/migrations/1602633863978_create_table_public_users/up.yaml @@ -0,0 +1,17 @@ +- args: + cascade: false + read_only: false + sql: "CREATE TABLE \"public\".\"users\"(\"email\" text NOT NULL, \"authid\" text + NOT NULL, \"created_at\" timestamptz NOT NULL DEFAULT now(), \"updated_at\" + timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (\"email\") );\nCREATE OR REPLACE + FUNCTION \"public\".\"set_current_timestamp_updated_at\"()\nRETURNS TRIGGER + AS $$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n _new.\"updated_at\" + = NOW();\n RETURN _new;\nEND;\n$$ LANGUAGE plpgsql;\nCREATE TRIGGER \"set_public_users_updated_at\"\nBEFORE + UPDATE ON \"public\".\"users\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT + ON TRIGGER \"set_public_users_updated_at\" ON \"public\".\"users\" \nIS 'trigger + to set value of column \"updated_at\" to current timestamp on row update';" + type: run_sql +- args: + name: users + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1602633916489_update_permission_user_public_table_users/down.yaml b/hasura/migrations/1602633916489_update_permission_user_public_table_users/down.yaml new file mode 100644 index 0000000..5022ed8 --- /dev/null +++ b/hasura/migrations/1602633916489_update_permission_user_public_table_users/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: users + schema: public + type: drop_insert_permission diff --git a/hasura/migrations/1602633916489_update_permission_user_public_table_users/up.yaml b/hasura/migrations/1602633916489_update_permission_user_public_table_users/up.yaml new file mode 100644 index 0000000..853a0fd --- /dev/null +++ b/hasura/migrations/1602633916489_update_permission_user_public_table_users/up.yaml @@ -0,0 +1,16 @@ +- args: + permission: + allow_upsert: true + backend_only: false + check: {} + columns: + - email + - authid + - created_at + - updated_at + set: {} + role: user + table: + name: users + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1602633926494_update_permission_user_public_table_users/down.yaml b/hasura/migrations/1602633926494_update_permission_user_public_table_users/down.yaml new file mode 100644 index 0000000..9e5d0db --- /dev/null +++ b/hasura/migrations/1602633926494_update_permission_user_public_table_users/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: users + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1602633926494_update_permission_user_public_table_users/up.yaml b/hasura/migrations/1602633926494_update_permission_user_public_table_users/up.yaml new file mode 100644 index 0000000..046c0a7 --- /dev/null +++ b/hasura/migrations/1602633926494_update_permission_user_public_table_users/up.yaml @@ -0,0 +1,19 @@ +- args: + permission: + allow_aggregations: false + backend_only: false + columns: + - authid + - email + - created_at + - updated_at + computed_fields: [] + filter: + authid: + _eq: X-Hasura-User-Id + limit: null + role: user + table: + name: users + schema: public + type: create_select_permission diff --git a/hasura/migrations/1602633933824_update_permission_user_public_table_users/down.yaml b/hasura/migrations/1602633933824_update_permission_user_public_table_users/down.yaml new file mode 100644 index 0000000..63eb459 --- /dev/null +++ b/hasura/migrations/1602633933824_update_permission_user_public_table_users/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: users + schema: public + type: drop_update_permission diff --git a/hasura/migrations/1602633933824_update_permission_user_public_table_users/up.yaml b/hasura/migrations/1602633933824_update_permission_user_public_table_users/up.yaml new file mode 100644 index 0000000..2469966 --- /dev/null +++ b/hasura/migrations/1602633933824_update_permission_user_public_table_users/up.yaml @@ -0,0 +1,14 @@ +- args: + permission: + backend_only: false + columns: + - authid + filter: + authid: + _eq: X-Hasura-User-Id + set: {} + role: user + table: + name: users + schema: public + type: create_update_permission diff --git a/hasura/migrations/1602634004830_create_table_public_bodyshops/down.yaml b/hasura/migrations/1602634004830_create_table_public_bodyshops/down.yaml new file mode 100644 index 0000000..365111e --- /dev/null +++ b/hasura/migrations/1602634004830_create_table_public_bodyshops/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."bodyshops"; + type: run_sql diff --git a/hasura/migrations/1602634004830_create_table_public_bodyshops/up.yaml b/hasura/migrations/1602634004830_create_table_public_bodyshops/up.yaml new file mode 100644 index 0000000..f8c7340 --- /dev/null +++ b/hasura/migrations/1602634004830_create_table_public_bodyshops/up.yaml @@ -0,0 +1,22 @@ +- args: + cascade: false + read_only: false + sql: CREATE EXTENSION IF NOT EXISTS pgcrypto; + type: run_sql +- args: + cascade: false + read_only: false + sql: "CREATE TABLE \"public\".\"bodyshops\"(\"id\" uuid NOT NULL DEFAULT gen_random_uuid(), + \"created_at\" timestamptz NOT NULL DEFAULT now(), \"updated_at\" timestamptz + NOT NULL DEFAULT now(), \"shopname\" text NOT NULL, PRIMARY KEY (\"id\") );\nCREATE + OR REPLACE FUNCTION \"public\".\"set_current_timestamp_updated_at\"()\nRETURNS + TRIGGER AS $$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n _new.\"updated_at\" + = NOW();\n RETURN _new;\nEND;\n$$ LANGUAGE plpgsql;\nCREATE TRIGGER \"set_public_bodyshops_updated_at\"\nBEFORE + UPDATE ON \"public\".\"bodyshops\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT + ON TRIGGER \"set_public_bodyshops_updated_at\" ON \"public\".\"bodyshops\" \nIS + 'trigger to set value of column \"updated_at\" to current timestamp on row update';" + type: run_sql +- args: + name: bodyshops + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1602634062624_create_table_public_associations/down.yaml b/hasura/migrations/1602634062624_create_table_public_associations/down.yaml new file mode 100644 index 0000000..cbbd841 --- /dev/null +++ b/hasura/migrations/1602634062624_create_table_public_associations/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."associations"; + type: run_sql diff --git a/hasura/migrations/1602634062624_create_table_public_associations/up.yaml b/hasura/migrations/1602634062624_create_table_public_associations/up.yaml new file mode 100644 index 0000000..b78dca5 --- /dev/null +++ b/hasura/migrations/1602634062624_create_table_public_associations/up.yaml @@ -0,0 +1,13 @@ +- args: + cascade: false + read_only: false + sql: CREATE TABLE "public"."associations"("email" text NOT NULL, "bodyshopid" + uuid NOT NULL, PRIMARY KEY ("email","bodyshopid") , FOREIGN KEY ("bodyshopid") + REFERENCES "public"."bodyshops"("id") ON UPDATE cascade ON DELETE cascade, FOREIGN + KEY ("email") REFERENCES "public"."users"("email") ON UPDATE cascade ON DELETE + cascade); + type: run_sql +- args: + name: associations + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1602634079354_track_all_relationships/down.yaml b/hasura/migrations/1602634079354_track_all_relationships/down.yaml new file mode 100644 index 0000000..fb63405 --- /dev/null +++ b/hasura/migrations/1602634079354_track_all_relationships/down.yaml @@ -0,0 +1,24 @@ +- args: + relationship: associations + table: + name: users + schema: public + type: drop_relationship +- args: + relationship: associations + table: + name: bodyshops + schema: public + type: drop_relationship +- args: + relationship: bodyshop + table: + name: associations + schema: public + type: drop_relationship +- args: + relationship: user + table: + name: associations + schema: public + type: drop_relationship diff --git a/hasura/migrations/1602634079354_track_all_relationships/up.yaml b/hasura/migrations/1602634079354_track_all_relationships/up.yaml new file mode 100644 index 0000000..df14aa2 --- /dev/null +++ b/hasura/migrations/1602634079354_track_all_relationships/up.yaml @@ -0,0 +1,40 @@ +- args: + name: associations + table: + name: users + schema: public + using: + foreign_key_constraint_on: + column: email + table: + name: associations + schema: public + type: create_array_relationship +- args: + name: associations + table: + name: bodyshops + schema: public + using: + foreign_key_constraint_on: + column: bodyshopid + table: + name: associations + schema: public + type: create_array_relationship +- args: + name: bodyshop + table: + name: associations + schema: public + using: + foreign_key_constraint_on: bodyshopid + type: create_object_relationship +- args: + name: user + table: + name: associations + schema: public + using: + foreign_key_constraint_on: email + type: create_object_relationship diff --git a/hasura/migrations/1602634102716_update_permission_user_public_table_associations/down.yaml b/hasura/migrations/1602634102716_update_permission_user_public_table_associations/down.yaml new file mode 100644 index 0000000..27cf8ba --- /dev/null +++ b/hasura/migrations/1602634102716_update_permission_user_public_table_associations/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: associations + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1602634102716_update_permission_user_public_table_associations/up.yaml b/hasura/migrations/1602634102716_update_permission_user_public_table_associations/up.yaml new file mode 100644 index 0000000..9ac0d3d --- /dev/null +++ b/hasura/migrations/1602634102716_update_permission_user_public_table_associations/up.yaml @@ -0,0 +1,18 @@ +- args: + permission: + allow_aggregations: false + backend_only: false + columns: + - email + - bodyshopid + computed_fields: [] + filter: + user: + authid: + _eq: X-Hasura-User-Id + limit: null + role: user + table: + name: associations + schema: public + type: create_select_permission diff --git a/hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/down.yaml b/hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/down.yaml new file mode 100644 index 0000000..8559c1b --- /dev/null +++ b/hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: bodyshops + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/up.yaml b/hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/up.yaml new file mode 100644 index 0000000..3df4748 --- /dev/null +++ b/hasura/migrations/1602634118550_update_permission_user_public_table_bodyshops/up.yaml @@ -0,0 +1,21 @@ +- args: + permission: + allow_aggregations: false + backend_only: false + columns: + - id + - created_at + - updated_at + - shopname + computed_fields: [] + filter: + associations: + user: + authid: + _eq: X-Hasura-User-Id + limit: null + role: user + table: + name: bodyshops + schema: public + type: create_select_permission diff --git a/hasura/migrations/1602634310021_create_table_public_jobs/down.yaml b/hasura/migrations/1602634310021_create_table_public_jobs/down.yaml new file mode 100644 index 0000000..2a36807 --- /dev/null +++ b/hasura/migrations/1602634310021_create_table_public_jobs/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."jobs"; + type: run_sql diff --git a/hasura/migrations/1602634310021_create_table_public_jobs/up.yaml b/hasura/migrations/1602634310021_create_table_public_jobs/up.yaml new file mode 100644 index 0000000..da635d8 --- /dev/null +++ b/hasura/migrations/1602634310021_create_table_public_jobs/up.yaml @@ -0,0 +1,26 @@ +- args: + cascade: false + read_only: false + sql: CREATE EXTENSION IF NOT EXISTS pgcrypto; + type: run_sql +- args: + cascade: false + read_only: false + sql: "CREATE TABLE \"public\".\"jobs\"(\"id\" uuid NOT NULL DEFAULT gen_random_uuid(), + \"bodyshopid\" uuid NOT NULL, \"created_at\" timestamptz NOT NULL DEFAULT now(), + \"updated_at\" timestamptz NOT NULL DEFAULT now(), \"ro_number\" text, \"ins_co_nm\" + text, \"clm_no\" text, \"clm_total\" numeric, \"ownr_ln\" text, \"ownr_fn\" + text, \"v_vin\" text, \"v_make_desc\" text, \"v_model_desc\" text, \"v_model_yr\" + text, \"v_type\" text, PRIMARY KEY (\"id\") , FOREIGN KEY (\"bodyshopid\") REFERENCES + \"public\".\"bodyshops\"(\"id\") ON UPDATE cascade ON DELETE cascade);\nCREATE + OR REPLACE FUNCTION \"public\".\"set_current_timestamp_updated_at\"()\nRETURNS + TRIGGER AS $$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n _new.\"updated_at\" + = NOW();\n RETURN _new;\nEND;\n$$ LANGUAGE plpgsql;\nCREATE TRIGGER \"set_public_jobs_updated_at\"\nBEFORE + UPDATE ON \"public\".\"jobs\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT + ON TRIGGER \"set_public_jobs_updated_at\" ON \"public\".\"jobs\" \nIS 'trigger + to set value of column \"updated_at\" to current timestamp on row update';" + type: run_sql +- args: + name: jobs + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1602634320838_track_all_relationships/down.yaml b/hasura/migrations/1602634320838_track_all_relationships/down.yaml new file mode 100644 index 0000000..482b92d --- /dev/null +++ b/hasura/migrations/1602634320838_track_all_relationships/down.yaml @@ -0,0 +1,12 @@ +- args: + relationship: jobs + table: + name: bodyshops + schema: public + type: drop_relationship +- args: + relationship: bodyshop + table: + name: jobs + schema: public + type: drop_relationship diff --git a/hasura/migrations/1602634320838_track_all_relationships/up.yaml b/hasura/migrations/1602634320838_track_all_relationships/up.yaml new file mode 100644 index 0000000..da8e185 --- /dev/null +++ b/hasura/migrations/1602634320838_track_all_relationships/up.yaml @@ -0,0 +1,20 @@ +- args: + name: jobs + table: + name: bodyshops + schema: public + using: + foreign_key_constraint_on: + column: bodyshopid + table: + name: jobs + schema: public + type: create_array_relationship +- args: + name: bodyshop + table: + name: jobs + schema: public + using: + foreign_key_constraint_on: bodyshopid + type: create_object_relationship diff --git a/hasura/migrations/1602634353429_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1602634353429_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 0000000..30afb6b --- /dev/null +++ b/hasura/migrations/1602634353429_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_insert_permission diff --git a/hasura/migrations/1602634353429_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1602634353429_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 0000000..d4019dc --- /dev/null +++ b/hasura/migrations/1602634353429_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,32 @@ +- args: + permission: + allow_upsert: true + backend_only: false + check: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - id + - bodyshopid + - created_at + - updated_at + - ro_number + - ins_co_nm + - clm_no + - clm_total + - ownr_ln + - ownr_fn + - v_vin + - v_make_desc + - v_model_desc + - v_model_yr + - v_type + set: {} + role: user + table: + name: jobs + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1602634359789_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1602634359789_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 0000000..0422422 --- /dev/null +++ b/hasura/migrations/1602634359789_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1602634359789_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1602634359789_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 0000000..9182d25 --- /dev/null +++ b/hasura/migrations/1602634359789_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,33 @@ +- args: + permission: + allow_aggregations: false + backend_only: false + columns: + - clm_total + - clm_no + - ins_co_nm + - ownr_fn + - ownr_ln + - ro_number + - v_make_desc + - v_model_desc + - v_model_yr + - v_type + - v_vin + - created_at + - updated_at + - bodyshopid + - id + computed_fields: [] + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + limit: null + role: user + table: + name: jobs + schema: public + type: create_select_permission diff --git a/hasura/migrations/1602634365537_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1602634365537_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 0000000..8bb0759 --- /dev/null +++ b/hasura/migrations/1602634365537_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_update_permission diff --git a/hasura/migrations/1602634365537_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1602634365537_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 0000000..6b03219 --- /dev/null +++ b/hasura/migrations/1602634365537_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,31 @@ +- args: + permission: + backend_only: false + columns: + - clm_total + - clm_no + - ins_co_nm + - ownr_fn + - ownr_ln + - ro_number + - v_make_desc + - v_model_desc + - v_model_yr + - v_type + - v_vin + - created_at + - updated_at + - bodyshopid + - id + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + set: {} + role: user + table: + name: jobs + schema: public + type: create_update_permission diff --git a/hasura/migrations/1602634492124_create_table_public_joblines/down.yaml b/hasura/migrations/1602634492124_create_table_public_joblines/down.yaml new file mode 100644 index 0000000..c1e766e --- /dev/null +++ b/hasura/migrations/1602634492124_create_table_public_joblines/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: DROP TABLE "public"."joblines"; + type: run_sql diff --git a/hasura/migrations/1602634492124_create_table_public_joblines/up.yaml b/hasura/migrations/1602634492124_create_table_public_joblines/up.yaml new file mode 100644 index 0000000..33ae6ba --- /dev/null +++ b/hasura/migrations/1602634492124_create_table_public_joblines/up.yaml @@ -0,0 +1,25 @@ +- args: + cascade: false + read_only: false + sql: CREATE EXTENSION IF NOT EXISTS pgcrypto; + type: run_sql +- args: + cascade: false + read_only: false + sql: "CREATE TABLE \"public\".\"joblines\"(\"id\" uuid NOT NULL DEFAULT gen_random_uuid(), + \"created_at\" timestamptz NOT NULL DEFAULT now(), \"updated_at\" timestamptz + NOT NULL DEFAULT now(), \"jobid\" uuid NOT NULL, \"unq_seq\" text, \"line_ind\" + text, \"line_desc\" text, \"part_type\" text, \"oem_partno\" text, \"db_price\" + numeric, \"act_price\" numeric, \"part_qty\" numeric, PRIMARY KEY (\"id\") , + FOREIGN KEY (\"jobid\") REFERENCES \"public\".\"jobs\"(\"id\") ON UPDATE cascade + ON DELETE cascade);\nCREATE OR REPLACE FUNCTION \"public\".\"set_current_timestamp_updated_at\"()\nRETURNS + TRIGGER AS $$\nDECLARE\n _new record;\nBEGIN\n _new := NEW;\n _new.\"updated_at\" + = NOW();\n RETURN _new;\nEND;\n$$ LANGUAGE plpgsql;\nCREATE TRIGGER \"set_public_joblines_updated_at\"\nBEFORE + UPDATE ON \"public\".\"joblines\"\nFOR EACH ROW\nEXECUTE PROCEDURE \"public\".\"set_current_timestamp_updated_at\"();\nCOMMENT + ON TRIGGER \"set_public_joblines_updated_at\" ON \"public\".\"joblines\" \nIS + 'trigger to set value of column \"updated_at\" to current timestamp on row update';" + type: run_sql +- args: + name: joblines + schema: public + type: add_existing_table_or_view diff --git a/hasura/migrations/1602634496799_track_all_relationships/down.yaml b/hasura/migrations/1602634496799_track_all_relationships/down.yaml new file mode 100644 index 0000000..bb43b5d --- /dev/null +++ b/hasura/migrations/1602634496799_track_all_relationships/down.yaml @@ -0,0 +1,12 @@ +- args: + relationship: joblines + table: + name: jobs + schema: public + type: drop_relationship +- args: + relationship: job + table: + name: joblines + schema: public + type: drop_relationship diff --git a/hasura/migrations/1602634496799_track_all_relationships/up.yaml b/hasura/migrations/1602634496799_track_all_relationships/up.yaml new file mode 100644 index 0000000..ad95261 --- /dev/null +++ b/hasura/migrations/1602634496799_track_all_relationships/up.yaml @@ -0,0 +1,20 @@ +- args: + name: joblines + table: + name: jobs + schema: public + using: + foreign_key_constraint_on: + column: jobid + table: + name: joblines + schema: public + type: create_array_relationship +- args: + name: job + table: + name: joblines + schema: public + using: + foreign_key_constraint_on: jobid + type: create_object_relationship diff --git a/hasura/migrations/1602634513418_update_permission_user_public_table_joblines/down.yaml b/hasura/migrations/1602634513418_update_permission_user_public_table_joblines/down.yaml new file mode 100644 index 0000000..d290bbb --- /dev/null +++ b/hasura/migrations/1602634513418_update_permission_user_public_table_joblines/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_insert_permission diff --git a/hasura/migrations/1602634513418_update_permission_user_public_table_joblines/up.yaml b/hasura/migrations/1602634513418_update_permission_user_public_table_joblines/up.yaml new file mode 100644 index 0000000..299eb15 --- /dev/null +++ b/hasura/migrations/1602634513418_update_permission_user_public_table_joblines/up.yaml @@ -0,0 +1,30 @@ +- args: + permission: + allow_upsert: true + backend_only: false + check: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - act_price + - db_price + - part_qty + - line_desc + - line_ind + - oem_partno + - part_type + - unq_seq + - created_at + - updated_at + - id + - jobid + set: {} + role: user + table: + name: joblines + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1602634518515_update_permission_user_public_table_joblines/down.yaml b/hasura/migrations/1602634518515_update_permission_user_public_table_joblines/down.yaml new file mode 100644 index 0000000..89e5a61 --- /dev/null +++ b/hasura/migrations/1602634518515_update_permission_user_public_table_joblines/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_select_permission diff --git a/hasura/migrations/1602634518515_update_permission_user_public_table_joblines/up.yaml b/hasura/migrations/1602634518515_update_permission_user_public_table_joblines/up.yaml new file mode 100644 index 0000000..f2d9bd9 --- /dev/null +++ b/hasura/migrations/1602634518515_update_permission_user_public_table_joblines/up.yaml @@ -0,0 +1,31 @@ +- args: + permission: + allow_aggregations: false + backend_only: false + columns: + - act_price + - db_price + - part_qty + - line_desc + - line_ind + - oem_partno + - part_type + - unq_seq + - created_at + - updated_at + - id + - jobid + computed_fields: [] + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + limit: null + role: user + table: + name: joblines + schema: public + type: create_select_permission diff --git a/hasura/migrations/1602634524485_update_permission_user_public_table_joblines/down.yaml b/hasura/migrations/1602634524485_update_permission_user_public_table_joblines/down.yaml new file mode 100644 index 0000000..e97fa62 --- /dev/null +++ b/hasura/migrations/1602634524485_update_permission_user_public_table_joblines/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: joblines + schema: public + type: drop_update_permission diff --git a/hasura/migrations/1602634524485_update_permission_user_public_table_joblines/up.yaml b/hasura/migrations/1602634524485_update_permission_user_public_table_joblines/up.yaml new file mode 100644 index 0000000..2cdc8a8 --- /dev/null +++ b/hasura/migrations/1602634524485_update_permission_user_public_table_joblines/up.yaml @@ -0,0 +1,29 @@ +- args: + permission: + backend_only: false + columns: + - act_price + - db_price + - part_qty + - line_desc + - line_ind + - oem_partno + - part_type + - unq_seq + - created_at + - updated_at + - id + - jobid + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + set: {} + role: user + table: + name: joblines + schema: public + type: create_update_permission diff --git a/hasura/migrations/metadata.yaml b/hasura/migrations/metadata.yaml new file mode 100644 index 0000000..6ad254f --- /dev/null +++ b/hasura/migrations/metadata.yaml @@ -0,0 +1,264 @@ +version: 2 +tables: +- table: + schema: public + name: associations + object_relationships: + - name: bodyshop + using: + foreign_key_constraint_on: bodyshopid + - name: user + using: + foreign_key_constraint_on: email + select_permissions: + - role: user + permission: + columns: + - email + - bodyshopid + filter: + user: + authid: + _eq: X-Hasura-User-Id +- table: + schema: public + name: bodyshops + array_relationships: + - name: associations + using: + foreign_key_constraint_on: + column: bodyshopid + table: + schema: public + name: associations + - name: jobs + using: + foreign_key_constraint_on: + column: bodyshopid + table: + schema: public + name: jobs + select_permissions: + - role: user + permission: + columns: + - id + - created_at + - updated_at + - shopname + filter: + associations: + user: + authid: + _eq: X-Hasura-User-Id +- table: + schema: public + name: joblines + object_relationships: + - name: job + using: + foreign_key_constraint_on: jobid + insert_permissions: + - role: user + permission: + check: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - act_price + - db_price + - part_qty + - line_desc + - line_ind + - oem_partno + - part_type + - unq_seq + - created_at + - updated_at + - id + - jobid + backend_only: false + select_permissions: + - role: user + permission: + columns: + - act_price + - db_price + - part_qty + - line_desc + - line_ind + - oem_partno + - part_type + - unq_seq + - created_at + - updated_at + - id + - jobid + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + update_permissions: + - role: user + permission: + columns: + - act_price + - db_price + - part_qty + - line_desc + - line_ind + - oem_partno + - part_type + - unq_seq + - created_at + - updated_at + - id + - jobid + filter: + job: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + check: null +- table: + schema: public + name: jobs + object_relationships: + - name: bodyshop + using: + foreign_key_constraint_on: bodyshopid + array_relationships: + - name: joblines + using: + foreign_key_constraint_on: + column: jobid + table: + schema: public + name: joblines + insert_permissions: + - role: user + permission: + check: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - id + - bodyshopid + - created_at + - updated_at + - ro_number + - ins_co_nm + - clm_no + - clm_total + - ownr_ln + - ownr_fn + - v_vin + - v_make_desc + - v_model_desc + - v_model_yr + - v_type + backend_only: false + select_permissions: + - role: user + permission: + columns: + - clm_total + - clm_no + - ins_co_nm + - ownr_fn + - ownr_ln + - ro_number + - v_make_desc + - v_model_desc + - v_model_yr + - v_type + - v_vin + - created_at + - updated_at + - bodyshopid + - id + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + update_permissions: + - role: user + permission: + columns: + - clm_total + - clm_no + - ins_co_nm + - ownr_fn + - ownr_ln + - ro_number + - v_make_desc + - v_model_desc + - v_model_yr + - v_type + - v_vin + - created_at + - updated_at + - bodyshopid + - id + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + check: null +- table: + schema: public + name: users + array_relationships: + - name: associations + using: + foreign_key_constraint_on: + column: email + table: + schema: public + name: associations + insert_permissions: + - role: user + permission: + check: {} + columns: + - email + - authid + - created_at + - updated_at + backend_only: false + select_permissions: + - role: user + permission: + columns: + - authid + - email + - created_at + - updated_at + filter: + authid: + _eq: X-Hasura-User-Id + update_permissions: + - role: user + permission: + columns: + - authid + filter: + authid: + _eq: X-Hasura-User-Id + check: null diff --git a/package-lock.json b/package-lock.json index 8eeca61..d92fda7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,6 +57,54 @@ "resize-observer-polyfill": "^1.5.0" } }, + "@apollo/client": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.2.4.tgz", + "integrity": "sha512-lfsxKINoc11+g4NQFyKFuxszc/GlecHrxkJYvx/oWkdpscSU5bm/c+BwI/yvk1/E3yfbR7Afi9XIYrt212xrtA==", + "requires": { + "@graphql-typed-document-node/core": "^3.0.0", + "@types/zen-observable": "^0.8.0", + "@wry/context": "^0.5.2", + "@wry/equality": "^0.2.0", + "fast-json-stable-stringify": "^2.0.0", + "graphql-tag": "^2.11.0", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.13.0", + "prop-types": "^15.7.2", + "symbol-observable": "^2.0.0", + "terser": "^5.2.0", + "ts-invariant": "^0.4.4", + "tslib": "^1.10.0", + "zen-observable": "^0.8.14" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "symbol-observable": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", + "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==" + }, + "terser": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.5.tgz", + "integrity": "sha512-Qw3CZAMmmfU824AoGKalx+riwocSI5Cs0PoGp9RdSLfmxkmJgyBxqLBP/isDNtFyhHnitikvRMZzyVgeq+U+Tg==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + } + } + } + }, "@babel/code-frame": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", @@ -1746,6 +1794,426 @@ "resolved": "https://registry.npmjs.org/@fingerprintjs/fingerprintjs/-/fingerprintjs-2.1.4.tgz", "integrity": "sha512-EeNKCnWK6kUmmfl4jhcXkNuhVuyWZnsTUaOALsN/INamS5dMSnBxCZ5DRYd+Px88OmKLrMCKP517rvtfJ24pCw==" }, + "@firebase/analytics": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.6.0.tgz", + "integrity": "sha512-6qYEOPUVYrMhqvJ46Z5Uf1S4uULd6d7vGpMP5Qz+u8kIWuOQGcPdJKQap+Hla6Rq164or9gC2HRXuYXKlgWfpw==", + "requires": { + "@firebase/analytics-types": "0.4.0", + "@firebase/component": "0.1.19", + "@firebase/installations": "0.4.17", + "@firebase/logger": "0.2.6", + "@firebase/util": "0.3.2", + "tslib": "^1.11.1" + } + }, + "@firebase/analytics-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.4.0.tgz", + "integrity": "sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA==" + }, + "@firebase/app": { + "version": "0.6.11", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.11.tgz", + "integrity": "sha512-FH++PaoyTzfTAVuJ0gITNYEIcjT5G+D0671La27MU8Vvr6MTko+5YUZ4xS9QItyotSeRF4rMJ1KR7G8LSyySiA==", + "requires": { + "@firebase/app-types": "0.6.1", + "@firebase/component": "0.1.19", + "@firebase/logger": "0.2.6", + "@firebase/util": "0.3.2", + "dom-storage": "2.1.0", + "tslib": "^1.11.1", + "xmlhttprequest": "1.8.0" + } + }, + "@firebase/app-types": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", + "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" + }, + "@firebase/auth": { + "version": "0.14.9", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.9.tgz", + "integrity": "sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w==", + "requires": { + "@firebase/auth-types": "0.10.1" + } + }, + "@firebase/auth-interop-types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", + "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==" + }, + "@firebase/auth-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.1.tgz", + "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==" + }, + "@firebase/component": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.19.tgz", + "integrity": "sha512-L0S3g8eqaerg8y0zox3oOHSTwn/FE8RbcRHiurnbESvDViZtP5S5WnhuAPd7FnFxa8ElWK0z1Tr3ikzWDv1xdQ==", + "requires": { + "@firebase/util": "0.3.2", + "tslib": "^1.11.1" + } + }, + "@firebase/database": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.13.tgz", + "integrity": "sha512-NommVkAPzU7CKd1gyehmi3lz0K78q0KOfiex7Nfy7MBMwknLm7oNqKovXSgQV1PCLvKXvvAplDSFhDhzIf9obA==", + "requires": { + "@firebase/auth-interop-types": "0.1.5", + "@firebase/component": "0.1.19", + "@firebase/database-types": "0.5.2", + "@firebase/logger": "0.2.6", + "@firebase/util": "0.3.2", + "faye-websocket": "0.11.3", + "tslib": "^1.11.1" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "@firebase/database-types": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.2.tgz", + "integrity": "sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g==", + "requires": { + "@firebase/app-types": "0.6.1" + } + }, + "@firebase/firestore": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.17.3.tgz", + "integrity": "sha512-wRdrgeSBJ50eo63x8GnO8NgVNe3vBw2xhKhyMXl0JTWQIbxnlMjAHcz7b85VvsqPLI7U70PgWQnfQtJOXRCNUA==", + "requires": { + "@firebase/component": "0.1.19", + "@firebase/firestore-types": "1.13.0", + "@firebase/logger": "0.2.6", + "@firebase/util": "0.3.2", + "@firebase/webchannel-wrapper": "0.3.0", + "@grpc/grpc-js": "^1.0.0", + "@grpc/proto-loader": "^0.5.0", + "node-fetch": "2.6.1", + "tslib": "^1.11.1" + } + }, + "@firebase/firestore-types": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.13.0.tgz", + "integrity": "sha512-QF5CAuYOHE6Zbsn1uEg6wkl836iP+i6C0C/Zs3kF60eebxZvTWp8JSZk19Ar+jj4w+ye8/7H5olu5CqDNjWpEA==" + }, + "@firebase/functions": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.5.1.tgz", + "integrity": "sha512-yyjPZXXvzFPjkGRSqFVS5Hc2Y7Y48GyyMH+M3i7hLGe69r/59w6wzgXKqTiSYmyE1pxfjxU4a1YqBDHNkQkrYQ==", + "requires": { + "@firebase/component": "0.1.19", + "@firebase/functions-types": "0.3.17", + "@firebase/messaging-types": "0.5.0", + "node-fetch": "2.6.1", + "tslib": "^1.11.1" + } + }, + "@firebase/functions-types": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.17.tgz", + "integrity": "sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ==" + }, + "@firebase/installations": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.17.tgz", + "integrity": "sha512-AE/TyzIpwkC4UayRJD419xTqZkKzxwk0FLht3Dci8WI2OEKHSwoZG9xv4hOBZebe+fDzoV2EzfatQY8c/6Avig==", + "requires": { + "@firebase/component": "0.1.19", + "@firebase/installations-types": "0.3.4", + "@firebase/util": "0.3.2", + "idb": "3.0.2", + "tslib": "^1.11.1" + } + }, + "@firebase/installations-types": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", + "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==" + }, + "@firebase/logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz", + "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==" + }, + "@firebase/messaging": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.1.tgz", + "integrity": "sha512-iev/ST9v0xd/8YpGYrZtDcqdD9J6ZWzSuceRn8EKy5vIgQvW/rk2eTQc8axzvDpQ36ZfphMYuhW6XuNrR3Pd2Q==", + "requires": { + "@firebase/component": "0.1.19", + "@firebase/installations": "0.4.17", + "@firebase/messaging-types": "0.5.0", + "@firebase/util": "0.3.2", + "idb": "3.0.2", + "tslib": "^1.11.1" + } + }, + "@firebase/messaging-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", + "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==" + }, + "@firebase/performance": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.2.tgz", + "integrity": "sha512-irHTCVWJ/sxJo0QHg+yQifBeVu8ZJPihiTqYzBUz/0AGc51YSt49FZwqSfknvCN2+OfHaazz/ARVBn87g7Ex8g==", + "requires": { + "@firebase/component": "0.1.19", + "@firebase/installations": "0.4.17", + "@firebase/logger": "0.2.6", + "@firebase/performance-types": "0.0.13", + "@firebase/util": "0.3.2", + "tslib": "^1.11.1" + } + }, + "@firebase/performance-types": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz", + "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==" + }, + "@firebase/polyfill": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz", + "integrity": "sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==", + "requires": { + "core-js": "3.6.5", + "promise-polyfill": "8.1.3", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + } + } + }, + "@firebase/remote-config": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.28.tgz", + "integrity": "sha512-4zSdyxpt94jAnFhO8toNjG8oMKBD+xTuBIcK+Nw8BdQWeJhEamgXlupdBARUk1uf3AvYICngHH32+Si/dMVTbw==", + "requires": { + "@firebase/component": "0.1.19", + "@firebase/installations": "0.4.17", + "@firebase/logger": "0.2.6", + "@firebase/remote-config-types": "0.1.9", + "@firebase/util": "0.3.2", + "tslib": "^1.11.1" + } + }, + "@firebase/remote-config-types": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz", + "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==" + }, + "@firebase/storage": { + "version": "0.3.43", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.43.tgz", + "integrity": "sha512-Jp54jcuyimLxPhZHFVAhNbQmgTu3Sda7vXjXrNpPEhlvvMSq4yuZBR6RrZxe/OrNVprLHh/6lTCjwjOVSo3bWA==", + "requires": { + "@firebase/component": "0.1.19", + "@firebase/storage-types": "0.3.13", + "@firebase/util": "0.3.2", + "tslib": "^1.11.1" + } + }, + "@firebase/storage-types": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", + "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==" + }, + "@firebase/util": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.2.tgz", + "integrity": "sha512-Dqs00++c8rwKky6KCKLLY2T1qYO4Q+X5t+lF7DInXDNF4ae1Oau35bkD+OpJ9u7l1pEv7KHowP6CUKuySCOc8g==", + "requires": { + "tslib": "^1.11.1" + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.3.0.tgz", + "integrity": "sha512-VniCGPIgSGNEgOkh5phb3iKmSGIzcwrccy3IomMFRWPCMiCk2y98UQNJEoDs1yIHtZMstVjYWKYxnunIGzC5UQ==" + }, + "@graphql-typed-document-node/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.0.tgz", + "integrity": "sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg==" + }, + "@grpc/grpc-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.1.7.tgz", + "integrity": "sha512-EuxMstI0u778dp0nk6Fe3gHXYPeV6FYsWOe0/QFwxv1NQ6bc5Wl/0Yxa4xl9uBlKElL6AIxuASmSfu7KEJhqiw==", + "requires": { + "@grpc/proto-loader": "^0.6.0-pre14", + "@types/node": "^12.12.47", + "google-auth-library": "^6.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.6.0-pre9", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz", + "integrity": "sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.9.0", + "yargs": "^15.3.1" + } + }, + "@types/node": { + "version": "12.12.67", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.67.tgz", + "integrity": "sha512-R48tgL2izApf+9rYNH+3RBMbRpPeW3N8f0I9HMhggeq4UXwBDqumJ14SDs4ctTMhG11pIOduZ4z3QWGOiMc9Vg==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@grpc/proto-loader": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.5.tgz", + "integrity": "sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + } + }, "@hapi/address": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", @@ -2228,6 +2696,60 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, "@redux-saga/core": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", @@ -2521,6 +3043,11 @@ "@types/node": "*" } }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -2578,6 +3105,11 @@ "@types/node": "*" } }, + "@types/zen-observable": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.1.tgz", + "integrity": "sha512-wmk0xQI6Yy7Fs/il4EpOcflG4uonUpYGqvZARESLc2oy4u69fkatFLbJOeW4Q6awO15P4rduAe6xkwHevpXcUQ==" + }, "@typescript-eslint/eslint-plugin": { "version": "2.34.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", @@ -2798,6 +3330,22 @@ "@xtuc/long": "4.2.2" } }, + "@wry/context": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.5.2.tgz", + "integrity": "sha512-B/JLuRZ/vbEKHRUiGj6xiMojST1kHhu4WcreLfNN7q9DqQFrb97cWgf/kiYsPSUCAMVN0HzfFc8XjJdzgZzfjw==", + "requires": { + "tslib": "^1.9.3" + } + }, + "@wry/equality": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.2.0.tgz", + "integrity": "sha512-Y4d+WH6hs+KZJUC8YKLYGarjGekBrhslDbf/R20oV+AakHPINSitHfDRQz3EGcEWc1luXYNUvMhawWtZVWNGvQ==", + "requires": { + "tslib": "^1.9.3" + } + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -2818,6 +3366,14 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -2913,10 +3469,28 @@ } } }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + "agent-base": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, "aggregate-error": { "version": "3.1.0", @@ -3082,6 +3656,11 @@ "normalize-path": "^2.1.1" } }, + "apollo-link-logger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/apollo-link-logger/-/apollo-link-logger-2.0.0.tgz", + "integrity": "sha512-UBiQZM4KAcJokWRsYrMkyqOvWhnHXPEjNhhGMA1D/quHDk8YUjNmnwqf6KQtq8R8qNW3mQx3AeaWWxNRP3Q9+w==" + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -3281,11 +3860,6 @@ } } }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -4027,11 +4601,6 @@ } } }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" - }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -4055,16 +4624,16 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -4348,6 +4917,11 @@ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -5036,21 +5610,11 @@ "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, "compose-function": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", @@ -6277,6 +6841,11 @@ } } }, + "dom-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", + "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -6370,6 +6939,14 @@ "safer-buffer": "^2.1.0" } }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -7021,46 +7598,6 @@ "once": "^1.4.0" } }, - "engine.io-client": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz", - "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==", - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, "enhanced-resolve": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", @@ -7795,6 +8332,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -8243,6 +8785,11 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -8481,6 +9028,27 @@ } } }, + "firebase": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.23.0.tgz", + "integrity": "sha512-0b1zi0H8jT4KqyPabldzPhyKTeptw5E5a7KkjWW3MBMVV/LjbC6/NKhRR8sGQNbsbS2LnTvyEENWbqkZP2ZXtw==", + "requires": { + "@firebase/analytics": "0.6.0", + "@firebase/app": "0.6.11", + "@firebase/app-types": "0.6.1", + "@firebase/auth": "0.14.9", + "@firebase/database": "0.6.13", + "@firebase/firestore": "1.17.3", + "@firebase/functions": "0.5.1", + "@firebase/installations": "0.4.17", + "@firebase/messaging": "0.7.1", + "@firebase/performance": "0.4.2", + "@firebase/polyfill": "0.3.36", + "@firebase/remote-config": "0.1.28", + "@firebase/storage": "0.3.43", + "@firebase/util": "0.3.2" + } + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -8885,6 +9453,25 @@ } } }, + "gaxios": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.2.0.tgz", + "integrity": "sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + } + } + }, "gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -8893,6 +9480,15 @@ "globule": "^1.0.0" } }, + "gcp-metadata": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.0.tgz", + "integrity": "sha512-vQZD57cQkqIA6YPGXM/zc+PIZfNRFdukWGsGZ5+LcJzesi5xp6Gn7a02wRJi4eXPyArNMIYpPET4QMxGqtlk6Q==", + "requires": { + "gaxios": "^3.0.0", + "json-bigint": "^1.0.0" + } + }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -9118,6 +9714,50 @@ "minimatch": "~3.0.2" } }, + "google-auth-library": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.1.tgz", + "integrity": "sha512-0WfExOx3FrLYnY88RICQxvpaNzdwjz44OsHqHkIoAJfjY6Jck6CZRl1ASWadk+wbJ0LhkQ8rNY4zZebKml4Ghg==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^3.0.0", + "gcp-metadata": "^4.1.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "google-p12-pem": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz", + "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==", + "requires": { + "node-forge": "^0.10.0" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -9142,11 +9782,32 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "graphql": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.3.0.tgz", + "integrity": "sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==" + }, + "graphql-tag": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz", + "integrity": "sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==" + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" }, + "gtoken": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.4.tgz", + "integrity": "sha512-U9wnSp4GZ7ov6zRdPuRHG4TuqEWqRRgT1gfXGNArhzBUn9byrPeH8uTmBWU/ZiWJJvTEmkjhDIC3mqHWdVi3xQ==", + "requires": { + "gaxios": "^3.0.0", + "google-p12-pem": "^3.0.3", + "jws": "^4.0.0", + "mime": "^2.2.0" + } + }, "gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", @@ -9210,26 +9871,6 @@ } } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -9562,6 +10203,30 @@ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -9578,6 +10243,11 @@ "postcss": "^7.0.14" } }, + "idb": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", + "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" + }, "identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", @@ -9726,11 +10396,6 @@ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -10260,6 +10925,11 @@ "html-escaper": "^2.0.0" } }, + "iterall": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", + "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" + }, "jest": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", @@ -11901,6 +12571,14 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", @@ -12019,6 +12697,25 @@ "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", "dev": true }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -12209,6 +12906,11 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, "lodash.escape": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", @@ -12293,6 +12995,11 @@ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13097,8 +13804,7 @@ "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-forge": { "version": "0.10.0", @@ -13815,6 +14521,14 @@ } } }, + "optimism": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.13.0.tgz", + "integrity": "sha512-6JAh3dH+YUE4QUdsgUw8nUQyrNeBKfAEKOHMlLkQ168KhIYFIxzPsHakWrRXDnTO+x61RJrS3/2uEt6W0xlocA==", + "requires": { + "@wry/context": "^0.5.2" + } + }, "optimize-css-assets-webpack-plugin": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", @@ -14043,16 +14757,6 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -15434,6 +16138,11 @@ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, + "promise-polyfill": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", + "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" + }, "prompts": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", @@ -15471,6 +16180,33 @@ "dev": true, "optional": true }, + "protobufjs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz", + "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": "^13.7.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "13.13.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.25.tgz", + "integrity": "sha512-6ZMK4xRcF2XrPdKmPYQxZkdHKV18xKgUFVvhIgw2iwaaO6weleLPHLBGPZmLhjo+m1N+MZXRAoBEBCCVqgO2zQ==" + } + } + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -17965,41 +18701,6 @@ "kind-of": "^3.2.0" } }, - "socket.io-client": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.1.tgz", - "integrity": "sha512-YXmXn3pA8abPOY//JtYxou95Ihvzmg8U6kQyolArkIyLd0pgVhrfor/iMsox8cn07WCOOvvuJ6XKegzIucPutQ==", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.4.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz", - "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==", - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, "sockjs": { "version": "0.3.20", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", @@ -18625,6 +19326,25 @@ } } }, + "subscriptions-transport-ws": { + "version": "0.9.18", + "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz", + "integrity": "sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA==", + "requires": { + "backo2": "^1.0.2", + "eventemitter3": "^3.1.0", + "iterall": "^1.2.1", + "symbol-observable": "^1.0.4", + "ws": "^5.2.0" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + } + } + }, "sudo-prompt": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", @@ -19197,11 +19917,6 @@ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -19318,6 +20033,14 @@ "utf8-byte-length": "^1.0.1" } }, + "ts-invariant": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", + "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", + "requires": { + "tslib": "^1.9.3" + } + }, "ts-pnp": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", @@ -20809,10 +21532,10 @@ "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", "dev": true }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" }, "xregexp": { "version": "4.3.0", @@ -20978,10 +21701,10 @@ "fd-slicer": "~1.1.0" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + "zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" } } } diff --git a/package.json b/package.json index 0b94a9d..c2a8400 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,18 @@ "main": "electron/main.js", "homepage": "./", "dependencies": { + "@apollo/client": "^3.2.4", "@fingerprintjs/fingerprintjs": "^2.1.4", "antd": "^4.7.0", + "apollo-link-logger": "^2.0.0", "chokidar": "^3.4.3", "dbffile": "^1.4.3", "dotenv": "^8.2.0", "electron-is-dev": "^1.2.0", "electron-settings": "^4.0.2", "electron-squirrel-startup": "^1.0.0", + "firebase": "^7.23.0", + "graphql": "^15.3.0", "node-sass": "^4.14.1", "react": "^16.13.1", "react-dom": "^16.13.1", @@ -23,7 +27,7 @@ "redux-persist": "^6.0.0", "redux-saga": "^1.1.3", "reselect": "^4.0.0", - "socket.io-client": "^2.3.1" + "subscriptions-transport-ws": "^0.9.18" }, "scripts": { "start": "react-scripts start", diff --git a/src/App/App.jsx b/src/App/App.jsx index 10b5aef..2424272 100644 --- a/src/App/App.jsx +++ b/src/App/App.jsx @@ -1,55 +1,41 @@ -import { Button, Layout } from "antd"; +import { ApolloProvider } from "@apollo/client"; +import { ConfigProvider, Spin } from "antd"; +import enLocale from "antd/es/locale/en_US"; import React, { useEffect } from "react"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; -import ipcTypes from "../ipc.types"; +import RoutesPage from "../components/pages/routes/routes.page"; +import SignInPage from "../components/pages/sign-in/sign-in.page"; +import client from "../graphql/GraphQLClient"; +import { checkUserSession } from "../redux/user/user.actions"; +import { selectCurrentUser } from "../redux/user/user.selectors"; -const { ipcRenderer } = window.require("electron"); -const settings = window.require("electron-settings"); +const mapStateToProps = createStructuredSelector({ + currentUser: selectCurrentUser, +}); +const mapDispatchToProps = (dispatch) => ({ + checkUserSession: () => dispatch(checkUserSession()), +}); -const mapStateToProps = createStructuredSelector({}); -const mapDispatchToProps = (dispatch) => ({}); - -export function App() { +export function App({ currentUser, checkUserSession }) { useEffect(() => { - ipcRenderer.on("test-success", (event, obj) => { - console.log("Test Success", obj); - }); - ipcRenderer.on(ipcTypes.default.filewatcher.startSuccess, (event, obj) => { - console.log(ipcTypes.default.filewatcher.startSuccess, obj); - }); - // Cleanup the listener events so that memory leaks are avoided. - return function cleanup() { - ipcRenderer.removeAllListeners( - "test-success", - ipcTypes.default.filewatcher.startSuccess - ); - }; - }, []); + checkUserSession(); + }, [checkUserSession]); + + if (currentUser.authorized === null) { + return ; + } return ( - - -
Header
-
- -
Welcome to your new react app. asdas sd
- - -
-
+ + +
{currentUser.authorized ? : }
+
+
); } export default connect(mapStateToProps, mapDispatchToProps)(App); diff --git a/src/assets/ImEX Logo.png b/src/assets/ImEX Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..737ab8baf7df2347e756c2de2f9b0c255972c57d GIT binary patch literal 24647 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 Z)KP2bd1QbVIP(w)eH|0+eDrm~{{VeLS)~8~ literal 0 HcmV?d00001 diff --git a/src/assets/logo1024.png b/src/assets/logo1024.png new file mode 100644 index 0000000000000000000000000000000000000000..29354e759080e9d3a1c27d3f0f600d9040f6fc1a GIT binary patch literal 87519 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 ^%jm$SY4^<1S-NrZu0!BZY@uP)8exih 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
Le9fugmyr?%$lbQ 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 NDjO&3VoT51{|Dji2l4;_ literal 0 HcmV?d00001 diff --git a/src/assets/logo192.png b/src/assets/logo192.png index fa313abf53936aefc517dbd583b724a57199d415..d14882bea4c37d980bf9996b681c76d2ac0ce5c7 100644 GIT binary patch literal 8881 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 HMMnM)Q(q^t literal 8581 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�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 f>uyPRUtq)OXk=zu=4x6 zv_Cp{T{S5wX&^=6yqB4Y$q_RHmOF(EBSEywf~LP!dVXaQ5D<8_izt|yn!5JdXJ|ws z$2oWu1%Ds?sfgSBn)SnmELU;mw}}?l-@Q3A!3(rMEx5$pzD<6x(EDPtAS=9FMn-1G z#GrF5j1m4;Z~W__neK*)>(^)c7_1^63&>W+8+%V7@Nmkx^_i$SEx zbiXUyq%61}$*hcx6WPi0eQxt&DM9#f&pru>qkrfrl;zHq&zhrM)uZ7j3(T^f<>W|A zwCQgAdicq#?)u+CBeuh@cC;4ik0~~gCl>Df@gob{oE}Yo7>gYpslRd6 zs+Bm=>A16LJ1#x;c75b$8^!OxSKqol*Y)&RQ`O~uR+fN}klME)t1}9GxHdB{uVR00 z^Vho(XK`3`jKPi+^s=zGmurjewJ04RE3=C?j$XZId%u28RGYCB1z>efD-B;@N zIc@E0fmz*!zv{sozf*LcGUNX(uLsMkKAdUWqI6~){<)Upm>R{xXM(M^$Tecl5^L6j zU5SV+8|yq(>^NK-c+h^Wzq!Mtu_oXrY=pBo_@rK=Ws}(G25#$b^?d0PL;Xt6$)3(L z@8t_m@sn|jeDM87u{*w_4ck&UZpxjdW){Wcny81;rn_~qmKfL?vSj@nt|%|>U0K&g z&X`%!V1@fh?D`#UnO#{s+v}rKZ4?}t1y&j3P@B-k-KTRmBH2E-IhepiHBkPF`A~w9 zKU;ZQY}q|@iME(ZH`p?9p9FbpB2F=n#Xa*#V14aeY3q+SSMwd)llEIhb`q~mTZVUB zCjSBpB^l<_12)IU!*B~9(d)F?0wqW zk@~&*Kt1A?hNoxYWy%tB(}#_yKVd!fC9{*4msgOt1YApH%#CW)k#X2+Q=Lejh-;oQ zj)ikU{LHJ**IlQ#Exn*FZ@sm?u&(t`ET~BWJ1C8R5pAgd?;0}+dGb$JoPASP>0?Sw z+~Uu+lbR@Rb@^S95wL=GMA?`k=c(`?QK`~SUos9i?;QE}dC9(7NGL}ML_L*_0KSJZ zW{(=ARqFmTWhZ(IWo2dB-_+o5a9MJL#`07rAGQCVp^lyAX&OzIvt?!J`jV-2%Z4Nq zD^MYxDxK{uHAei;SoY+ctMmvsVL)-ls(P`F60#bCo(cJ`{e4fn%jGn%DsqxpNb#5=HTGa^$f0u6net(SSqsj z-y)oQk4Q^T_H<%*yzT5dn5e;%30gS!_jiTdJ-N$*7cYi)>@+#T79i@uSv&uQ!fZX# zRJf&;)j=P+5!_A~6B^9z5Z7@2$&@&Ws7s>_VVo5E$W&=PBkq5Z7#|DQAG6b8|L11N zVGJ&4{)e)>Fel{(yJ{W!Lhv~K_!OhFID%j_1J71^Eau++Xma_L#`7y5-TY33_|a^}yPp8z!$GZ5rLPo>^YKRAePx&T zcHc4Lh7dal=)BF1y>5{aif>mQkXQ`=t)u}fLGB}bOh|B+*3x^%EPIZbY!(W+SI-Gz zLHmafi3)1)l+h4A&wj_~@iRdLFwC`iarQh97bP`-d~2+;f>lW4)TU0zVk=)%mW%y= z(UWvF(lorMr$?N;%x#n)dT{%~+oex(&5G%KSb>>jUlh_#MxJ^sj^=t-9-0e7ZG`4?viG>y6>=(u46XOgh}pYazz zB<_8rf%`s9BH|cl*l;ofTqPkX`PaSkiDBTX zDg%coEA4ZPQZoUo%8t`s-l1+S+{(SkAns;~arM6S&%77J<;mx&eKU(D9L>!+=hS-_ zQXxpM+~jD}gXcLv0|kyG%*Bv)dpA{)c1ZY}o&!Zz1%#XH^8(>q3qRg`?d=e2r$!{C9wexk>J1)3 z(h#UExVvAydX?h)qsEy`U+>b!ZWTmT+F%xa61HZ4GX1}Ozls0I;jh&a!%o9lHt$G4gu^=>vm>QEdK5k3huZUSQQGW@uzzW1 zX1s`&&8F%h_b?bz8`Ag)K0kJqit_IFO#nx?7kA5e@_;Fdm> zNR@{`XG^Bgo`z1uxoH$iuTy()9h6ntc~7pUtGLE0VgpN6UEZ^vY(u%G;j0%9G9gTA zIgs>kPJc?4i*}6kUUI1z%xmztk%bkeu5hKgE83McrZ^J%mAR#8H7*O*#{)uRM0CD1 zR^6)?-;#xLc^@B8>$`e6WP58_Sa$E0-5Fj>WJiQ{#2le_U-m4rU##WYYj;fzYNYxFiH6v>Hxk&3BcauVB zu>jZFV~uTC#@<-U+p*!`$aeD-I(o_Mrew1(mdlg)=IQJ0FOR-|+S#7ovGk)GU}f}h zc`u`9{{!rOVaQcIyluDl2%Etrw`1h3EZP7`jAEi^`;dmJ-3DFRmAzX~QgU-wJS ztu4$Bvh-u+sZl~=RMJk^RTrPSx7n~tRxizMrd^D<#U)=yLg_R%tM=!|n`Qd@ifXC^ z?3d-3F*7mshho&hjrT2DJ3`5^L@RFp+9%tpY^F#DVMRbUv}VQq?0aQSuxxy3kGQTb zm2ieYY!kx?w^JEBQYmvGv*R73ujU-zkZrx`k^&m<9N#M5$sNHo${!bd?n8?(^Le{o zO8cYPCMG79dcJ-YI#YV#{JOVe=psFvsJ7jVV~JG(`|sbsEz&i7NEbX4A3Vr$7>ey> z;&__rXJkGau5nU=E9lP&xPejXT6t|+l|gOej{=0$#e;TIoAMC(rWU(A^px*jXyky|hm(^IVDL3io6scAk`uwS7{i4v0< z!l+&TRVm&6yoL#5An*S zP4G-n&W`d#ot1*MiZ+$}(`3=FuXxXhINRp>0<@opOX=LVD|lCDxQ(J5Q)F@DyQ_%8 zzI4F@p*vpt1E)odm`$Je$kd7Y(2?2KdyA~pLRLJgiLdqWrR}Mz?n!PZcvAb4A@*5( zeP;Sl)93rU;q`eZ;)tH88q&xLiM;*OClz_>Y=0@=*>5Gsp*foVa9^@!xj!P1Cpiw+ zXP$#zFf_ktCNxZKFxWq)5=2e5NJF$N7EQGRO_*}YlQZz{hf6SpE&abITH`(qzm@%g zAFTY%7|uI#T9*48xUwV_b?3%fN;t8rqSn1AZD!AAWU=6q8ESC?;UfG39S( zE>OgHaowpzu2`kAq{3gXGmosY<|^EM-ZORJC*na@N%M?r+>N>DZdyKY;#EWR7@V8L zI`cQ;%ov!c@!dR>Z5_g?m+u+gLsfV8-#kL)C5R*(k@ars*0wOD9E_d~X~iFmP}b3>Ey4A#=Bm z^V?ZovVD(waXF@EGb}*^Rq`7zttZr=P;V)r%AVM5ug8rT=%JBHk49W1_6w|n%_41<5xf}W&r2wC{@Udv6YU1QI^ z2fOW+EDibUyFa)1EWd1p7W`X}MGeW8V5`0UH?2Bo;liUn1@VSU48&=C?yR$13B0&yXL6SimvvS(ZPXkMmCU2H`_^F4 zW!5Cdhhi=(R@>gz!8ry;diu{<^Dsylb_xH$I5dRX51Q=%1kHC+R>05q0=jg~dSeKi zp1&ku5M|D{Bu+m>6@|YKmgwvJDsI>n2t|TXR8&-~lMThyg@qt@nimPODlH7a2*>uI({`I;$+Lackk-w=H{Y}N)uC_ zx!wvBC#ya)%hIj%8`UlNNoP-zF>!Tv3gvb;MKqBd-s&c%1$KaqqLa+v; z8hipgJDZuw91KP}_9Fzyn}XlHHHP^-+@5Di_Hi`nekX~Xb%mI1{{*+YlhTQK2`}7c zqIV)ysVwZ)fy!r=NlHRPPQux2xG$H&=xUgqntqcPf3hX~4$zC^J-FM6m*+9OyEb&D z}llg6)6DK~yESn-IK-rj`DPF6`D&3TBa zU{mCfKOP`msnzBilbz?b%jQb&KKjU^xV4;#8(+NW%8s8{IMvG26d9r6<*3=~DGY#R z*g)N}*UU~?h=nO)i9vI~sYLh}kHRMM1f;Rvo1nECPQ)*1e^M#3sykMX|9^aov`-YM zVJ81haZHkS8l zas>z1%D}Y>=H*)y*qv4}Rk&XHe`643b(79+pes*bbNd~>r+}GvBSWI-=Sfr zH37NhI>#Ae#yEng-!WJJC$NxA8UbE20bqFoB!Ou>z5vS%uy{N zF0S3o%*;<*f_&1{G&v;To;9|EQl(# zTywe5W{)s7>-CQ>L<3dP%50rPAkd9VBl`(ddO>7V=7_TL;&DKU(7En2CdFbH-1oA8 z-I_MZ5o4Xpw|Aj$oD{Oe^f|M|m6$CvMD zL2Ee_QVU13DUyJ`c=6(HK!u{D8)Nj*V|8j%T08Oa@gKUn%!g%|o3hmX7pD~KX(*V` zZ6@>^6fH618j9riSo6TPaUa{uy5a)|D;+zgC?_ZPsgRt`MG07>bx~Cl98Fn%dnH&6 zxU)GDs)44;_TJ!z16o6{BC8ej!QTUdo>UKped{7krIB|B4yh zw!y5?KYU#Ni#FeQ>#DeT-~0FEm2l2)Hj&_f3tSv+|m5U8(aIJRNa1=S-ZlNTOeo? zaF!WwhS&W;S^Ds5>CZ`yHRiG84*&=WipKHikD}S|ew-rQ+*f}=Z`*BD6i#XT7*$+T zV@JN@GU*rp>|^ISu3j0b4Bs#`V7@I2pG#W}TC4x^XmuHx^>O5%x!HyJ(D*!7N=nMI z4owdEqy})*ibxj{ob{*Nniy@wj=Q-w_cVNab3ZOSrx84z>!FzIAYgV=Gu;}wrIsSH#a9G8(VzI!kW>F=*!>a zRlc`koU_+qM@4elF*vsSGgBgoGkj!PdGg@FgAZ;Msa|vj?@@aqBhs8QnfGGmIP z$C0&R7)Lwxy?7so zH3Mz0P4%FDIdiO{a!eZETCL5lw5e+lo9(WLb`k-Pm62)lpY$^#wYBa5vq3SQxT^TW z)?AK?X%ge)VaQ?bim7IL@M|6sWh|2hw=yzC3Yd=admQvYN}4R29ABKRO47pd;CzB@ ziq=};Oa9^#tiKq>0F!+R`1M$AQ6tX1+)W=ah8%Fo{cBbCPRYnXElVts1oL}VHCV+WW+Z-Lt_|Z;--v@4B1?c ztEW%j+x>bkx|32-UOu4lH9_HyyYs`WPhL3bzhYcTYWp&LpWw$h3YTvy`Dfp)RVz7~ zRTPhQ;>|NXdX!-K!IkDoBwsqNA*Tz>x9{CM4d<{0-Xxl5xgG2)eGE`L3G&UQk22f8 zt^|u7e3&)2e%YdQpU|EsvQIe;Ht9tEwMb69mmdB4b!o!xYL$@#%XL-9k z4Lc$*m?vr26_$7$+QP14|v_RAlZ6?B}IT-c7UqHS*R==V?eJ?9(r*4Uo~cIQ1%rmxJR;zf7S z#ia-koR8;TdpFG^+}Wr^W95zUlB>`A%SS&Q|t7 zdZF@YFFXi+7-J|im$UeL)TTc^(K|NVC8!b9A^%)%6@qhoK7k0`Vh@l?g}|iFhkijt zorP@AL6(qc)>A`mLdPB~+=x0V@e`c1s>$|GE|8B}T3U5ayCdYuF2@7~g5ShRh6PNO z-aWfG#W6iDRVDj6kXC{!xG`{Sgpy{RdKVwrbZxI)hj! z33bq}Om9Y6`>0OHO5w%B-tS`f$OZR}9h3;^vnu`Aua74Afo?)gRkh+tcSMO%@}Bjw zF)1uI3q&{bOWbVMy%=D8I?p-8J(=M(iYhpH`{?3R`UYlA)YH8NRYTTKS28&YN816M zf#zenqEoj;tFWmj|73Dqhyakl`L~N^dy8Dig?-O$zd{c*B9#+05**eLO~q>kJ2j2k zf`%r#H4Cd(-ilRGvE;%$C11{!CdU=>9(@z%)om5vd~NpB9m@?1N*f4(B5Y09(eTonUAiOXV%pK>^fSAW#Db+0V-Hba=tY+#7&F?OUl>5(kfScIKaN zK~lX~sf_FOT;nVC?ej+$?|CV?e&TVJ(u;-)RZ1i=h?&3X`e%^eOh}KJirt(Rl^G}~ z>du%+dH9gqHR(vJD(+rZazx5@MMcHo>hG$h?>WY;iD3R(I*aEQdUHg#cXXDG7a6I9 z7MZb;KFgWjexq02Xa1<}$%0Jh)zX@gvH~od-)O^&c=y95b_V?XA|jbJuI;?k3A5^% zK=P5MABX`^tQ#aiUUO(wK&9n&`Dm%3&O^~OiXMrP!bOWq7cb_lKw3hVy(btmLx%gR z^BM@dUNF^PkZ2Yoz69;n*DDKuYXlwlFIRVWW1-=VbmfhJx#gIT2^tV+BG_plMm3X> zv9VmZT+WZ$z>@*28Nl+5&m-U1D?Pe%*1^v0cBJNy^N3?y&?Ex~haaz2R#pljtjvnm z1kT!6Nn@GTx*3bY#qFSJm?dR~0PL8ThHq{@YFN>FFTzL;rR~dPQ<3d-8R2=D_2b8n zD?g<{8xSNQjYvpf{zBqycQSG_noq@kPr6bI$4JZQ;u zb%0N@Ot{GLNYeOTqkQ4+rZIF^2}lo)N@GD@Vnwm1#reB7#g5;w_9Q-|YO|(aj2K4t zifpX{6Is{7yRRv&gECM&ZkC-VmTfOGEhpTrw>7AKc<9&a3vZV z#&agnjvYB{xgFnavO2V_F}gAI=Q;|56R#QT+`P3rN6Y=Bhez?}NKUCs7Qg2Uo zfZaSu0MP$L%d3> z(V6!h+)II#^2z>ytS0TJ+E@6TLf8dh|(phN6^EI1mJZVij4Y3clF83Z(DKcK1#{>WQ z6#^e%GRgP^ES0=RBBVvN^ut-Y@mca6l_p1YF8U3*ePpA8)(Enk+r9=HN@+S$pU2y} z7HkLLAtRo@gqi6Tci*&K@^!yDGqklD%HcMx^^_|{fnEhAe+=|QNj}3FdLFdE?g8pN zKd$cQx@$f8q;&>8J5pN{XZf9T|7CAvzQBQh;2EfsR3anF%X|q{C>7EH#i=*9)ld=8 zAxv@M%f=GWdoRV&3YtH=s1rb7H_HERZnTo>4a&ZIU7uf;P4jqpb0Y{3_EYH|G&ct6 ztUUN}kEqb``u3eWhgSer`KE5N`qN2lP#dSQ@$vI#!^MBB%dN11U+zQDf#v!g8m7FC zoZI_&1L{0uZhvCeX_1hjKSj|qZu-Z$dY=JZ^{J;J-o7hSE9jFI=57b!d$ph0!E>+U zM*)U)Orzg$L1%YRIK*@vu=4V!*7cs8T%YYXoB4Hbg2NBzGoT&-82V|VqUOe7_J?A~ z5B)dxU1zp=n!u7zmR@0C0l+i)-tI@rEEiEviLly`Z6%F5zWmL45-UsnUUpfcwAh*f zOwBIlcY2dB=birI zg~M$9$xWWA-u}#FGP6}i1`rUrJTBd66D6Bty61Zt6{WM4H6S6|{y^$vQhwOK>>3|! zFYIeDXo7e2=30T8$G=!?G;`^EF{|vqeg+u@_~d2F0i3u>yH`84syM3aNsyPt#RqqN`5<}W6&rE4 zI81KOXB>R`v`FJSX^N>pF%ZKvts1s@&9nPbHh@XrZ4a?fuRwlftKNJCghF0>SGGP{ zYM=mETG8PB)H^oCqY)gJEkea0v)i!7z`MpT1vFZn+3)i+OptQmI^&0C(Op*0PTddT z>EC_9^yT@w*W<5Tr>3OGG@slsd{6G#g|JY|4Pqf&w)5fuw)*fvZ?Ruru20cD;9%^6 zYi@HWv>Rh_hu)(!m*YIUy8NZIvQ_MuyWE$4eXI=KxKh-Xp>xy5V%rgTh80TbW{(NJ zG&EUrdaz=u8`^RHFW~I%v}(R_hX$}c_Dm8~_sYBd>4tj*SHnKmm8d-kpp1jo*e4qh z4Qb(%4oxfE6HLCnI42YMB#uwf(!n94%LK2;jD9tL{m7P17f52;+ke73 z>m}UlSNle!4<9~!d12)3(JhK=^`@bb(E%@<_v%-plcb>F69;4eE|!sF$S!ukNeO?$ zL=N1UxmE)8?=aNAPCnBc}aE#-@{ev{H2!RDaine$q5~wU=rS;w^lTzKEIJ;=A?V~or7ap?dwF6nO4fkQu zJd$V{eu*9zI@Q@uYcOfPzF3vUGbBWS(@X}$94cF^e8xA*Xxiygo-`!Pj-T9ZEOtU? z5=1AlE@Qx9LMD+OgE;cU*uc+jkj}-R1F25F}~@qw;${ z!S=p{2k*VzlN$}*NlK+<9ck)u%`K}7IGs$1KX*#Eq(Mr3(6{6% z{x0YWk+FY)Lk=apZy&m@OZ4!SNKqUmpvCycC;1OETzVBCUOx+3;j5{ipKU_PPBTb7 zLt1|os!60}zvVI?f2d*1@reZ;gc5J$Y}wm|6vuGS#}AyO`x4@?a`LbG%!B}M5PZ$~ zomR#`w8J~)Ux^*t#J0%j@s0?}3Q2{|^zL^y#mm47JxJwTcdoH7=tIXdu`E;&rO5|g z89Db+bq5@vZb=v|c(7@7jc9D1<=#9!*$?d}X9sCC{KWq5ZK3NkJ)K6%Y)3u!sG%&c zP4^fM2EIRCmGh$};Mm}AjjNNV$_Kq`6DG2sg7SLb%X8K90di_6o6v1Y%UWRW5#15> zYM+-q1%jW8J>T9-{%X|!E5>TOfdHN}wl~(EldEsq8q#wFjUEtI0yR^S@zRX?WjfKD zbIL6)?H#vaG{AOvqkec8`A@72L~c4o9C(<=6a={h-r2@&xRv4%~Y0eGdM$>QP$NyOcJMD<;cb8rIxVvbX#M=ZK4CYcyQa)4d9RDA$ z6CQmamO)E^Ot2^%N)DP;;OqXyGi8>EOrQD|Qv+^uY1V7|4ZD)T1Fu|JvW0%WY99>- zaDiF_v7-kMq|HpEfi|r7MsN_qf*zb0VY0Qte7=W#U!DFsb@@IGBUgvafRyb9=c7f~ zo-{;*<)Wz`sNlw5y?n-$=7}6x{X4X74$}h8G_K&EdpC0H@zVf+vELyA!9jWuF8#U7 zK(=w3E7WoA<0lAj;HGs!K*dFWq35K$5vv{y$O?m;yrkF-)bz- zeJ?ICLg6H76c2UsGBCTTD%~^|(0+P)I(mz;mwXlLKzaD!fvlwD&-+&aB|u0RX!u3f z%Re79pMoMk4}@ta&Wo_uxj2i@PQ(wCIiqRfqvmG4ZiZ|_*c|5jsklLIPVK+P4)vta z0XS^AhB7sJ<|!_P!T5K%n?{tu%&CEIi}@{SD|@E{6-flv__ zFrf{-Zyk0}l#(($&M&J%2Py;Y`xBizWhG;s_oos7gX*Nn@j*@-T3%~`trbHWx&LDg z*beL`)X%b{AwGu;Nm)CTf?k(~jY*-I!3r7ZUOPzxdyhqv);bPLxak|Qy!T$ZsszsR zvinX)-sa*120q-cjmxdn#Th97UW6p;p60RF`yjSopd>gg=+8VPrjB84Ls*Cx~fshzXxb+OyOCMRLh&m@xE}c31y5$X6 z+2yqlj9)+wdW+WejJ%f#1(eU}#c+vzMWI(;acx_9mL5zkSe`xmJ;C5w<`xj-h2H9adLZBDjoB^S ztvSTL;}Ro~-A~xXbWcHRe|ZHmb^F;mNj}93b7vQcwj=aPmlAf&8}-dxZrS_b6c!S3C=|4e1!zUka+n?LzT{*F`*pB!~PHb2i9xWxvbi24JC z244FJv56e9o;lGBtP5yi5sC;cjA^12>q!I%62gs|1LNbH?At{}MN**un>b3*Idc{j zyf_>*+IJ9;@`neh_rj>O;(n~t^SPs}g)Sd7Cx`95>z%n_s32Z~m341zVEN-sj`Hp& z#OI}$GOVuo)W%entuWg4P{@ib5Fs5TE+9=qk`ogXugD!Ww)a#9I_OM=d*?R?hlY^V z;_|*ukD{j%@)DGp=cPbl--3>RlCi2#HJuWg5C#sq)AY)a)PGc~Dvl$!V8}XuPx5s} z|L=0I0pXbmdzlVX1PwdXo3#Ny8R`%((U#|nKn(rWXb z)!F{2ELP|`0M$gqIsb`8K5zFEsZxPYf<|t{z(g0zu*B6D@)6X zRZ&s_cKZZbY)UE`9Ks4rDpHL56f_%}=e!8SjMl287vWKDdm(_6vFxUepMSQh`FkAt z8*=h3GrvxV+K3MuuY$wz9da8sGGWRmVtTsxJ?=NFm~OomS8D)T$<8dhO_h?7A^a2v zAx-!kQ&X0P14Yhw^C$#OCToMphzwELbP1tT^)TdNi8`vitLtY`!IOzmT_HhU-fyZJ z8aB)37e4Vtxa>+0!va+;GO+gQO0gL91blrt1rxN?$8<{c1edUfl?~kiT<5E|FK$23 zv9m98iXfRFQ!GE~Z&)p_-??)~*r->l5}Jk=LK@zMH?lp@jbHF{o~*s&vc@9?_FS|; z+e84aV)ok$54vlBYTus|xlYx>QR^ocF83BTIqS0>6@sC{;|m4_r!#xDs^|&?KR!b- zuxKwY^gU0pl5}N}GTD)#?L45}{2xs5C11Uj_7;Eqc`zcR63CkCvbjNBFV0o7?mUG& zgW0;7^D$fhmaMAk*Xe$NEZx(?3{hY2<`VyHjG!<8XSu|l#uI(Ae{Y>Vt(a+>bVEqk zUs^%o^c^mZiKbhOwZ;a<##r97FbYx<#L2Q1pSZ}#q)~Zfu+wH#ruK|UmE^IaynO?u zyAkonvIqAT50&leZnZr7X7b65oS1g7k}mfF9$wy_Osy}x?a9hD)desKX#Qtoc}nq* zNN?f&`AEHSkjbvJD-w^tz3miH?GL%<$8=xAt4Yz%+uP@hEwM>6-rLhkzN*v*|T0)e0kfuvVEK6%!t%(SdS zx7EpIrnjhgoP6hcKwp8MgwDv1S!X`TeKHmb#WnSdw?Z%?(K;T_zn`J#d@Xf+UxXfcKENvN9_c~UBfk9Oc*Fo%o zq(U2}dinVMjhLvYZs?Q?gBC`DtJQ;lC)@scQ9ZI- z_sP{g@sm3n8yghttjHEd_gw9@qRFOEmF_c0v@HT5KWPstn_b2!42Zka#9JUJ=VXHZ zJ)@6WKkE2yP{D3vcp=;vx3e`G<){<0c&CJ?#No{Y)mvs-g7|oV(@J|PFu{MT`U?Tz zZ#IkcVFIl)YXTx7eLCZKR@hqV*MIX56alU#v8_HV%ya~2sgp~0HWl;dKasFI%UBa( zqNrHd3RkA~jVmn4ttdH~up=)1N+jsN!-`~DT=3BLT@=o40ZQYH`hTl&aW%o9)0W3r zV?;1c9heI!h}?_XNC&pT_`QRFEd6dzxauT+#v8fqF$I$Zb&=~Um$}5mO3#+8j4dzz zTp=(MM85r-DIx_K(Bq(u3@%k4OC=VLb)t;-$Nk7&Rv?6Jt!=k1?%3YT@=SX0;EEfB znZA|NqLG;{5RUu%bzj8w*?;R{WwFwMgNIM*Ov=;T;Z_6uF08~u@+e7vC z_AZ&c6Kqceh%DCgmaL(nVeC?7b}kT8~4x?xv+-&c~>*<*oiFhX4pqDVV#g9L%wQ}nCHp& zf5R~MCIv)rwFQ^5CilqM9M`c2=1!T1LF3&an3&SC&e#BXBRenUqrw)9%NltW8;oUQ zAh)NP7+`I*9aJM4ptBzY8yl9ClngZMJjnrdcw)#ziRGm&=XiAGAYg?m{Y4!eO&Xhj z{J5;o+L=T}@xu^NeT*eVD0+8POjp@doX6#twPP@o{VwI+@V5VY?4dFLfbGDMae#?EK>5;?&`2bB?uuM_lxl_Sa!TDy&i% z{f7B5bw*^@3l>utQN5bPLTx@K>l(3{NgJ`bF`b|C2a31EkoZ%J?xj0`Q@&JCPd{Mqr{#Ww_#Uo)}4IgzoZ}abuHxB`Ph_BX1D^OLM zbXgb5xJ6#LU%F%t6{}sm=BX7*jwC*|at=698(&}Fu<);|>h)KBK&=a4fb2#o!Hr{SFhS%eYF8n zLd%;=pVg34Ux8GZ5<7CO@HB9EfgHVQ=VzO!NC|VHZRwMb1$<=EE|zrVGj3lJ{WnQf zY1X0nNxrnGU88rS*zrZo2-T}e*L&#}00INQj5P*8wRrV4?xH5jox-g%)z1Np_t zF!}43femfIMo+a_PlIKGkHI-xN7hyz$lH~eEep)e^-pvE!*~= z6B9kRKlIME?lHc>%WxeuURt!+_($|Zdtc5=L-s?4F#i)q8*MD3%iDZ&FVz~$OS!{~ z`{n=~o{#!D%Ewj){F@MPg#yD4!a!}Jd%ubvzeoHdd(OxR1W~=sM0HxqP3R-gxYLTQ z`2vV)>J9=Z>%8z7b`kce$w>`mlTB4s7(4Car_HFoq-)BWeLOg&C^&u6)oTaF>HG5Y z^M5*omCt)2k3WEkPSP~N8eVjd4xTeob?ZnxayT;LJ#A7-i3Nju>0(5Zv7!u)mjat7 zbYrn!q_aPh4Ou>pZ^(5;rl=fXYqx=UtLVJyBnGDANqTS zHr^|`bi8-3;Z@PJ)-|W}1{a@p?vsQ;vXdI_8syyfqB{qoJ`K-2g_wk&99^Uc`X^6d7>> zlu`Be4ke}9E+^l?z=}y`Mmiqc_bb$;=R?yXSc0BzDF za&c5|77cG)-2{2kHfiKCsSQiD2pP<>tuS<_&IJIFRQ~xuQag~4llBQR$#TUvL-cE~Z%nn%8M`z-j>Wqoe& z7?}R>oL6y{eZ4YW;cfreF_`a6-h&bVc;nd|yB$UQ61X6nz9N`g&U9_F=VS$n`Ip8KB%BDzXHD| zkaIIzz*(G;@s$z@lJ)$}_b3JkJY-FP0`K*~NXN$X*MiQe26M{C7(wI#Aez6u>?_3C zIVWht6jj}O7^w62Cb;p?JB*?U*nVY6vWwpy3%Hvp+%1_)&oDA7B17VXAD)$yK`>W} zHAAD(sC^_pyQkUmK)o-tR$&Wo(45|oWb{b|38~sRpnLpSsJ$eJi7h2DzfJwun3u4RIc{)9S zOz6hyXa+(j)z>NC@B=(#Kf!}8o_6XDjI>37%j-#1ZAhDO=XKnTDt7ja6=$J4Y{*%M zu2eq7b*Zhf7AASe_J3NSJb%sy1V}vK1~2nlNBQXCej#W**ZqXypFe+g?m)V$Wh|%9 zEtG8mk{YT>L+)%ej)dL##a#fJi^pF~^)AWw-DS0CcnrTdvsZ#VRO!jRx-crXKw!{b zcC7Tc-|KQoBFvto>Cu&a=Ec1pKk1;l6kDkOtLcGAkqTno_*P4Z-` zmMl0DE(Wj9FIVx>jgR3+ZH@+Nal!G~#lW;HRGOcTa~E>YL2RHnW6Zgn+w`8CkK0ty z^7o)SWXf5n8ccF>mC9CWzpk6@SvvBxD+C6p8Z)6XD#kjjl{!#bT3YtY$S}4#GD1zt z3-SQIgVcse7#ks~(-J1sgs;ZnHxz0am#(NsM$F3q+M23r^UQ(&HkdByww*`Mo~Azw`0?d)sIGeBST(>v|s32Km8@NMmE;uK=SwRLH=> z$+AeHD%OTM>rJVcsSqF0kYG`ugC9po&I5S$I z(Dh)R`P(XnGd$hh$30fWp7xcF&@{}TOlfsiYSfE!PGPOqI^_|haxQ8SP&$Mfu-Bk5 z{xd24OT#0USie@>LjHq8q-i!mAEDJnHF7*}Hr4PNTKIB9j*vj_{_jZ{$8cnOkk^#r zz9bzq2@Q76W>{ZRTn{}7B(jF}Ue6-9QU+-^(M@4cSZjF=FYNyzH2)W5vaq#a0h1A$ z#m5gRB%JJp98@uUP*1=1DoF@1m^1)KJNW*fZU-=|WBh^hw>u~WT@+9o<-K~*F-vhG z@Py2uhj0NsoV#77Bt&7C^1Q;3@6bf83N#1sw4%6%0aJ z@vZ-bmE9t7+9nN6cd#K-Q&Ys%O$KH%p^^ro_x_6|5F)nk^+6k?WyT$MkWw&{{{iox>DLP zz@TyW^u4czpFz6`)ic)&W+_GaD}h8(TKcxHJ@yqZ71(n>n+Gp(yDoM|&MDF_@-oX4 zfn}oVGukoP3SjLO5tm{X^x04W*z$-fXEp*~JetI;+tNKxdtT~iEFik?E@8qL8uof$ zl+gXTw$=dHGQ8B>Du(Sj!!T0zzSXk2qm`7cT**P`Rf?06l2CL?7`B%!GuQQVszu=Z zl&i9-j5@t5H8s^Ej<Y`v?^@?0mQph`taiPh6aJG=zA^A=61wsVtTNIE)K z)@W$HA2V6pSiT!lagKeHvHXn#Fv@-m#4=oX^C7W-*D7lq)zeNC5LY7~!fiNzqSF@k z+&)6m;`|VyCY5n#vuz?;#id_ayG=<*E^@-jKq3u+U!_a|C9sX^kfgzR9Z-n>OCPU2wUyvXRgkEwJQc<=jv|NMr=8jzA)BP{A2;px5uHM?3T|4$ZI1J z3SLqld)&a|tF;y=(OIc@U9S!(q<65O*N%#&m3;#%0=5!3r5%SMm-SKul&K4-1=9=~ za`t=*sTJ{Ebt!NhW1i!QY*K`a0XHizNj{Km(2SG0E{fASu1*ij@1v@LyiFA5Cfn!j zS*T#sT_~PYBSn=^A#Jwi$ny%*v?|o;0qL8HW(HZKoq3WH63_6sAU&v7xIBjn^y_EiJ%Mra-4yk!mFX=Nt#3INPAWo6P9 z#BkJGF($L9HZ(^^A4fe+#!~L3RWMOrMJJ{S=K&Q480buBgA@iVo5T_TrgsMH-8d+v z3i^|aIXnc5C7432Z>X<7cRE#oH81J=N|U0@i~;`a=0nF^p9|+S=k8FqlaU$f1 z!x%1oL0Ltm|3(vY1Z_+}h%y*NZ2Bzo9E1`0?{MBlVCg1u%SMkuD9QwN#`W_IxUCb= z)`i&M?3pT9Pabv{4uD9Z!?-^i4MpGIzWeY4utE6+xxiJ6u!6IazJLP0hb5^XB#9aD zGcYg+@bVf}f0jz>1?o)F;txrKcM~EYjV~sObKX?S3pP9$Ne_o+669eQM4QS$!U4Nu_o`zTw zjQ2oJs-{4VdmY>WUqgZX+FuhC7Z?x`TM*cn2SY!L z;f^;0z6upgKy*x(orr@JgrDVm?*@tYYofZ^cG&GwPV9HNz$;Y3<)4{RZ1%{?6Th?|Kp;4x4i z=c@ZVHdlk^91Ns)@p=U5Gkl4`VzfozFFb*r`vCOOz@GV~F)&7DF){hJaJ1t=vLIaH zW&jT)ZM*Yeezxw})`QKsB!MPKXk;9W0alv_a->1bvoS#d=;21n6GnWHeL&KXgw~|M z6y^&5_bNV*;0Xn9)4q>`?$Dlr?M=+~`G@M9$WsG2 zzTHmGEuyFMnLC*>FiHZys1rHIC#oOTS(28tanucnFl|UwiZ9DP@7AaLa+_yALJJP} zQw}uRlkQN@&7iEEL}Snh&DAX}%z|swehQAYD@w8)W_(}EI8$MNNp;0M-?AMwWcaN{!{!p?HGhYO}PnBOTyw5JC|^wiO0`4S=%*SwltM0cvT!mAaiW5ro!Q z`pYn=GD|de>tys;!;x84&OlX(*S9hD_~+*xgocR^T$Czw?c_nPDgsd`apdR_X_lX-6d=pP!$MH%AnMe zhU2udy_rlLyzLDDxWDzHR=BoXuvGU;IAZcu4z;^h`8TQ~)=Jq9KW65Zv zu5Hk?!dRf9Nqq_|yiZYEP4wh;Y^yb5EbpNY zyX&7SJ863KTLht#P#O{&*^Z=+>^v2s;M7*i)Bu|Bz-%h>y9e4gEF+3YpYcw^2Z=nc^>k1? zX5YhRIh3xeX>U>nMV3COFRy^*V@@U1mBud_%dk!)D;pdPAcbziUQ*gDR08V4I0Sg! z!#7sa>EWdVSB&5=X@GQA1k6~_;ximli;P;=Ykjf=MaTwMx)N{bB&)UB2)C*Y{QIsP z1l!jef4*()QEiyk>$H$RMBDxy=hc~8_51zL;tfsr`o1SO=_O0ri)_aH{b(|gZo}yu zgcea2T0}ig?ehhoE4e53oUcwSlgEf9QK6s#y`~P3kk7c)KOtryn6!Ia#%l!Yn93jgBXE)H1MZj6_`#)*x7O_cx zSO6QXlH{P)7Pc=cN62*2duCi8`t?Dm-Jy0RX>d0}-VK8c*f8yw>vE^*%}EYW z1V9XmfZ4$MEr-NHVEPK1`n`+n4Q_;HHwBN?`C)xWb6P|&IcPe}L)vC3)u}vt^u0Gw z)!zbDFxhz{TW|}J2frT1BPUbegFVX4AUQoBD|!e`?|23C=;DT^n47+8O5$EVCY)Q?(ObCzLmJ0n1}L~2oD`&B5V`Hx**woZ>;%Y*&w;1TyLjc>0W+ER zSC_Htrca99{B~0%NfQdte9;m8Y2C3sbHi02eLCgoWlWqfnFR;d z1=9^IsMH=pzuk>vIw0M<@#WeSweQWis5Q$f$#pxdmvXJDv|B99@B@pH-vi;1HMjW?{LHd1JgMas z;D1`|INDS!HC%L^c5&#{V{!8^pwzoIL8$up@!Hs~1-*glh;(pxWj*XkUbRmxSsP6oW zlVC+q=H9qLk}3xvLOwgMHo{}l(#&k&XnC|6H%RyxLJwYmCES@1AKyLrrh3EI8|5Vl zHJ|TlGF6!|xy9<~1OH!f+2{ZF?*XMY4Mjz)7JAw0I*Po-?4Ry}@pSy0Kme?*$V0ef z4GFwEoD~l-LF^#u^iXI*fM{eUk%YsSI{cClWyT@tM@Z2WdGMIq?mVSlqS#g5#aJ}2mKtb9W2It);MdVQ#8Ch9Dr=->8 zQ3|1uo?~@9A8S5Fy<^CzAIhB^d(jAti=yGmTy3V=Oe_J6wz~O@Z?WImKY&UYAQh;r zeHuStp~N%~q|3sG%$i}%id2-96F*$}^Z2hJtF#gVSagw9i8%8R+Ft;V5!&_iK8^pU z73LO-vy|9})uFZAKiPf@`pUCFdxDY)kfx3i=~OZf4@VAI49`HCXnKkW(+&Y`C(89n z5s~ENMuQ1=J}r6~%sd5mi~un`WDP<(J zaQkbw_bHTmOC8z99*A8|=(a#xD(5dKEu2=2+C;$@)(im#7?x{>WI!i&vUnL2emyI6 z-yc6q8M_ao-h#;=w7kFeI!EjkfJy2PS869jH2DjvG8jbh|E_BM)u^$Pa^XS%rXKk# z9$VAA2WaawoNZS>Wp;4NEgv!BFN2G87bC+*9c>C>JZPzVU zYc1n>@1!ognUwHe#Eo3o_~hNcpSPUA8DL*E^bfZoG(^CX;EfP+ND7FzeEu{gSE|F= z1i1guIk6D%Y6#{No+`3`;PFx(h|4EyT*H=8A7W_P?!kwb)$fu-G4OkSqU~Bqs0!sv z%=Vd1cZSI+JDBcV(^^@5v}e7-lM?ZRZ@Z38v^zJlWO9K9b|Xj)0m{bBnB3lJIqOgI%*@UU=3aBJbIl z=~*Cu=dH+Zsb4<5V8QJV%H~2Dp>4S z%{V*SF$vlc+;C7uj&MENjYlwJw;y8jJf=(bz zfC0?9z@XQsioYF^xbUNb_tl3yEIqe)Ux#ES3qgdi=zj#HGfZxryXx^ zFCe|NI7T%$H_rjp=lD#UoDB3n`)?={I^7C}jJwSK0ilYAT{gKXXwQz8y@X?>Y(T@+ zIyADkp-LC7`E&+33Z`!T4e|)<>u&Bx3CjR~DB>!!b+itVj~t0w0%X2-@$oF2I4P9F3(NmC&g!h%!PT6$GKUGF6A-u?Y4$ahDd9F^9pa{Sdmg$|k{Q&<`T>=a&z znjjv2!tKv=Ec>to;tZ)9(foYJ<7myLm7{act^>4pYaTC&7>d~=z`r!0la$e}cV@F)rP`am@AdU~|CL(M=`{zF zg`^K|Ms{1-n@^OMCjvEk9DS?*nzGsBgVbhS&u>Ea zgTT#`SIj(62<4>AxL>M^Qiu1(&u3S)Z$JoEV&8B9AU$Ytd=E3Gf-o!RQEtZ++Bw{p_49a(#vwKg&r?q z5QDHZHv>RN@#sO_Hg7uo^?IbhTu0oxlb54aWQ zTQkI9LMs8*;kVG`3qYKllI$5YNG~a?cy2-%20wh%z#UaXAOh&+v@s>(v>pueY`J5s z#~NSQLj-}4Al9C=s zKW}=8>7X|H-tFqtmoJO)LvL;|r|(t5xn14eJ^upgw~HWG51Fe( z+Jc*L;;b}K>Z%3!j1tC}4Bu|XW-2mq=e>OsG@fq-5p2k+;Myak#Ld(=4nhtLjpvQs z!k=oR?tb9{aYRS^Eou}|+IU5e(>%zJOqqS(QZuN;yrD;nq)kkMoU?HrOMZF>KIFpF zKe;mke=F4TP+;I-5~q_p}&zG?M6oAx3LV((zY)d>#no ze7qVd{~Q?qy@tCDn_!XT2*A`DV6N#&BC2!s4h34ke+m#mt~Rk3Zm4C;aF2N$M_X6- zZb2g|J;Iff<;Bn_b!VqcOsxx^Z=C{4C|9^hZ1R7eKuO}`0UkDCb9mM1cI7{F@Ygif z!hGWJ{*a(+cauyQvL%R(hP*~mOJYeR7 zkgY<~@!~=Ol`i#;s$(l(F8}c`u2jh{H8@CRh27gfriJS2RN>3bQjIlbJjB_aXU>Ru z_ig5$gg_ObyqYgA0e8gK_O>4ST6fWvSJxIZ;guT$S@gulfJ7qfB+R{!D%uG!a zxLht%dKm&XoL%I={cCs8A;PL{5|rFuz&i1poQp-N@|u&929eek=T!)y^>lcmGLlqu z5qRL1n@%)-^DC^UD_zHyb)26XxT#t=#gBySJF_XehzmGCCT~Nkb5ge|Ik%M(Z!+0l zIOUFN6z-Wu)(#4vIE;Js^5s;~`W(O6vty0lTU(WSxgcox{%>?BUIf7_Ud$szQdn@A z>8a2p2pj2ae_zA*@ci*QD=$$F9SYCR!$MH-fGDk|)DQkNXem#EJMw zN>Xh!>F^S;oQW5SImN}@|0pbQWyqAGqI*S6f**?tzfL^>hv9^vAk0{Q8T@4e>HMMu z`aI*{QFnH}I2GgkCgy8*_vUR4!otE`%SL8qVdp28bw~8&5F|}PNPCyS1!IAKv$L)} zAk#M!fW*Plf^8xD=-KQgd9e}zB=rmaP5m@OX&qhNz=%?;l1FIkF9Zj*EBz?V%Gx$Y zANzp%NBhYFF9Eg9`b!cOX*A2b7f`DPweug9g!7^YX7R@sEDez!YCL5f`AQkwYoxafiX4^ENIhQ7)s8 ziT1R=sHiADI5^l|@SLZor-daC{I|-_OuIMzuk~?yRm%X6{q?_}(}+QuY)9RAlI|(Wl_=b zG#m9X#(sDA^y41_=69IBcpVT9%-rga2NWjL8&b=<$SZzN(L;bD)$b|lU ({ + signOutStart: () => dispatch(signOutStart()), +}); + +export function SiderSignOut({ signOutStart, ...restProps }) { + return ( + signOutStart()}> + Sign Out + + ); +} +export default connect(null, mapDispatchToProps)(SiderSignOut); diff --git a/src/components/organisms/sider-menu/sider-menu.organism.jsx b/src/components/organisms/sider-menu/sider-menu.organism.jsx new file mode 100644 index 0000000..9380fc4 --- /dev/null +++ b/src/components/organisms/sider-menu/sider-menu.organism.jsx @@ -0,0 +1,37 @@ +import { + DesktopOutlined, + FileOutlined, + PieChartOutlined, + TeamOutlined, + UserOutlined, +} from "@ant-design/icons"; +import { Menu } from "antd"; +import React from "react"; +import { Link } from "react-router-dom"; +import SiderSignOut from "../../molecules/sider-sign-out/sider-sign-out.molecule"; + +const { SubMenu } = Menu; + +export default function SiderMenuOrganism() { + return ( + + }> + Jobs + + }> + Jobs Not Working + + } title="User"> + Tom + Bill + Alex + + } title="Team"> + Team 1 + Team 2 + + } /> + + + ); +} diff --git a/src/components/pages/jobs/jobs.page.jsx b/src/components/pages/jobs/jobs.page.jsx new file mode 100644 index 0000000..a666751 --- /dev/null +++ b/src/components/pages/jobs/jobs.page.jsx @@ -0,0 +1,50 @@ +import { Button } from "antd"; +import React, { useEffect } from "react"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import ipcTypes from "../../../ipc.types"; + +const { ipcRenderer } = window.require("electron"); +//const settings = window.require("electron-settings"); + +const mapStateToProps = createStructuredSelector({}); +const mapDispatchToProps = (dispatch) => ({}); + +export function JobsPage() { + useEffect(() => { + ipcRenderer.on("test-success", (event, obj) => { + console.log("Test Success", obj); + }); + ipcRenderer.on(ipcTypes.default.filewatcher.startSuccess, (event, obj) => { + console.log(ipcTypes.default.filewatcher.startSuccess, obj); + }); + // Cleanup the listener events so that memory leaks are avoided. + return function cleanup() { + ipcRenderer.removeAllListeners( + "test-success", + ipcTypes.default.filewatcher.startSuccess + ); + }; + }, []); + + return ( +
+
Welcome to your new react app. asdas sd
+ + +
+ ); +} +export default connect(mapStateToProps, mapDispatchToProps)(JobsPage); diff --git a/src/components/pages/routes/routes.page.jsx b/src/components/pages/routes/routes.page.jsx new file mode 100644 index 0000000..62629e6 --- /dev/null +++ b/src/components/pages/routes/routes.page.jsx @@ -0,0 +1,28 @@ +import { Layout } from "antd"; +import React from "react"; +import { connect } from "react-redux"; +import { Route, Switch } from "react-router-dom"; +import { createStructuredSelector } from "reselect"; +import SiderMenuOrganism from "../../organisms/sider-menu/sider-menu.organism"; +import Jobs from "../jobs/jobs.page"; + +const mapStateToProps = createStructuredSelector({}); +const mapDispatchToProps = (dispatch) => ({}); + +export function RoutesPage() { + return ( + + + + + + + + + + + + + ); +} +export default connect(mapStateToProps, mapDispatchToProps)(RoutesPage); diff --git a/src/components/pages/sign-in/sign-in.page.jsx b/src/components/pages/sign-in/sign-in.page.jsx new file mode 100644 index 0000000..b8451d9 --- /dev/null +++ b/src/components/pages/sign-in/sign-in.page.jsx @@ -0,0 +1,59 @@ +import { LockOutlined, UserOutlined } from "@ant-design/icons"; +import { Alert, Button, Form, Input, Typography } from "antd"; +import React from "react"; +import { connect } from "react-redux"; +import { Link } from "react-router-dom"; +import { createStructuredSelector } from "reselect"; +import ImEXOnlineLogo from "../../../assets/logo192.png"; +import { emailSignInStart } from "../../../redux/user/user.actions"; +import { selectSignInError } from "../../../redux/user/user.selectors"; +import "./sign-in.page.styles.scss"; + +const mapStateToProps = createStructuredSelector({ + signInError: selectSignInError, +}); + +const mapDispatchToProps = (dispatch) => ({ + emailSignInStart: (email, password) => + dispatch(emailSignInStart({ email, password })), +}); + +export function SignInPage({ emailSignInStart, signInError }) { + const handleFinish = (values) => { + const { email, password } = values; + emailSignInStart(email, password); + }; + const [form] = Form.useForm(); + + return ( +
+
+ ImEX Online + ImEX RPS +
+
+ + } placeholder="Email" /> + + + } + type="password" + placeholder="Password" + /> + + {signInError ? ( + + ) : null} + + + + + +
+ ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(SignInPage); diff --git a/src/components/pages/sign-in/sign-in.page.styles.scss b/src/components/pages/sign-in/sign-in.page.styles.scss new file mode 100644 index 0000000..2425df8 --- /dev/null +++ b/src/components/pages/sign-in/sign-in.page.styles.scss @@ -0,0 +1,29 @@ +.login-container { + display: flex; + align-items: center; + flex-direction: column; + padding: 2rem; + form { + width: 75vw; + max-width: 20rem; + } + } + + .login-logo-container { + display: flex; + align-items: center; + margin-bottom: 2rem; + h1 { + text-align: center; + margin: 1rem; + } + } + + //Required as it is position inside form. + .login-btn { + margin: 1.5rem 0rem; + position: relative; + left: 50%; + transform: translate(-50%, 0); + } + \ No newline at end of file diff --git a/src/components/templates/error-boundary.template.jsx b/src/components/templates/error-boundary.template.jsx new file mode 100644 index 0000000..94abe98 --- /dev/null +++ b/src/components/templates/error-boundary.template.jsx @@ -0,0 +1,64 @@ +import { Button, Col, Collapse, Result, Row, Space } from "antd"; +import React from "react"; + +class ErrorBoundary extends React.Component { + constructor() { + super(); + this.state = { + hasErrored: false, + error: null, + info: null, + }; + } + + static getDerivedStateFromError(error) { + console.log("ErrorBoundary -> getDerivedStateFromError -> error", error); + return { hasErrored: true, error: error }; + } + + componentDidCatch(error, info) { + console.log("Exception Caught by Error Boundary.", error, info); + this.setState({ ...this.state, error, info }); + } + + render() { + if (this.state.hasErrored === true) { + return ( +
+ + + + } + /> + + + + +
+ {this.state.error.message} +
+
{this.state.error.stack}
+
+
+ +
+
+ ); + } else { + return this.props.children; + } + } +} +export default ErrorBoundary; diff --git a/src/components/test.jsx b/src/components/test.jsx new file mode 100644 index 0000000..a7f07a2 --- /dev/null +++ b/src/components/test.jsx @@ -0,0 +1,55 @@ +import { Button, Layout } from "antd"; +import React, { useEffect } from "react"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import ipcTypes from "../ipc.types"; + +const { ipcRenderer } = window.require("electron"); +//const settings = window.require("electron-settings"); + +const mapStateToProps = createStructuredSelector({}); +const mapDispatchToProps = (dispatch) => ({}); + +export function App() { + useEffect(() => { + ipcRenderer.on("test-success", (event, obj) => { + console.log("Test Success", obj); + }); + ipcRenderer.on(ipcTypes.default.filewatcher.startSuccess, (event, obj) => { + console.log(ipcTypes.default.filewatcher.startSuccess, obj); + }); + // Cleanup the listener events so that memory leaks are avoided. + return function cleanup() { + ipcRenderer.removeAllListeners( + "test-success", + ipcTypes.default.filewatcher.startSuccess + ); + }; + }, []); + + return ( + + +
Header
+
+ +
Welcome to your new react app. asdas sd
+ + +
+
+ ); +} +export default connect(mapStateToProps, mapDispatchToProps)(App); diff --git a/src/firebase/firebase.utils.js b/src/firebase/firebase.utils.js index 6d7f4a3..5b34823 100644 --- a/src/firebase/firebase.utils.js +++ b/src/firebase/firebase.utils.js @@ -1,18 +1,14 @@ -import firebase from "firebase/app"; -import "firebase/firestore"; +import "firebase/analytics"; import "firebase/auth"; import "firebase/database"; -import "firebase/analytics"; import "firebase/messaging"; -import { store } from "../redux/store"; +import firebase from "firebase/app"; const config = JSON.parse(process.env.REACT_APP_FIREBASE_CONFIG); firebase.initializeApp(config); export const auth = firebase.auth(); -export const firestore = firebase.firestore(); export const analytics = firebase.analytics(); - export default firebase; export const getCurrentUser = () => { @@ -34,83 +30,3 @@ export const updateCurrentUser = (userDetails) => { }, reject); }); }; - -let messaging; -try { - messaging = firebase.messaging(); - // Project Settings => Cloud Messaging => Web Push certificates - messaging.usePublicVapidKey(process.env.REACT_APP_FIREBASE_PUBLIC_VAPID_KEY); - console.log("[FCM UTIL] FCM initialized successfully."); -} catch { - console.log("[FCM UTIL] Firebase Messaging is likely unsupported."); -} - -export { messaging }; - -export const logImEXEvent = (eventName, additionalParams, stateProp = null) => { - const state = stateProp || store.getState(); - const eventParams = { - shop: - (state.user && state.user.bodyshop && state.user.bodyshop.shopname) || - null, - user: - (state.user && state.user.currentUser && state.user.currentUser.email) || - null, - ...additionalParams, - }; - analytics.logEvent(eventName, eventParams); -}; - -if (messaging) { - messaging.onMessage(async (payload) => { - console.log("[FCM] UTILS Message received. ", payload); - navigator.serviceWorker.getRegistration().then((registration) => { - return registration.showNotification( - "[UTIL]" + payload.notification.title, - payload.notification - ); - }); - - // if (!payload.clientId) return; - - // // Get the client. - // const client = await clients.get(payload.clientId); - // // Exit early if we don't get the client. - // // Eg, if it closed. - // if (!client) return; - - // // Send a message to the client. - // console.log("Posting to client."); - // client.postMessage({ - // msg: "Hey I just got a fetch from you!", - // url: payload.request.url, - // }); - - // [START_EXCLUDE] - // Update the UI to include the received message. - //appendMessage(payload); - - // [END_EXCLUDE] - }); - - messaging.onTokenRefresh(() => { - messaging - .getToken() - .then((refreshedToken) => { - console.log("[FCM] Token refreshed."); - // Indicate that the new Instance ID token has not yet been sent to the - // app server. - // setTokenSentToServer(false); - // // Send Instance ID token to app server. - // sendTokenToServer(refreshedToken); - // // [START_EXCLUDE] - // // Display new Instance ID token and clear UI of all previous messages. - // resetUI(); - // [END_EXCLUDE] - }) - .catch((err) => { - console.log("[FCM] Unable to retrieve refreshed token ", err); - // showToken("Unable to retrieve refreshed token ", err); - }); - }); -} diff --git a/src/graphql/GraphQLClient.js b/src/graphql/GraphQLClient.js new file mode 100644 index 0000000..96a9011 --- /dev/null +++ b/src/graphql/GraphQLClient.js @@ -0,0 +1,130 @@ +import { ApolloClient, ApolloLink, InMemoryCache } from "@apollo/client"; +import { setContext } from "@apollo/client/link/context"; +import { onError } from "@apollo/client/link/error"; +import { HttpLink } from "@apollo/client/link/http"; //"apollo-link-http"; +import { RetryLink } from "@apollo/client/link/retry"; +import { WebSocketLink } from "@apollo/client/link/ws"; +import { getMainDefinition } from "@apollo/client/utilities"; +import apolloLogger from "apollo-link-logger"; +import { auth } from "../firebase/firebase.utils"; + +const errorLink = onError( + ({ graphQLErrors, networkError, operation, forward }) => { + if (graphQLErrors) + graphQLErrors.forEach(({ message, locations, path }) => + console.log( + `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}` + ) + ); + if (networkError) + console.log(`[Network error]: ${JSON.stringify(networkError)}`); + console.log(operation.getContext()); + } +); + +const httpLink = new HttpLink({ + uri: process.env.REACT_APP_GRAPHQL_ENDPOINT, +}); + +const wsLink = new WebSocketLink({ + uri: process.env.REACT_APP_GRAPHQL_ENDPOINT_WS, + options: { + lazy: true, + reconnect: true, + connectionParams: async () => { + const token = + auth.currentUser && (await auth.currentUser.getIdToken(true)); + if (token) { + return { + headers: { + authorization: token ? `Bearer ${token}` : "", + }, + }; + } + }, + }, +}); + +const subscriptionMiddleware = { + applyMiddleware: async (options, next) => { + options.authToken = + auth.currentUser && (await auth.currentUser.getIdToken(true)); + next(); + }, +}; +wsLink.subscriptionClient.use([subscriptionMiddleware]); + +const link = new HttpLink.split( + // split based on operation type + ({ query }) => { + const definition = getMainDefinition(query); + // console.log( + // "##Intercepted GQL Transaction : " + + // definition.operation + + // "|" + + // definition.name.value + + // "##", + // query + // ); + return ( + definition.kind === "OperationDefinition" && + definition.operation === "subscription" + ); + }, + wsLink, + httpLink +); + +const authLink = setContext((_, { headers }) => { + return ( + auth.currentUser && + auth.currentUser.getIdToken().then((token) => { + if (token) { + return { + headers: { + ...headers, + authorization: token ? `Bearer ${token}` : "", + }, + }; + } else { + console.log("We have no authorization header."); + return { headers }; + } + }) + ); +}); + +const retryLink = new RetryLink({ + delay: { + initial: 500, + max: 5, + jitter: true, + }, + attempts: { + max: 5, + retryIf: (error, _operation) => !!error, + }, +}); + +const middlewares = []; +if (process.env.NODE_ENV === "development") { + middlewares.push(apolloLogger); +} + +middlewares.push(retryLink.concat(errorLink.concat(authLink.concat(link)))); + +const cache = new InMemoryCache({}); + +export default new ApolloClient({ + link: ApolloLink.from(middlewares), + cache, + connectToDevTools: process.env.NODE_ENV !== "production", + defaultOptions: { + query: { + fetchPolicy: "network-only", + }, + watchQuery: { + fetchPolicy: "network-only", + }, + }, +}); diff --git a/src/graphql/user.queries.js b/src/graphql/user.queries.js new file mode 100644 index 0000000..1c01b10 --- /dev/null +++ b/src/graphql/user.queries.js @@ -0,0 +1,14 @@ +import gql from "graphql-tag"; + +export const UPSERT_USER = gql` + mutation UPSERT_USER($authEmail: String!, $authToken: String!) { + insert_users( + objects: [{ email: $authEmail, authid: $authToken }] + on_conflict: { constraint: users_pkey, update_columns: [authid] } + ) { + returning { + authid + } + } + } +`; \ No newline at end of file diff --git a/src/redux/root.saga.js b/src/redux/root.saga.js index 33c7a5b..64c4946 100644 --- a/src/redux/root.saga.js +++ b/src/redux/root.saga.js @@ -1,6 +1,7 @@ import { all, call } from "redux-saga/effects"; import { applicationSagas } from "./application/application.sagas"; +import { userSagas } from "./user/user.sagas"; export default function* rootSaga() { - yield all([call(applicationSagas)]); + yield all([call(applicationSagas), call(userSagas)]); } diff --git a/src/redux/user/user.sagas.js b/src/redux/user/user.sagas.js index f0148fb..1ee4c85 100644 --- a/src/redux/user/user.sagas.js +++ b/src/redux/user/user.sagas.js @@ -1,29 +1,22 @@ -import Fingerprint2 from "fingerprintjs2"; -import LogRocket from "logrocket"; -import { all, call, delay, put, select, takeLatest } from "redux-saga/effects"; +import { all, call, put, takeLatest } from "redux-saga/effects"; import { auth, - firestore, getCurrentUser, - logImEXEvent, updateCurrentUser, } from "../../firebase/firebase.utils"; +import client from "../../graphql/GraphQLClient"; +import { UPSERT_USER } from "../../graphql/user.queries"; import { - checkInstanceId, - setInstanceConflict, - setInstanceId, - setLocalFingerprint, + sendPasswordResetFailure, + sendPasswordResetSuccess, signInFailure, signInSuccess, signOutFailure, signOutSuccess, unauthorizedUser, updateUserDetailsSuccess, - sendPasswordResetFailure, - sendPasswordResetSuccess, - validatePasswordResetSuccess, validatePasswordResetFailure, - setAuthlevel, + validatePasswordResetSuccess, } from "./user.actions"; import UserActionTypes from "./user.types"; @@ -32,9 +25,14 @@ export function* onEmailSignInStart() { } export function* signInWithEmail({ payload: { email, password } }) { try { - logImEXEvent("redux_sign_in_attempt", { user: email }); - const { user } = yield auth.signInWithEmailAndPassword(email, password); + console.log("function*signInWithEmail -> user", user) + + const result = yield client.mutate({ + mutation: UPSERT_USER, + variables: { authEmail: user.email, authToken: user.uid }, + }); + console.log("function*signInWithEmail -> result", result); yield put( signInSuccess({ @@ -47,7 +45,6 @@ export function* signInWithEmail({ payload: { email, password } }) { ); } catch (error) { yield put(signInFailure(error)); - logImEXEvent("redux_sign_in_failure", { user: email, error }); } } @@ -56,15 +53,12 @@ export function* onCheckUserSession() { } export function* isUserAuthenticated() { try { - logImEXEvent("redux_auth_check"); - const user = yield getCurrentUser(); if (!user) { yield put(unauthorizedUser()); return; } - LogRocket.identify(user.email); yield put( signInSuccess({ uid: user.uid, @@ -83,8 +77,6 @@ export function* onSignOutStart() { } export function* signOutStart() { try { - logImEXEvent("redux_sign_out"); - yield auth.signOut(); yield put(signOutSuccess()); localStorage.removeItem("token"); @@ -105,66 +97,15 @@ export function* updateUserDetails(userDetails) { //TODO error handling } } -export function* onSetInstanceId() { - yield takeLatest(UserActionTypes.SET_INSTANCE_ID, setInstanceIdSaga); -} -export function* setInstanceIdSaga({ payload: uid }) { - try { - const userInstanceRef = firestore.doc(`userInstance/${uid}`); - - const fingerprint = Fingerprint2.x64hash128( - (yield Fingerprint2.getPromise({})).map((c) => c.value).join(""), - 31 - ); - - yield userInstanceRef.set({ - timestamp: new Date(), - fingerprint, - }); - - yield put(setLocalFingerprint(fingerprint)); - yield delay(5 * 60 * 1000); - if (process.env.NODE_ENV === "production") yield put(checkInstanceId(uid)); - } catch (error) { - console.log("error", error); - //yield put(signOutFailure(error.message)); - //TODO error handling - } -} - -export function* onCheckInstanceId() { - yield takeLatest(UserActionTypes.CHECK_INSTANCE_ID, checkInstanceIdSaga); -} -export function* checkInstanceIdSaga({ payload: uid }) { - try { - const userInstanceRef = firestore.doc(`userInstance/${uid}`); - - const snapshot = yield userInstanceRef.get(); - let fingerprint = yield select((state) => state.user.fingerprint); - - if (snapshot.data().fingerprint === fingerprint) { - yield delay(5 * 60 * 1000); - yield put(checkInstanceId(uid)); - } else { - console.log("ERROR: Fingerprints do not match. Conflict detected."); - logImEXEvent("instance_confict"); - yield put(setInstanceConflict()); - } - } catch (error) { - console.log("error", error); - //TODO error handling - } -} export function* onSignInSuccess() { yield takeLatest(UserActionTypes.SIGN_IN_SUCCESS, signInSuccessSaga); } export function* signInSuccessSaga({ payload }) { - LogRocket.identify(payload.email); - - if (!payload.email.includes("@imex.")) yield put(setInstanceId(payload.uid)); - yield logImEXEvent("redux_sign_in_success"); + // LogRocket.identify(payload.email); + // if (!payload.email.includes("@imex.")) yield put(setInstanceId(payload.uid)); + // yield logImEXEvent("redux_sign_in_success"); } export function* onSendPasswordResetStart() { @@ -178,7 +119,7 @@ export function* sendPasswordResetEmail({ payload }) { yield auth.sendPasswordResetEmail(payload, { url: "https://imex.online/passwordreset", }); - console.log("Good should send."); + yield put(sendPasswordResetSuccess()); } catch (error) { yield put(sendPasswordResetFailure(error.message)); @@ -201,37 +142,14 @@ export function* validatePasswordResetStart({ payload: { password, code } }) { } } -export function* onSetShopDetails() { - yield takeLatest( - UserActionTypes.SET_SHOP_DETAILS, - SetAuthLevelFromShopDetails - ); -} -export function* SetAuthLevelFromShopDetails({ payload }) { - try { - const userEmail = yield select((state) => state.user.currentUser.email); - - const authRecord = payload.associations.filter( - (a) => a.useremail === userEmail - ); - - yield put(setAuthlevel(authRecord[0] ? authRecord[0].authlevel : 0)); - } catch (error) { - yield put(signInFailure(error.message)); - } -} - export function* userSagas() { yield all([ call(onEmailSignInStart), call(onCheckUserSession), call(onSignOutStart), call(onUpdateUserDetails), - call(onSetInstanceId), - call(onCheckInstanceId), call(onSignInSuccess), call(onSendPasswordResetStart), call(onValidatePasswordResetStart), - call(onSetShopDetails), ]); }